Aller au contenu principal

Envoi des résultats d'outils

Mis à jour le 30 juillet 2026

Après que Claude à demande un appel d’outil, vous devez exécuter la fonction et renvoyer les résultats. Cette étape complète le workflow d’utilisation d’outils en fournissant à Claude les informations qu’il a demandées.

Exécuter la fonction d’outil

Quand Claude répond avec un bloc tool_use, vous extrayez les paramètres d’entrée et appelez votre fonction. Voici comment accéder aux paramètres :

# Accéder aux paramètres que Claude veut passer a la fonction
response.content[1].input

Cela vous donne un dictionnaire des arguments. Comme votre fonction attend des arguments nommés (et non un dictionnaire), on utilise la syntaxe de deballage (unpacking) de Python :

# Deballer le dictionnaire en arguments nommes
result = get_current_datetime(**response.content[1].input)

Le bloc tool_result

Après avoir exécuté la fonction, vous devez renvoyer les résultats à Claude via un bloc tool_result. Ce bloc se place dans un message utilisateur et indique à Claude ce qui s’est passé quand vous avez exécute l’outil.

Le bloc tool_result à trois propriétés importantes :

PropriétéDescription
tool_use_idDoit correspondre à l’id du bloc ToolUse auquel ce résultat répond
contentLa sortie de votre fonction, sérialisée en chaîne de caractères
is_errorTrue si une erreur s’est produite

Gérer les appels d’outils multiples

Claude peut demander plusieurs appels d’outils dans une seule réponse. Par exemple, si un utilisateur demande “Combien font 10 + 10 et 30 + 30 ?”, Claude pourrait répondre avec deux blocs ToolUse distincts.

Chaque appel d’outil reçoit un identifiant unique, et vous devez faire correspondre ces identifiants quand vous renvoyez les résultats. C’est ainsi que Claude sait quel résultat correspond à quelle demande, même si les résultats arrivent dans un ordre différent.

Construire la requête de suivi

Votre requête de suivi à Claude doit inclure l’historique complet de la conversation plus le nouveau résultat d’outil :

# Ajouter le résultat de l'outil a l'historique
messages.append({
    "role": "user",
    "content": [{
        "type": "tool_result",
        "tool_use_id": response.content[1].id,  # Correspondance avec l'ID de la demande
        "content": "15:04:22",                    # Résultat de la fonction (en string)
        "is_error": False
    }]
})

L’historique complet des messages contient maintenant :

  1. Le message utilisateur original
  2. Le message assistant avec le bloc tool_use
  3. Le message utilisateur avec le bloc tool_result

Envoyer la requête finale

Quand vous envoyez la requête de suivi, vous devez toujours inclure le schéma d’outil, même si vous ne vous attendez pas à ce que Claude fasse un autre appel d’outil. Claude a besoin du schéma pour comprendre les références aux outils dans l’historique de conversation.

# Le schema d'outil est toujours requis
response = client.messages.create(
    model=model,
    max_tokens=1000,
    messages=messages,
    tools=[get_current_datetime_schema]  # Toujours present !
)

Claude répond alors avec un message final qui intègre les résultats d’outil dans une réponse naturelle pour l’utilisateur. Le workflow d’utilisation d’outil est maintenant complet : vous avez réussi à permettre à Claude d’accéder à des informations en temps réel via votre fonction personnalisée.

Exercice : Simulez un échange complet

Reconstituez mentalement l’échange complet pour la question “Quelle heure est-il ?” :

  1. Message user : "Quelle heure est-il exactement ?"
  2. Message assistant : Bloc texte (“Je vais vérifier…”) + Bloc tool_use (get_current_datetime, input: {"date_format": "%H:%M:%S"})
  3. Message user : Bloc tool_result (tool_use_id correspondant, content: "14:32:07", is_error: False)
  4. Message assistant : "Il est exactement 14h32 et 7 secondes."

Vérifiez que vous comprenez pourquoi :

  • Le tool_use_id doit correspondre entre les étapes 2 et 3
  • Le content du tool_result est une chaîne de caractères, pas un objet
  • Le schéma d’outil est passé à chaque appel client.messages.create()