Wenn Claude mit einer Tool-Nutzungsanfrage antwortet, muss dein Server das angeforderte Tool tatsächlich ausführen und die Ergebnisse zurücksenden. Dieser Schritt umfasst das Extrahieren der Tool-Nutzungsteile aus Claudes Antwort, das Ausführen der entsprechenden Funktionen und das korrekte Formatieren der Ergebnisse.
Umgang mit mehreren Tool-Anfragen
Claude kann mehrere Tool-Nutzungsteile in einer einzigen Antwort senden. Dein Code muss diese Möglichkeit defensiv behandeln. Eine Assistant-Nachricht könnte einen Textteil enthalten, gefolgt von einem, zwei oder sogar mehr Tool-Nutzungsteilen.

Der Ablauf funktioniert so: Claude sendet eine Anfrage mit JSON-Schema, erhält einen Tool-Nutzungsteil, dann führt dein Server das Tool aus und sendet einen Tool-Ergebnisteil zurück, damit Claude eine endgültige Antwort geben kann.

Extrahieren von Tool-Nutzungsteilen
Erstelle zunächst eine Funktion, um alle Teile zu verarbeiten, die von einer Chat-Anfrage zurückgegeben werden:
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"]Diese Comprehension filtert die Teileliste so, dass nur Dictionaries enthalten sind, die einen „toolUse"-Schlüssel enthalten, und ignoriert Textteile.
Ausführen der eigentlichen Tools
Erstelle eine Hilfsfunktion, um das angeforderte Tool auszuführen:
def run_tool(tool_name, tool_input):
if tool_name == "get_current_datetime":
return get_current_datetime(**tool_input)
else:
raise Exception(f"Unknown tool name: {tool_name}")Das entscheidende Detail hier ist die Verwendung von **tool_input, um das Dictionary der Argumente in deine Tool-Funktion zu entpacken. Claude gibt Argumente immer als Dictionary-Objekt zurück, daher musst du es ordnungsgemäß entpacken.
Erstellen von Tool-Ergebnisteilen
Nachdem du ein Tool ausgeführt hast, musst du die Antwort als Tool-Ergebnisteil formatieren:

Tool-Ergebnisteile erfordern drei wichtige Eigenschaften:
- toolUseId - Muss mit der ID des ursprünglichen Tool-Nutzungsteils übereinstimmen
- content - Die Ausgabe deines Tools, als String serialisiert
- status - Entweder „success" oder „error"
Verständnis der Tool-Nutzungs-IDs
Das Tool-Nutzungs-ID-System wird wichtig, wenn Claude mehrere Tools parallel anfordert. Wenn Claude beispielsweise ein Rechner-Tool zweimal ausführen möchte:

Jede Tool-Nutzung erhält eine eindeutige ID (wie „ab3" und „po9"), und deine Tool-Ergebnisse müssen die passenden IDs enthalten, damit Claude weiß, welches Ergebnis zu welcher Anfrage gehört.
Fehlerbehandlung
Umschließe deine Tool-Ausführung mit try-catch-Blöcken. Claude geht intelligent mit Tool-Fehlern um und kann seinen Ansatz anpassen, wenn du korrekte Fehlerinformationen zurückgibst:
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"Error: {e}"}],
"status": "error"
}
}Vollständige Implementierung
Hier ist die vollständige Funktion, die Tool-Anfragen verarbeitet und formatierte Ergebnisse zurückgibt:
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"]
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"Error: {e}"}],
"status": "error"
}
}
tool_result_parts.append(tool_result_part)
return tool_result_partsSobald du die Tool-Ergebnisteile hast, kannst du sie in deiner nächsten Chat-Anfrage an Claude zurücksenden und damit den Tool-Nutzungszyklus abschließen.