Diese Seite behandelt den Lebenszyklus eines Tool-Aufrufs: das Auslesen von tool_use-Blöcken aus Claudes Antwort, das Formatieren von tool_result-Blöcken in deiner Antwort und das Signalisieren von Fehlern. Für die SDK-Abstraktion, die dies automatisch übernimmt, siehe Tool Runner.
Einfacher mit Tool Runner: Die auf dieser Seite beschriebene manuelle Tool-Verarbeitung wird automatisch von Tool Runner verwaltet. Verwende diese Seite, wenn du individuelle Kontrolle über die Tool-Ausführung benötigst.
Claudes Antwort unterscheidet sich je nachdem, ob ein Client- oder Server-Tool verwendet wird.
Die Antwort hat einen stop_reason von tool_use und einen oder mehrere tool_use-Content-Blöcke, die Folgendes enthalten:
id: Ein eindeutiger Bezeichner für diesen speziellen Tool-Use-Block. Dieser wird später verwendet, um die Tool-Ergebnisse zuzuordnen.name: Der Name des verwendeten Tools.input: Ein Objekt, das die an das Tool übergebene Eingabe enthält und dem input_schema des Tools entspricht.Wenn du eine Tool-Use-Antwort für ein Client-Tool erhältst, solltest du:
name, id und input aus dem tool_use-Block extrahieren.input übergeben.role user sendest, die einen content-Block mit dem Typ tool_result und den folgenden Informationen enthält:
tool_use_id: Die id der Tool-Use-Anfrage, für die dies ein Ergebnis ist.content (optional): Das Ergebnis des Tools, als String (zum Beispiel "content": "15 degrees"), als Liste verschachtelter Content-Blöcke (zum Beispiel "content": [{"type": "text", "text": "15 degrees"}]) oder als Liste von Document-Blöcken (zum Beispiel "content": [{"type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15 degrees"}}]). Diese Content-Blöcke können die Typen text, image, document oder search_result verwenden.is_error (optional): Auf true setzen, wenn die Tool-Ausführung zu einem Fehler geführt hat.Wichtige Formatierungsanforderungen:
tool_result-Blöcke enthalten. Text nach den Ergebnissen beendet den Turn vorzeitig; bei einem Server-Tool, das Claude direkt aufgerufen hat, schlägt die Anfrage dann mit einem 400-Fehler fehl, der das nicht aufgelöste Server-Tool benennt. Siehe Stop-Reasons und Fallback.Dies führt beispielsweise zu einem 400-Fehler:
{
"role": "user",
"content": [
{ "type": "text", "text": "Here are the results:" }, // ❌ Text before tool_result
{ "type": "tool_result", "tool_use_id": "toolu_01" /* ... */ }
]
}Dies ist korrekt, wenn der Assistant-Turn nur Client-Tools aufruft:
{
"role": "user",
"content": [
{ "type": "tool_result", "tool_use_id": "toolu_01" /* ... */ },
{ "type": "text", "text": "What should I do next?" } // ✅ Text after tool_result
]
}Wenn du einen Fehler wie „tool_use ids were found without tool_result blocks immediately after" erhältst, überprüfe, ob deine Tool-Ergebnisse korrekt formatiert sind.
Tool-Ergebnisse enthalten oft Inhalte aus Quellen außerhalb deiner Kontrolle: Webseiten, eingehende E-Mails, Benutzer-Uploads, Drittanbieter-APIs. Behandle diese Inhalte als nicht vertrauenswürdig: Ein Angreifer, der sie beeinflussen kann, könnte Anweisungen einbetten, die versuchen, Claude umzulenken („indirect prompt injection", indirekte Prompt-Injection). Halte nicht vertrauenswürdige Inhalte innerhalb von tool_result-Blöcken statt in system-Prompts oder einfachen User-text-Blöcken, und siehe Jailbreaks und Prompt-Injections abschwächen für weitere Absicherungsmaßnahmen.
Nach Erhalt des Tool-Ergebnisses verwendet Claude diese Informationen, um weiterhin eine Antwort auf den ursprünglichen User-Prompt zu generieren.
Claude führt das Tool intern aus und integriert die Ergebnisse direkt in seine Antwort, ohne dass zusätzliche Benutzerinteraktion erforderlich ist.
Eine Antwort kann sowohl einen Client-tool_use-Block als auch einen server_tool_use-Block enthalten, der noch keinen Result-Block hat. Dieser Server-Tool-Aufruf ist noch nicht abgeschlossen, und sein Result-Block kommt in einer späteren Antwort. Antworte mit einer User-Nachricht, die nur die tool_result-Blöcke für die Client-Tools enthält, und behalte dasselbe tools-Array bei; bei einem Server-Tool, das Claude direkt aufgerufen hat, führt die API es bei dieser Anfrage aus, und die nächste Antwort beginnt mit dessen Result-Block. Siehe Stop-Reasons und Fallback.
Unterschiede zu anderen APIs
Im Gegensatz zu APIs, die Tool-Nutzung separieren oder spezielle Rollen wie tool oder function verwenden, integriert die Claude API Tools direkt in die user- und assistant-Nachrichtenstruktur.
Nachrichten enthalten Arrays von text-, image-, tool_use- und tool_result-Blöcken. user-Nachrichten enthalten Client-Inhalte und tool_result, während assistant-Nachrichten KI-generierte Inhalte und tool_use enthalten.
Es gibt verschiedene Arten von Fehlern, die bei der Verwendung von Tools mit Claude auftreten können:
Verarbeite Antworten, in denen Claude mehrere Tools in einem einzigen Turn aufruft.
Lass das SDK die tool_use-Schleife, die Ergebnisformatierung und Wiederholungsversuche für dich verwalten.
Schreibe Schemas und Beschreibungen, die Claude zum richtigen Tool lenken.
Was this page helpful?