Quiz : utilisation des outils avec Claude
Testez vos connaissances sur l’utilisation des outils avec l’API Claude. Chaque question porte sur un concept aborde dans les lecons precedentes.
Question 1 : Detection des appels d’outils
Comment savoir si Claude veut utiliser un outil dans sa reponse ?
Voir la reponse
On verifie le champ stop_reason de la reponse. Quand Claude veut appeler un outil, ce champ vaut "tool_use". Si la valeur est differente (par exemple "end_turn"), Claude a termine et fournit sa reponse finale.
if response.stop_reason == "tool_use":
# Claude veut utiliser un outil
tool_results = run_tools(response)
Question 2 : Blocs de resultats d’outils
Quel champ permet de faire le lien entre un bloc tool_use et son bloc tool_result correspondant ?
Voir la reponse
C’est le champ tool_use_id. Chaque bloc tool_use a un identifiant unique, et le bloc tool_result correspondant doit utiliser exactement le meme 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 echoue pendant son execution ? Faut-il quand meme renvoyer un resultat a Claude ?
Voir la reponse
Oui, il faut toujours renvoyer un bloc de resultat, meme en cas d’erreur. On utilise le champ is_error: True pour signaler l’echec. Claude pourra alors adapter sa reponse (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 a utiliser un outil specifique nomme "extract_data" ?
Voir la reponse
On utilise le parametre 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 decide seul (par defaut){"type": "any"}— Claude doit utiliser un outil, au choix{"type": "tool", "name": "NOM"}— Claude doit utiliser l’outil specifie
Question 5 : L’outil batch
Quel est l’interet principal de l’outil batch ?
Voir la reponse
L’outil batch permet de reduire le nombre d’allers-retours avec l’API en encourageant Claude a regrouper plusieurs appels d’outils independants dans une seule requete. Au lieu de faire un aller-retour par outil, Claude appelle le batch tool une seule fois avec la liste de toutes les operations a effectuer.
C’est un meta-outil qui accepte une liste d’invocations, chacune contenant le nom de l’outil et ses arguments.
Question 6 : Donnees structurees via les outils
Comment utiliser les outils pour extraire des donnees structurees, sans que l’outil ait une vraie implementation ?
Voir la reponse
On cree un schema JSON qui decrit la structure de donnees souhaitee, on le declare comme outil, et on force Claude a l’utiliser via tool_choice. Les donnees structurees se trouvent dans le champ input du bloc tool_use de la reponse :
structured_data = response.content[0].input
Il n’est pas necessaire de fournir un resultat d’outil en retour — on recupere simplement les donnees et on s’arrete la.
Question 7 : Streaming granulaire
Quelle est la difference principale entre le streaming standard et le mode fine_grained pour les outils ?
Voir la reponse
En mode standard, l’API met en tampon et valide les fragments JSON avant de les envoyer. Elle attend qu’une paire cle-valeur de premier niveau soit complete et valide avant de transmettre les donnees.
En mode fine_grained, la validation JSON est desactivee cote API. Les fragments arrivent des que Claude les genere, sans mise en tampon. C’est plus rapide mais le JSON peut etre invalide — votre code doit gerer ces cas avec un try/except sur json.loads().
Le mode granulaire est utile pour les applications ou la reactivite est critique.