Gérer les appels d'outils
Analysez les blocs tool_use, formatez les réponses tool_result et gérez les erreurs avec is_error.
Cette page couvre le cycle de vie des appels d'outils : la lecture des blocs tool_use dans la réponse de Claude, le formatage des blocs tool_result dans votre réponse et le signalement des erreurs. Pour l'abstraction du SDK qui gère cela automatiquement, consultez Tool Runner.
La réponse de Claude diffère selon qu'il utilise un outil client ou un outil serveur.
Gérer les résultats des outils clients
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. Il sera utilisé pour faire correspondre les résultats d'outils ultérieurement.name: le nom de l'outil utilisé.input: un objet contenant l'entrée transmise à l'outil, conforme auinput_schemade l'outil.
Un bloc tool_use pour un membre de l'ensemble d'outils computer use (utilisation de l'ordinateur) ou browser use (utilisation du navigateur) comporte également un champ toolset_name ("computer" ou "browser"). Son name est l'outil membre que Claude appelle, tel que screenshot ou navigate ; répartissez donc ces blocs en fonction des deux champs.
{
"id": "msg_01Aq9w938a90dw8q",
"model": "claude-opus-5",
"stop_reason": "tool_use",
"role": "assistant",
"content": [
{
"type": "text",
"text": "I'll check the current weather in San Francisco for you."
},
{
"type": "tool_use",
"id": "toolu_01A09q90qw90lq917835lq9",
"name": "get_weather",
"input": { "location": "San Francisco, CA", "unit": "celsius" }
}
]
}Lorsque vous recevez une réponse d'utilisation d'outil pour un outil client, vous devez :
- Extraire le
name, l'idet l'inputdu bloctool_use. - Exécuter l'outil réel dans votre base de code correspondant à ce nom d'outil, en lui transmettant l'
inputde l'outil. - Poursuivre la conversation en envoyant un nouveau message avec le
roleuseret un bloccontentcontenant le typetool_resultet les informations suivantes :tool_use_id: l'idde la requête d'utilisation d'outil à laquelle ce résultat correspond.content(facultatif) : le résultat de l'outil, sous forme de chaîne de caractères (par exemple,"content": "15 degrees"), de liste de blocs de contenu imbriqués (par exemple,"content": [{"type": "text", "text": "15 degrees"}]) ou de 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 typestext,image,documentousearch_result.is_error(facultatif) : défini surtruesi l'exécution de l'outil a entraîné une erreur.
Un tool_result qui répond à un bloc membre de computer use ou de browser use doit également reprendre la même valeur toolset_name que le bloc tool_use ; un résultat de membre qui l'omet est rejeté. Son content est également plus restreint : un résultat de membre ne peut contenir que des blocs text et image, et un résultat de browser use peut ajouter un bloc browser_state (les membres de gestion des onglets ne renvoient que ce bloc).
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": "15 degrees"
}
]
}{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": [
{ "type": "text", "text": "15 degrees" },
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": "/9j/4AAQSkZJRg..."
}
}
]
}
]
}{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9"
}
]
}{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": [
{ "type": "text", "text": "The weather is" },
{
"type": "document",
"source": {
"type": "text",
"media_type": "text/plain",
"data": "15 degrees"
}
}
]
}
]
}Après avoir reçu le résultat de l'outil, Claude utilisera cette information pour continuer à générer une réponse au prompt initial de l'utilisateur.
Gérer les résultats des outils serveur
Claude exécute l'outil en interne et intègre les résultats directement dans sa réponse sans nécessiter d'interaction supplémentaire de l'utilisateur.
Gérer les erreurs avec is_error
Plusieurs types d'erreurs peuvent survenir lors de l'utilisation d'outils avec Claude :
Si l'outil lui-même génère une erreur pendant son exécution (par exemple, une erreur réseau lors de la récupération de données météorologiques), vous pouvez renvoyer le message d'erreur dans le content accompagné de "is_error": true :
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": "ConnectionError: the weather service API is not available (HTTP 500)",
"is_error": true
}
]
}Claude intégrera alors cette erreur dans sa réponse à l'utilisateur. Par exemple : « Je suis désolé, je n'ai pas pu récupérer la météo actuelle car l'API du service météorologique n'est pas disponible. Veuillez réessayer plus tard. »
Si la tentative d'utilisation d'un outil par Claude est invalide (par exemple, des paramètres obligatoires manquants), cela signifie généralement que Claude ne disposait pas de suffisamment d'informations pour utiliser l'outil correctement. La meilleure approche pendant le développement consiste à réessayer la requête avec des valeurs description plus détaillées dans vos définitions d'outils.
Cependant, vous pouvez également poursuivre la conversation avec un tool_result qui indique l'erreur, et Claude tentera d'utiliser à nouveau l'outil en complétant les informations manquantes :
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": "Error: Missing required 'location' parameter",
"is_error": true
}
]
}Si une requête d'outil est invalide ou qu'il lui manque des paramètres, Claude réessaiera 2 à 3 fois avec des corrections avant de présenter ses excuses à l'utilisateur.
Lorsque les outils serveur rencontrent des erreurs (par exemple, des problèmes réseau avec la recherche web), Claude gère ces erreurs de manière transparente et tente de fournir une réponse alternative ou une explication à l'utilisateur. Contrairement aux outils clients, vous n'avez pas besoin de gérer les résultats is_error pour les outils serveur.
Pour la recherche web en particulier, les codes d'erreur possibles incluent :
too_many_requests: limite de débit dépasséeinvalid_input: paramètre de requête de recherche invalidemax_uses_exceeded: nombre maximal d'utilisations de l'outil de recherche web dépasséquery_too_long: la requête dépasse la longueur maximaleunavailable: une erreur interne s'est produite
Étapes suivantes
Gérez les réponses dans lesquelles Claude appelle plusieurs outils en un seul tour.
Laissez le SDK gérer pour vous la boucle tool_use, le formatage des résultats et les nouvelles tentatives.
Rédigez des schémas et des descriptions qui orientent Claude vers le bon outil.
Was this page helpful?