Lorsque Claude décide d'utiliser un outil, il renvoie une structure de réponse spéciale qui nécessite une gestion attentive. Comprendre ce format de réponse et mettre en œuvre une gestion appropriée de la conversation est crucial pour construire des applications robustes utilisant des outils.
Configuration du choix d'outil
Avant de plonger dans les réponses, il est utile de comprendre comment contrôler quand Claude utilise des outils. Le paramètre toolChoice vous offre trois options :

- auto - Claude décide s'il doit utiliser un outil (comportement par défaut)
- any - Claude doit utiliser un outil mais peut choisir lequel
- specific tool - Forcer Claude à utiliser un outil particulier par son nom
La troisième option est particulièrement utile pour les tests lorsque vous souhaitez vous assurer que Claude appelle une fonction spécifique.
Structure de message à plusieurs parties
Lorsque Claude souhaite utiliser un outil, il renvoie un message d'assistant avec plusieurs parties de contenu au lieu de simplement du texte :

La réponse contient deux parties :
- Partie texte - Explication lisible par un humain comme « Je peux vous aider à connaître l'heure actuelle. Laissez-moi trouver cette information pour vous »
- Partie ToolUse - Données structurées vous indiquant quel outil exécuter et avec quels arguments
Comprendre la partie ToolUse
La partie ToolUse contient trois informations clés :

- toolUseId - Un identifiant unique dont vous aurez besoin lors de l'envoi du résultat de l'outil
- name - Le nom exact de l'outil issu de votre schéma JSON que Claude souhaite appeler
- input - Un dictionnaire d'arguments que Claude souhaite transmettre à votre fonction d'outil
Flux de conversation avec les outils
L'utilisation d'outils suit un schéma de conversation spécifique qui nécessite de maintenir l'historique complet des messages :

Lorsque vous recevez une demande d'utilisation d'outil, vous devez :
- Extraire les informations de l'outil à partir de la partie ToolUse
- Exécuter votre fonction d'outil réelle
- Renvoyer un message ToolResult accompagné de l'historique complet de la conversation
- Inclure le message original de l'utilisateur et le message d'utilisation d'outil de l'assistant dans votre prochaine requête
Mise à jour des fonctions d'assistance
Pour gérer correctement les messages à plusieurs parties, vous devrez mettre à jour vos fonctions de gestion des messages. Voici comment rendre vos fonctions suffisamment flexibles pour gérer à la fois du texte simple et du contenu complexe à plusieurs parties :
def add_user_message(messages, content):
if isinstance(content, str):
user_message = {"role": "user", "content": [{"text": content}]}
else:
user_message = {"role": "user", "content": content}
messages.append(user_message)
def add_assistant_message(messages, content):
if isinstance(content, str):
assistant_message = {"role": "assistant", "content": [{"text": content}]}
else:
assistant_message = {"role": "assistant", "content": content}
messages.append(assistant_message)Vous voudrez également mettre à jour votre fonction de chat pour qu'elle renvoie à la fois le texte et la liste complète des parties :
def chat(messages, system=None, temperature=1.0, stop_sequences=[], tools=None):
# ... code de configuration existant ...
response = client.converse(**params)
text = response["output"]["message"]["content"][0]["text"]
parts = response["output"]["message"]["content"]
return text, partsVérification de la raison d'arrêt
La réponse de Claude inclut également un champ de niveau supérieur stopReason. Lorsqu'il est égal à "tool_use", Claude souhaite appeler un outil plutôt que de simplement fournir une réponse textuelle — c'est votre signal pour extraire les informations de l'outil et exécuter la fonction demandée. L'assistant chat() ci-dessus n'expose pas encore ce champ, donc pour l'instant vous pouvez détecter l'utilisation d'outils en vérifiant la liste des parties renvoyées pour une entrée avec une clé toolUse. Vous étendrez chat() pour renvoyer directement stopReason dans une leçon ultérieure.
Avec ces schémas en place, vous êtes prêt à gérer les demandes d'utilisation d'outils de Claude et à maintenir un flux de conversation approprié tout au long des interactions d'outils multi-tours.