Aller au contenu principal
Leçon 26 sur 67 · Claude sur Amazon Bedrock

Exécuter les fonctions outils

Leçon 26 sur 67 Mis à jour le 5 novembre 2026 Développeur
Sur cette page
  1. Plusieurs demandes à la fois
  2. Aiguiller vers la bonne fonction
  3. Le bloc toolResult
  4. Les erreurs font partie du dialogue
  5. À vous de jouer
  6. Points clés à retenir

Claude a demandé un outil : à votre serveur de l’exécuter et de préparer le résultat. Cette étape consiste à extraire les blocs toolUse de la réponse, à lancer les fonctions demandées et à mettre leurs sorties au bon format.

Plusieurs demandes à la fois

Une même réponse peut contenir plusieurs blocs toolUse : un texte suivi d’une, deux demandes ou davantage. Si Claude veut calculer deux échéances indépendantes, il peut les demander ensemble. Votre code doit donc toujours traiter une liste de demandes, jamais une seule.

Aiguiller vers la bonne fonction

TOOLS = {
    "get_current_datetime": get_current_datetime,
}


def run_tool(tool_name, tool_input):
    if tool_name not in TOOLS:
        raise ValueError(f"Outil inconnu : {tool_name}")
    return TOOLS[tool_name](**tool_input)

Claude fournit toujours les arguments sous forme de dictionnaire : **tool_input les déplie en arguments nommés de la fonction. Le cours officiel aiguille par une suite de if et elif ; un dictionnaire fait le même travail et grandit d’une ligne par outil.

Le bloc toolResult

D'une demande à son résultat Quatre étapes : le bloc toolUse avec son identifiant, son nom et ses arguments ; l'aiguillage vers la fonction ; l'exécution dans un try ; le bloc toolResult avec le même identifiant et un statut. EXÉCUTER LES OUTILS D'une demande à son résultat 1 toolUse toolUseId, name, input 2 run_tool la bonne fonction, **input 3 try succès ou erreur 4 toolResult même toolUseId, status Un résultat par demande ; l'identifiant fait le lien.
D'après la leçon « Running tool functions » (Claude Academy, Claude with Amazon Bedrock).

Chaque résultat repart dans un bloc toolResult à trois champs :

  • toolUseId : l’identifiant de la demande, recopié tel quel ;
  • content : la sortie de l’outil, ici sérialisée en texte JSON ;
  • status : success ou error.

L’identifiant fait le lien entre demande et résultat. Si Claude demande deux fois la même calculatrice, ses deux demandes portent deux identifiants différents, et vos deux résultats doivent reprendre chacun le bon.

Les erreurs font partie du dialogue

Entourez l’exécution d’un try : une erreur renvoyée proprement permet à Claude de corriger son appel ou de changer d’approche.

import json


def run_tools(parts):
    tool_result_parts = []
    for part in parts:
        if "toolUse" not in part:
            continue
        tool_use = part["toolUse"]
        try:
            output = run_tool(tool_use["name"], tool_use["input"])
            result = {
                "toolUseId": tool_use["toolUseId"],
                "content": [{"text": json.dumps(output, ensure_ascii=False)}],
                "status": "success",
            }
        except Exception as e:
            result = {
                "toolUseId": tool_use["toolUseId"],
                "content": [{"text": f"Erreur : {e}"}],
                "status": "error",
            }
        tool_result_parts.append({"toolResult": result})
    return tool_result_parts

La boucle ignore les blocs de texte et de réflexion, exécute chaque demande et renvoie la liste des blocs toolResult, un par demande. Le message d’erreur est rédigé pour Claude : c’est lui qui le lira.

L’API Converse accepte aussi un bloc {"json": ...} dans content, qui transporte directement un objet. Le texte JSON du cours officiel convient à tous les cas, y compris une simple chaîne comme l’heure renvoyée par get_current_datetime.

À vous de jouer

Tester sans Claude. Fabriquez à la main une liste parts qui contient deux blocs toolUse : un appel valide à get_current_datetime et un appel à un outil qui n’existe pas. Passez-la à run_tools et vérifiez que vous obtenez un résultat success et un résultat error, chacun avec le bon identifiant.

Sources officielles : Running tool functions (Claude Academy) · Use a tool to complete an Amazon Bedrock model response et API Converse (documentation AWS)

Points clés à retenir

  • Une réponse peut contenir plusieurs demandes d’outils : traitez toujours une liste.
  • **tool_input déplie le dictionnaire d’arguments ; un dictionnaire de fonctions aiguille les appels.
  • Chaque résultat est un bloc toolResult : toolUseId, content, status.
  • Une erreur renvoyée avec status à error et un message clair permet à Claude de se corriger.