Cette page couvre le cycle de vie des appels d'outils : lire les blocs tool_use de la réponse de Claude, formater les blocs tool_result dans votre réponse et signaler les erreurs. Pour l'abstraction SDK qui gère cela automatiquement, voir Tool Runner.
Plus simple avec Tool Runner : La gestion manuelle des outils décrite sur cette page est automatiquement gérée par Tool Runner. Utilisez cette page lorsque vous avez besoin d'un contrôle personnalisé sur l'exécution des outils.
La réponse de Claude diffère selon qu'il utilise un outil client ou serveur.
La réponse aura un stop_reason de tool_use et un ou plusieurs blocs de contenu tool_use qui incluent :
id : Un identifiant unique pour ce bloc d'utilisation d'outil particulier. Ceci sera utilisé pour faire correspondre les résultats de l'outil plus tard.name : Le nom de l'outil utilisé.input : Un objet contenant l'entrée transmise à l'outil, conforme au input_schema de l'outil.Lorsque vous recevez une réponse d'utilisation d'outil pour un outil client, vous devez :
name, l'id et l'input du bloc tool_use.input de l'outil.role de user et un bloc content contenant le type tool_result et les informations suivantes :
tool_use_id : L'id de la demande d'utilisation d'outil pour laquelle ceci est un résultat.content : Le résultat de l'outil, sous forme de chaîne (par exemple, "content": "15 degrees"), une liste de blocs de contenu imbriqués (par exemple, "content": [{"type": "text", "text": "15 degrees"}]), ou une liste de blocs de documents (par exemple, "content": [{"type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15 degrees"}}]). Ces blocs de contenu peuvent utiliser les types text, image ou document.is_error (optionnel) : Défini sur true si l'exécution de l'outil a entraîné une erreur.Exigences de formatage importantes :
Par exemple, ceci causera une erreur 400 :
{
"role": "user",
"content": [
{ "type": "text", "text": "Here are the results:" }, // ❌ Text before tool_result
{ "type": "tool_result", "tool_use_id": "toolu_01" /* ... */ }
]
}Ceci est correct :
{
"role": "user",
"content": [
{ "type": "tool_result", "tool_use_id": "toolu_01" /* ... */ },
{ "type": "text", "text": "What should I do next?" } // ✅ Text after tool_result
]
}Si vous recevez une erreur comme « tool_use ids were found without tool_result blocks immediately after », vérifiez que vos résultats d'outils sont formatés correctement.
Après avoir reçu le résultat de l'outil, Claude utilisera ces informations pour continuer à générer une réponse à la demande utilisateur d'origine.
Claude exécute l'outil en interne et intègre les résultats directement dans sa réponse sans nécessiter d'interaction utilisateur supplémentaire.
Différences par rapport aux autres API
Contrairement aux API qui séparent l'utilisation d'outils ou utilisent des rôles spéciaux comme tool ou function, l'API Claude intègre les outils directement dans la structure des messages user et assistant.
Les messages contiennent des tableaux de blocs text, image, tool_use et tool_result. Les messages user incluent le contenu client et tool_result, tandis que les messages assistant contiennent le contenu généré par l'IA et tool_use.
Il existe plusieurs types d'erreurs qui peuvent survenir lors de l'utilisation d'outils avec Claude :
Was this page helpful?