Quiz : utilisation des outils avec Claude
Sur cette page
Dix questions pour vérifier les acquis de la section, des fonctions d’outils à la recherche web. Répondez avant d’ouvrir chaque réponse.
Question 1 : le signal d’un appel d’outil
À quoi votre code voit-il que Claude attend le résultat d’un outil ?
Voir la réponse
Au champ stop_reason de la réponse, qui vaut "tool_use". La boucle exécute les outils et relance Claude tant qu’il garde cette valeur, et s’arrête sur toute autre : end_turn, max_tokens, refusal ou pause_turn (leçon 38).
Question 2 : la position des blocs
Pourquoi response.content[1].input est-il une mauvaise façon de lire un appel d’outil ?
Voir la réponse
Parce que le nombre et l’ordre des blocs varient. Une réponse peut commencer par un bloc thinking (réflexion active par défaut sur les modèles Claude 5), contenir ou non un bloc text, et compter un ou plusieurs blocs tool_use. On cherche les blocs par leur type : [block for block in response.content if block.type == "tool_use"] (leçon 35).
Question 3 : le lien entre demande et résultat
Quel champ relie un tool_result à sa demande, et que se passe-t-il si un tool_use reste sans résultat ?
Voir la réponse
Le champ tool_use_id, qui reprend l’id du bloc tool_use. Si un appel reste sans résultat dans le message qui suit, l’API refuse la requête avec une erreur 400 : tool_use ids were found without tool_result blocks immediately after. Claude n’attend pas en silence : c’est votre requête qui échoue (leçons 36 et 38).
Question 4 : l’échec d’un outil
Votre fonction lève une exception. Que renvoyer à Claude ?
Voir la réponse
Un tool_result quand même, avec is_error: True et un message instructif, qui dit ce qui ne va pas et ce qui est attendu. Claude peut alors corriger ses arguments, essayer autrement ou expliquer le problème. Journalisez aussi l’exception de votre côté (leçons 33 et 38).
Question 5 : la description d’un outil
Qu’est-ce qui pèse le plus sur la bonne utilisation d’un outil par Claude ?
Voir la réponse
Sa description. La documentation en fait le premier facteur de performance et recommande au moins trois à quatre phrases : ce que fait l’outil, quand l’utiliser et quand ne pas l’utiliser, le sens de chaque paramètre, ses limites. Claude ne voit jamais votre code, seulement la définition (leçon 34).
Question 6 : les appels parallèles
Claude demande trois outils dans une même réponse. Comment renvoyer les résultats ?
Voir la réponse
Tous ensemble, dans un seul message user, un tool_result par appel, avant tout texte. Un message par résultat « apprend » à Claude à cesser les appels parallèles. L’ordre d’exécution vous appartient : en parallèle pour des lectures indépendantes, en séquence pour des opérations à effets (leçon 40).
Question 7 : forcer un outil
Sur Claude Sonnet 5.5, vous envoyez tool_choice={"type": "tool", "name": "save_article_summary"}. Que se passe-t-il, et que faire à la place ?
Voir la réponse
La requête échoue avec une erreur 400 : Opus 5.5, Sonnet 5.5, Fable 5.1 et Mythos 5.1 refusent any et tool. On garde auto, on demande l’outil dans le message, on vérifie qu’un bloc tool_use est bien présent, et on ajoute strict: true pour garantir la forme des arguments. Si le but est seulement d’obtenir un objet JSON, les sorties structurées (output_config.format) sont l’outil prévu (leçon 41).
Question 8 : le mode strict
Que faut-il ajouter à une définition pour que les arguments respectent toujours le schéma ?
Voir la réponse
"strict": true au niveau de la définition, et "additionalProperties": false dans chaque objet du schéma. Le schéma doit rester dans le sous-ensemble pris en charge : ni minimum, ni maxLength, ni schéma récursif, par exemple (leçon 41).
Question 9 : le streaming granulaire
Que change eager_input_streaming: true, et quelles précautions impose-t-il ?
Voir la réponse
Les fragments d’arguments arrivent dès leur génération, au lieu d’être retenus et validés valeur par valeur par l’API. En contrepartie, le JSON peut être invalide ou tronqué : on rattrape la ValueError du SDK Python, on vérifie stop_reason (max_tokens, refusal), on valide les arguments avant d’exécuter l’outil, et on renvoie une entrée invalide à Claude sous INVALID_JSON (leçon 42).
Question 10 : les outils fournis par Anthropic
Qui exécute l’outil d’édition de texte, et qui exécute la recherche web ?
Voir la réponse
L’outil d’édition de texte (text_editor_20250728, nommé str_replace_based_edit_tool) a un schéma fourni par Anthropic, mais c’est votre application qui lit et modifie les fichiers. La recherche web est un outil serveur : Anthropic l’exécute, et la réponse arrive avec les blocs server_tool_use, web_search_tool_result et les citations, à renvoyer intacts pour poursuivre (leçons 43 et 44).
À vous de jouer
Assembler l’assistant. Réunissez dans un seul script les trois outils du projet, la boucle plafonnée et la recherche web. Testez trois demandes : un rappel dans 177 jours, deux rappels indépendants le même jour, et une question d’actualité. Pour chacune, notez les outils appelés, le nombre de tours et le stop_reason final.
Sources officielles : Quiz on tool use with Claude (Claude Academy) · Tool use with Claude (documentation Claude)
Points clés à retenir
- Définir : une fonction validée et une définition dont la description dit quand utiliser l’outil.
- Boucler : relancer tant que
stop_reasonvauttool_use, untool_resultpar appel, les erreurs avecis_error. - Fiabiliser : résultats parallèles dans un seul message,
strict: true, validation en streaming granulaire. - Les outils fournis : l’éditeur de texte s’exécute chez vous, la recherche web chez Anthropic.