Aller au contenu principal

Executer les fonctions outils

Quand Claude repond avec une demande d’outil, votre serveur doit executer l’outil demande et renvoyer les resultats. Cette etape implique l’extraction des parties ToolUse de la reponse, l’execution des fonctions appropriees, et le formatage correct des resultats.

Gerer les demandes multiples

Claude peut envoyer plusieurs parties ToolUse dans une seule reponse. Votre code doit gerer cette possibilite.

Extraire les parties ToolUse

Creez une fonction pour traiter toutes les parties renvoyees :

def run_tools(parts):
    tool_requests = [part for part in parts if "toolUse" in part]
    tool_result_parts = []

    for tool_request in tool_requests:
        tool_use_id = tool_request["toolUse"]["toolUseId"]
        tool_name = tool_request["toolUse"]["name"]
        tool_input = tool_request["toolUse"]["input"]

Cette comprehension de liste filtre les parties pour ne garder que les dictionnaires contenant une cle "toolUse".

Executer les outils

Creez une fonction d’acheminement pour executer l’outil demande :

def run_tool(tool_name, tool_input):
    if tool_name == "get_current_datetime":
        return get_current_datetime(**tool_input)
    else:
        raise Exception(f"Nom d'outil inconnu : {tool_name}")

Le detail cle : utilisez **tool_input pour deployer le dictionnaire d’arguments dans votre fonction. Claude renvoie toujours les arguments sous forme de dictionnaire.

Creer les parties ToolResult

Apres l’execution, formatez la reponse comme une partie ToolResult avec trois proprietes requises :

  • toolUseId : doit correspondre a l’ID de la demande originale
  • content : la sortie de votre outil, serialisee en chaine
  • status : "success" ou "error"

Gestion des erreurs

Encadrez l’execution dans un try-except. Claude est intelligent face aux erreurs et peut ajuster son approche :

try:
    tool_output = run_tool(tool_name, tool_input)
    tool_result_part = {
        "toolResult": {
            "toolUseId": tool_use_id,
            "content": [{"text": json.dumps(tool_output)}],
            "status": "success"
        }
    }
except Exception as e:
    tool_result_part = {
        "toolResult": {
            "toolUseId": tool_use_id,
            "content": [{"text": f"Erreur : {e}"}],
            "status": "error"
        }
    }

Comprendre les IDs d’outils

Le systeme d’ID devient important quand Claude demande plusieurs outils en parallele. Chaque demande d’outil recoit un ID unique, et vos resultats doivent inclure les IDs correspondants pour que Claude sache quel resultat correspond a quelle demande.