Aller au contenu principal

Quiz : utilisation des outils avec Claude

Mis à jour le 30 juillet 2026

Testez vos connaissances sur l’utilisation des outils avec l’API Claude. Chaque question porte sur un concept aborde dans les leçons précédentes.


Question 1 : Détection des appels d’outils

Comment savoir si Claude veut utiliser un outil dans sa réponse ?

Voir la réponse

On vérifie le champ stop_reason de la réponse. Quand Claude veut appeler un outil, ce champ vaut "tool_use". Si la valeur est différente (par exemple "end_turn"), Claude a terminé et fournit sa réponse finale.

if response.stop_reason == "tool_use":
    # Claude veut utiliser un outil
    tool_results = run_tools(response)

Question 2 : Blocs de résultats d’outils

Quel champ permet de faire le lien entre un bloc tool_use et son bloc tool_result correspondant ?

Voir la réponse

C’est le champ tool_use_id. Chaque bloc tool_use à un identifiant unique, et le bloc tool_result correspondant doit utiliser exactement le même identifiant dans son champ tool_use_id.

tool_result_block = {
    "type": "tool_result",
    "tool_use_id": tool_request.id,  # Doit correspondre a l'id du tool_use
    "content": json.dumps(result),
    "is_error": False
}

Question 3 : Gestion des erreurs

Que se passe-t-il si un outil échoue pendant son exécution ? Faut-il quand même renvoyer un résultat à Claude ?

Voir la réponse

Oui, il faut toujours renvoyer un bloc de résultat, même en cas d’erreur. On utilise le champ is_error: True pour signaler l’échec. Claude pourra alors adapter sa réponse (retenter, demander des clarifications, ou informer l’utilisateur).

except Exception as e:
    tool_result_block = {
        "type": "tool_result",
        "tool_use_id": tool_request.id,
        "content": f"Error: {e}",
        "is_error": True
    }

Question 4 : Forcer l’utilisation d’un outil

Comment forcer Claude à utiliser un outil spécifique nommé "extract_data" ?

Voir la réponse

On utilise le paramètre tool_choice avec le type "tool" et le nom de l’outil :

response = chat(
    messages,
    tools=[extract_data_schema],
    tool_choice={"type": "tool", "name": "extract_data"}
)

Les trois options de tool_choice sont :

  • {"type": "auto"} — Claude décide seul (par défaut)
  • {"type": "any"} — Claude doit utiliser un outil, au choix
  • {"type": "tool", "name": "NOM"} — Claude doit utiliser l’outil spécifie

Question 5 : L’outil batch

Quel est l’intérêt principal de l’outil batch ?

Voir la réponse

L’outil batch permet de réduire le nombre d’allers-retours avec l’API en encourageant Claude à regrouper plusieurs appels d’outils indépendants dans une seule requête. Au lieu de faire un aller-retour par outil, Claude appelle le batch tool une seule fois avec la liste de toutes les opérations à effectuer.

C’est un meta-outil qui accepte une liste d’invocations, chacune contenant le nom de l’outil et ses arguments.


Question 6 : Données structurées via les outils

Comment utiliser les outils pour extraire des données structurées, sans que l’outil ait une vraie implémentation ?

Voir la réponse

On crée un schéma JSON qui décrit la structure de données souhaitée, on le déclaré comme outil, et on force Claude à l’utiliser via tool_choice. Les données structurées se trouvent dans le champ input du bloc tool_use de la réponse :

structured_data = response.content[0].input

Il n’est pas nécessaire de fournir un résultat d’outil en retour — on récupère simplement les données et on s’arrête la.


Question 7 : Streaming granulaire

Quelle est la différence principale entre le streaming standard et le mode fine_grained pour les outils ?

Voir la réponse

En mode standard, l’API met en tampon et valide les fragments JSON avant de les envoyer. Elle attend qu’une paire clé-valeur de premier niveau soit complète et valide avant de transmettre les données.

En mode fine_grained, la validation JSON est désactivée côté API. Les fragments arrivent dès que Claude les génère, sans mise en tampon. C’est plus rapide mais le JSON peut être invalide — votre code doit gérer ces cas avec un try/except sur json.loads().

Le mode granulaire est utile pour les applications où la réactivité est critique.