Wir empfehlen die Verwendung des neuesten Claude Sonnet (4.5) oder Claude Opus (4.1) Modells für komplexe Tools und mehrdeutige Anfragen; sie handhaben mehrere Tools besser und suchen bei Bedarf nach Klarstellung.
Verwenden Sie Claude Haiku Modelle für unkomplizierte Tools, aber beachten Sie, dass sie möglicherweise fehlende Parameter ableiten.
Wenn Sie Claude mit Tool-Nutzung und erweitertem Denken verwenden, lesen Sie unseren Leitfaden hier für weitere Informationen.
Client-Tools (sowohl von Anthropic definiert als auch benutzerdefiniert) werden im tools Top-Level-Parameter der API-Anfrage angegeben. Jede Tool-Definition enthält:
| Parameter | Beschreibung |
|---|---|
name | Der Name des Tools. Muss dem Regex ^[a-zA-Z0-9_-]{1,64}$ entsprechen. |
description | Eine detaillierte Klartextbeschreibung, was das Tool tut, wann es verwendet werden sollte und wie es sich verhält. |
input_schema | Ein JSON Schema Objekt, das die erwarteten Parameter für das Tool definiert. |
input_examples | (Optional, Beta) Ein Array von Beispiel-Eingabeobjekten, um Claude zu helfen, das Tool zu verstehen. Siehe Bereitstellung von Tool-Nutzungsbeispielen. |
Wenn Sie die Claude API mit dem tools Parameter aufrufen, erstellen wir einen speziellen Systemprompt aus den Tool-Definitionen, der Tool-Konfiguration und jedem benutzerdefinierten Systemprompt. Der konstruierte Prompt ist darauf ausgelegt, das Modell anzuweisen, die angegebenen Tools zu verwenden und den notwendigen Kontext für den ordnungsgemäßen Betrieb des Tools bereitzustellen:
In this environment you have access to a set of tools you can use to answer the user's question.
{{ FORMATTING INSTRUCTIONS }}
String and scalar parameters should be specified as is, while lists and objects should use JSON format. Note that spaces for string values are not stripped. The output is not expected to be valid XML and is parsed with regular expressions.
Here are the functions available in JSONSchema format:
{{ TOOL DEFINITIONS IN JSON SCHEMA }}
{{ USER SYSTEM PROMPT }}
{{ TOOL CONFIGURATION }}Um die beste Leistung von Claude bei der Verwendung von Tools zu erhalten, befolgen Sie diese Richtlinien:
input_examples für komplexe Tools. Klare Beschreibungen sind am wichtigsten, aber für Tools mit komplexen Eingaben, verschachtelten Objekten oder formatempfindlichen Parametern können Sie das Feld input_examples (Beta) verwenden, um schemavalidierte Beispiele bereitzustellen. Siehe Bereitstellung von Tool-Nutzungsbeispielen für Details.Die gute Beschreibung erklärt klar, was das Tool tut, wann es verwendet werden sollte, welche Daten es zurückgibt und was der ticker Parameter bedeutet. Die schlechte Beschreibung ist zu kurz und lässt Claude mit vielen offenen Fragen über das Verhalten und die Verwendung des Tools.
Sie können konkrete Beispiele gültiger Tool-Eingaben bereitstellen, um Claude zu helfen, Ihre Tools effektiver zu verstehen. Dies ist besonders nützlich für komplexe Tools mit verschachtelten Objekten, optionalen Parametern oder formatempfindlichen Eingaben.
Tool-Nutzungsbeispiele ist eine Beta-Funktion. Fügen Sie den entsprechenden Beta-Header für Ihren Anbieter ein:
| Anbieter | Beta-Header | Unterstützte Modelle |
|---|---|---|
| Claude API, Microsoft Foundry | advanced-tool-use-2025-11-20 | Alle Modelle |
| Vertex AI, Amazon Bedrock | tool-examples-2025-10-29 | Nur Claude Opus 4.5 |
Fügen Sie ein optionales input_examples Feld zu Ihrer Tool-Definition mit einem Array von Beispiel-Eingabeobjekten hinzu. Jedes Beispiel muss gemäß dem input_schema des Tools gültig sein:
Beispiele sind im Prompt neben Ihrem Tool-Schema enthalten und zeigen Claude konkrete Muster für gut geformte Tool-Aufrufe. Dies hilft Claude zu verstehen, wann optionale Parameter einzubeziehen sind, welche Formate zu verwenden sind und wie komplexe Eingaben strukturiert werden.
input_schema des Tools gültig sein. Ungültige Beispiele geben einen 400-Fehler zurückDer Tool Runner bietet eine sofort einsatzbereite Lösung für die Ausführung von Tools mit Claude. Anstatt Tool-Aufrufe, Tool-Ergebnisse und Gesprächsverwaltung manuell zu handhaben, führt der Tool Runner automatisch aus:
Wir empfehlen, dass Sie den Tool Runner für die meisten Tool-Nutzungsimplementierungen verwenden.
Der Tool Runner ist derzeit in Beta und verfügbar in den Python, TypeScript und Ruby SDKs.
Automatische Kontextverwaltung mit Komprimierung
Der Tool Runner unterstützt automatische Komprimierung, die Zusammenfassungen generiert, wenn die Token-Nutzung einen Schwellenwert überschreitet. Dies ermöglicht es langfristigen agentengesteuerten Aufgaben, über Kontextfenster-Grenzen hinaus fortzufahren.
Der SDK Tool Runner ist in Beta. Der Rest dieses Dokuments behandelt die manuelle Tool-Implementierung.
In einigen Fällen möchten Sie möglicherweise, dass Claude ein bestimmtes Tool verwendet, um die Frage des Benutzers zu beantworten, auch wenn Claude denkt, dass es eine Antwort ohne die Verwendung eines Tools geben kann. Sie können dies tun, indem Sie das Tool im tool_choice Feld wie folgt angeben:
tool_choice = {"type": "tool", "name": "get_weather"}Bei der Arbeit mit dem tool_choice Parameter haben wir vier mögliche Optionen:
auto ermöglicht Claude zu entscheiden, ob eines der bereitgestellten Tools aufgerufen werden soll oder nicht. Dies ist der Standardwert, wenn tools bereitgestellt werden.any teilt Claude mit, dass es eines der bereitgestellten Tools verwenden muss, erzwingt aber kein bestimmtes Tool.tool ermöglicht es uns, Claude zu zwingen, immer ein bestimmtes Tool zu verwenden.none verhindert, dass Claude Tools verwendet. Dies ist der Standardwert, wenn keine tools bereitgestellt werden.Wenn Sie Prompt-Caching verwenden, werden Änderungen am tool_choice Parameter zwischengespeicherte Message-Blöcke ungültig machen. Tool-Definitionen und Systemprompts bleiben zwischengespeichert, aber Message-Inhalte müssen erneut verarbeitet werden.
Dieses Diagramm zeigt, wie jede Option funktioniert:

Beachten Sie, dass wenn Sie tool_choice als any oder tool haben, wir die Assistenten-Nachricht vorab ausfüllen, um zu erzwingen, dass ein Tool verwendet wird. Dies bedeutet, dass die Modelle keine natürliche Sprachantwort oder Erklärung vor tool_use Content Blöcken ausgeben, auch wenn explizit danach gefragt wird.
Wenn Sie erweitertes Denken mit Tool-Nutzung verwenden, werden tool_choice: {"type": "any"} und tool_choice: {"type": "tool", "name": "..."} nicht unterstützt und führen zu einem Fehler. Nur tool_choice: {"type": "auto"} (der Standard) und tool_choice: {"type": "none"} sind mit erweitertem Denken kompatibel.
Unsere Tests haben gezeigt, dass dies die Leistung nicht verringern sollte. Wenn Sie möchten, dass das Modell natürlichsprachlichen Kontext oder Erklärungen bietet, während Sie dennoch anfordern, dass das Modell ein bestimmtes Tool verwendet, können Sie {"type": "auto"} für tool_choice (der Standard) verwenden und explizite Anweisungen in einer user Nachricht hinzufügen. Zum Beispiel: What's the weather like in London? Use the get_weather tool in your response.
Garantierte Tool-Aufrufe mit strikten Tools
Kombinieren Sie tool_choice: {"type": "any"} mit strikter Tool-Nutzung um zu garantieren, dass eines Ihrer Tools aufgerufen wird UND dass die Tool-Eingaben streng Ihrem Schema folgen. Setzen Sie strict: true auf Ihren Tool-Definitionen um die Schema-Validierung zu aktivieren.
Tools müssen nicht unbedingt Client-Funktionen sein — Sie können Tools jederzeit verwenden, wenn Sie möchten, dass das Modell JSON-Ausgabe zurückgibt, die einem bereitgestellten Schema folgt. Zum Beispiel könnten Sie ein record_summary Tool mit einem bestimmten Schema verwenden. Siehe Tool-Nutzung mit Claude für ein vollständiges funktionierendes Beispiel.
Bei der Verwendung von Tools wird Claude häufig kommentieren, was es tut, oder natürlich auf den Benutzer reagieren, bevor es Tools aufruft.
Beispielsweise könnte Claude bei der Eingabeaufforderung „Wie ist das Wetter in San Francisco gerade, und wie spät ist es dort?" mit folgendem antworten:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Ich helfe dir, das aktuelle Wetter und die Zeit in San Francisco zu überprüfen."
},
{
"type": "tool_use",
"id": "toolu_01A09q90qw90lq917835lq9",
"name": "get_weather",
"input": {"location": "San Francisco, CA"}
}
]
}Dieser natürliche Antwortstil hilft Benutzern zu verstehen, was Claude tut, und schafft eine konversativere Interaktion. Du kannst den Stil und den Inhalt dieser Antworten durch deine Systemaufforderungen und durch die Bereitstellung von <examples> in deinen Aufforderungen steuern.
Es ist wichtig zu beachten, dass Claude verschiedene Formulierungen und Ansätze verwenden kann, wenn es seine Aktionen erklärt. Dein Code sollte diese Antworten wie jeden anderen vom Assistenten generierten Text behandeln und sich nicht auf spezifische Formatierungskonventionen verlassen.
Standardmäßig kann Claude mehrere Tools verwenden, um eine Benutzerabfrage zu beantworten. Du kannst dieses Verhalten deaktivieren durch:
disable_parallel_tool_use=true, wenn der tool_choice-Typ auto ist, was sicherstellt, dass Claude höchstens ein Tool verwendetdisable_parallel_tool_use=true, wenn der tool_choice-Typ any oder tool ist, was sicherstellt, dass Claude genau ein Tool verwendetWährend Claude 4-Modelle standardmäßig hervorragende Fähigkeiten zur parallelen Tool-Nutzung haben, kannst du die Wahrscheinlichkeit der parallelen Tool-Ausführung über alle Modelle hinweg mit gezieltem Prompting erhöhen:
Parallele Tool-Nutzung mit Claude Sonnet 3.7
Claude Sonnet 3.7 ist möglicherweise weniger wahrscheinlich, parallele Tool-Aufrufe in einer Antwort zu machen, auch wenn du disable_parallel_tool_use nicht gesetzt hast. Wir empfehlen ein Upgrade auf Claude 4-Modelle, die eingebaute token-effiziente Tool-Nutzung und verbesserte parallele Tool-Aufrufe haben.
Wenn du noch Claude Sonnet 3.7 verwendest, kannst du den token-efficient-tools-2025-02-19 Beta-Header aktivieren, der Claude hilft, parallele Tools zu verwenden. Du kannst auch ein „Batch-Tool" einführen, das als Meta-Tool fungiert, um Aufrufe zu anderen Tools gleichzeitig zu wrappen.
Siehe dieses Beispiel in unserem Cookbook, um zu erfahren, wie du diesen Workaround verwendest.
Einfacher mit Tool Runner: Die manuelle Tool-Behandlung, die in diesem Abschnitt beschrieben wird, wird automatisch von tool runner verwaltet. Verwende diesen Abschnitt, wenn du benutzerdefinierte Kontrolle über die Tool-Ausführung benötigst.
Claudes Antwort unterscheidet sich je nachdem, ob es ein Client-Tool oder Server-Tool verwendet.
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 bestimmten Tool-Use-Block. Dies wird später verwendet, um die Tool-Ergebnisse abzugleichen.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 von user sendest und einen content Block mit dem tool_result Typ und den folgenden Informationen enthältst:
tool_use_id: Die id der Tool-Use-Anfrage, für die dies ein Ergebnis ist.content: Das Ergebnis des Tools als String (z.B. ), eine Liste verschachtelter Content-Blöcke (z.B. ) oder eine Liste von Dokument-Blöcken (z.B. ). Diese Content-Blöcke können die Typen , oder verwenden.Wichtige Formatierungsanforderungen:
Beispielsweise wird dies einen 400-Fehler verursachen:
{"role": "user", "content": [
{"type": "text", "text": "Hier sind die Ergebnisse:"}, // ❌ Text vor tool_result
{"type": "tool_result", "tool_use_id": "toolu_01", ...}
]}Nach Erhalt des Tool-Ergebnisses wird Claude diese Informationen verwenden, um eine Antwort auf die ursprüngliche Benutzeraufforderung zu generieren.
Claude führt das Tool intern aus und integriert die Ergebnisse direkt in seine Antwort, ohne dass zusätzliche Benutzerinteraktion erforderlich ist.
Unterschiede zu anderen APIs
Im Gegensatz zu APIs, die Tool-Nutzung trennen 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-Content und tool_result, während assistant Nachrichten KI-generierte Inhalte und tool_use enthalten.
max_tokens Stop-GrundesWenn Claudes Antwort aufgrund des Erreichens des max_tokens Limits abgeschnitten wird und die abgeschnittene Antwort einen unvollständigen Tool-Use-Block enthält, musst du die Anfrage mit einem höheren max_tokens Wert erneut versuchen, um den vollständigen Tool-Use zu erhalten.
pause_turn Stop-GrundesBei der Verwendung von Server-Tools wie Web Search kann die API einen pause_turn Stop-Grund zurückgeben, was anzeigt, dass die API einen langen Zug pausiert hat.
Hier ist, wie man den pause_turn Stop-Grund behandelt:
Bei der Behandlung von pause_turn:
Eingebaute Fehlerbehandlung: Tool runner bietet automatische Fehlerbehandlung für die meisten häufigen Szenarien. Dieser Abschnitt behandelt manuelle Fehlerbehandlung für fortgeschrittene Anwendungsfälle.
Es gibt verschiedene Arten von Fehlern, die bei der Verwendung von Tools mit Claude auftreten können:
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-5-20250929",
max_tokens=1024,
betas=["advanced-tool-use-2025-11-20"],
tools=[
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "The unit of temperature"
}
},
"required": ["location"]
},
"input_examples": [
{
"location": "San Francisco, CA",
"unit": "fahrenheit"
},
{
"location": "Tokyo, Japan",
"unit": "celsius"
},
{
"location": "New York, NY" # 'unit' is optional
}
]
}
],
messages=[
{"role": "user", "content": "What's the weather like in San Francisco?"}
]
)"content": "15 Grad""content": [{"type": "text", "text": "15 Grad"}]"content": ["type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15 Grad"}]textimagedocumentis_error (optional): Setze auf true, wenn die Tool-Ausführung zu einem Fehler führte.Dies ist korrekt:
{"role": "user", "content": [
{"type": "tool_result", "tool_use_id": "toolu_01", ...},
{"type": "text", "text": "Was sollte ich als nächstes tun?"} // ✅ Text nach tool_result
]}Wenn du einen Fehler wie „tool_use ids were found without tool_result blocks immediately after" erhältst, überprüfe, dass deine Tool-Ergebnisse korrekt formatiert sind.
# Überprüfe, ob die Antwort während der Tool-Nutzung abgeschnitten wurde
if response.stop_reason == "max_tokens":
# Überprüfe, ob der letzte Content-Block ein unvollständiger tool_use ist
last_block = response.content[-1]
if last_block.type == "tool_use":
# Sende die Anfrage mit höherem max_tokens
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=4096, # Erhöhtes Limit
messages=messages,
tools=tools
)import anthropic
client = anthropic.Anthropic()
# Anfängliche Anfrage mit Web Search
response = client.messages.create(
model="claude-3-7-sonnet-latest",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Suche nach umfassenden Informationen über Durchbrüche in der Quantencomputer im Jahr 2025"
}
],
tools=[{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 10
}]
)
# Überprüfe, ob die Antwort einen pause_turn Stop-Grund hat
if response.stop_reason == "pause_turn":
# Setze die Konversation mit dem pausierten Inhalt fort
messages = [
{"role": "user", "content": "Suche nach umfassenden Informationen über Durchbrüche in der Quantencomputer im Jahr 2025"},
{"role": "assistant", "content": response.content}
]
# Sende die Fortsetzungsanfrage
continuation = client.messages.create(
model="claude-3-7-sonnet-latest",
max_tokens=1024,
messages=messages,
tools=[{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 10
}]
)
print(continuation)
else:
print(response)