Das Tool-Search-Tool ermöglicht es Claude, mit Hunderten oder Tausenden von Tools zu arbeiten, indem es diese bei Bedarf entdeckt und lädt. Anstatt alle Tool-Definitionen von vornherein in das Kontextfenster zu laden, durchsucht Claude deinen Tool-Katalog (einschließlich Tool-Namen, Beschreibungen, Argumentnamen und Argumentbeschreibungen) und lädt nur die Tools, die es benötigt.
Das Laden jeder Tool-Definition im Voraus verursacht zwei Probleme, wenn eine Tool-Bibliothek wächst:
Die Tool-Suche ist allgemein über die Claude API verfügbar. Unterstützte Modelle findest du unter Modellkompatibilität.
Hintergrundinformationen zu den Skalierungsherausforderungen, die die Tool-Suche löst, findest du unter Advanced tool use. Das bedarfsgesteuerte Laden der Tool-Suche ist auch ein Beispiel für das umfassendere Just-in-Time-Retrieval-Prinzip, das in Effective context engineering beschrieben wird.
Die Tool-Suche läuft als serverseitiges Tool, aber du kannst auch deine eigene clientseitige Tool-Suche implementieren. Details findest du unter Benutzerdefinierte Tool-Suche-Implementierung.
Teile dein Feedback zu diesem Feature über das Feedback-Formular.
Diese Funktion ist für Zero Data Retention (ZDR) qualifiziert. Wenn deine Organisation eine ZDR-Vereinbarung hat, werden Daten, die über diese Funktion gesendet werden, nicht gespeichert, nachdem die API-Antwort zurückgegeben wurde.
Auf Amazon Bedrock ist die serverseitige Tool-Suche nur über die InvokeModel API verfügbar, nicht über die Converse API.
Auf Claude Platform on AWS funktioniert die serverseitige Tool-Suche identisch zur Claude API. Claude Platform on AWS verwendet die Anthropic Messages API direkt, daher gibt es keine Unterscheidung zwischen InvokeModel und Converse.
Beide Tool-Suche-Varianten sind auf den folgenden Modellen verfügbar:
| Modell | Tool-Versionen |
|---|---|
| Claude Fable 5 (claude-fable-5) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Mythos 5 (claude-mythos-5) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 4.8 (claude-opus-4-8) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 4.7 (claude-opus-4-7) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 4.6 (claude-opus-4-6) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Sonnet 4.6 (claude-sonnet-4-6) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 4.5 (claude-opus-4-5-20251101) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Sonnet 4.5 (claude-sonnet-4-5-20250929) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Haiku 4.5 (claude-haiku-4-5-20251001) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
Claude Opus 4.1 und frühere Modelle unterstützen das Tool-Search-Tool nicht.
Es gibt zwei Tool-Suche-Varianten:
tool_search_tool_regex_20251119): Claude erstellt Regex-Muster, um nach Tools zu suchen.tool_search_tool_bm25_20251119): Claude verwendet natürlichsprachliche Abfragen, um nach Tools zu suchen.Wenn du das Tool-Search-Tool aktivierst:
tool_search_tool_regex_20251119 oder tool_search_tool_bm25_20251119) in deine tools-Liste ein.tools-Array bereit und setzt defer_loading: true bei den Tools, die nicht von vornherein geladen werden sollen. Mindestens ein Tool, normalerweise das Tool-Search-Tool selbst, muss nicht-verzögert bleiben.tool_reference-Blöcke zurück (standardmäßig bis zu 5).Das folgende Beispiel enthält das Tool-Search-Tool und zwei verzögerte Tools:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=2048,
messages=[{"role": "user", "content": "What is the weather in San Francisco?"}],
tools=[
{"type": "tool_search_tool_regex_20251119", "name": "tool_search_tool_regex"},
{
"name": "get_weather",
"description": "Get the weather at a specific location",
"input_schema": {
"type": "object",
"properties": {
"location": {"type": "string"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
},
"required": ["location"],
},
"defer_loading": True,
},
{
"name": "search_files",
"description": "Search through files in the workspace",
"input_schema": {
"type": "object",
"properties": {
"query": {"type": "string"},
"file_types": {"type": "array", "items": {"type": "string"}},
},
"required": ["query"],
},
"defer_loading": True,
},
],
)
print(response)Claude durchsucht den Katalog, entdeckt get_weather und ruft es auf. Die Antwort endet mit stop_reason: "tool_use". Führe das entdeckte Tool aus und gib ein tool_result zurück, wie in Tool-Aufrufe verarbeiten beschrieben. Antwortformat zeigt die Blöcke, die du zurückbekommst, und was du als Nächstes senden musst.
Das Tool-Search-Tool hat zwei Varianten:
{
"type": "tool_search_tool_regex_20251119",
"name": "tool_search_tool_regex"
}{
"type": "tool_search_tool_bm25_20251119",
"name": "tool_search_tool_bm25"
}Abfrageformat der Regex-Variante: Python-Regex, keine natürliche Sprache
Mit tool_search_tool_regex_20251119 schreibt Claude Python-re.search()-Muster, keine natürlichsprachlichen Abfragen. Der Abgleich erfolgt ohne Berücksichtigung der Groß-/Kleinschreibung. Gängige Muster sind unter anderem:
"weather": passt auf Tool-Namen und -Beschreibungen, die „weather" enthalten"get_.*_data": passt auf Tools wie get_user_data und get_weather_data"database.*query|query.*database": passt auf beide WortreihenfolgenMaximale Musterlänge: 200 Zeichen
Abfrageformat der BM25-Variante: natürliche Sprache
Mit tool_search_tool_bm25_20251119 sucht Claude mit natürlichsprachlichen Abfragen. Maximale Abfragelänge: 500 Zeichen.
Markiere Tools für das bedarfsgesteuerte Laden, indem du defer_loading: true hinzufügst:
{
"name": "get_weather",
"description": "Get current weather for a location",
"input_schema": {
"type": "object",
"properties": {
"location": { "type": "string" },
"unit": { "type": "string", "enum": ["celsius", "fahrenheit"] }
},
"required": ["location"]
},
"defer_loading": true
}defer_loading steuert, was in das Kontextfenster gelangt, nicht was du in der Anfrage sendest:
tools-Array, einschließlich der verzögerten. Die API benötigt sie serverseitig, um die Suche auszuführen und tool_reference-Blöcke zu erweitern.defer_loading werden sofort in den Kontext geladen.defer_loading: true werden nur geladen, wenn Claude sie durch die Suche entdeckt.defer_loading: true auf das Tool-Search-Tool selbst.Beide Tool-Suche-Varianten (regex und bm25) durchsuchen Tool-Namen, Beschreibungen, Argumentnamen und Argumentbeschreibungen.
Intern schließt die API verzögerte Tools aus dem System-Prompt-Präfix aus. Wenn Claude ein verzögertes Tool durch die Tool-Suche entdeckt, hängt die API einen tool_reference-Block inline in der Konversation an und erweitert ihn dann zur vollständigen Tool-Definition, bevor er an Claude übergeben wird. Das Präfix bleibt unberührt, sodass das Prompt-Caching erhalten bleibt. Die Grammatik für den Strict-Modus (die Regeln, die die Tool-Aufruf-Ausgabe auf deine Schemas beschränken) wird aus dem vollständigen Toolset erstellt, sodass defer_loading und Strict-Modus ohne Neukompilierung der Grammatik zusammenarbeiten.
Wenn Claude das Tool-Search-Tool verwendet, enthält die Antwort die folgenden Blocktypen:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "I'll search for tools to help with the weather information."
},
{
"type": "server_tool_use",
"id": "srvtoolu_01ABC123",
"name": "tool_search_tool_regex",
"input": {
"pattern": "weather"
}
},
{
"type": "tool_search_tool_result",
"tool_use_id": "srvtoolu_01ABC123",
"content": {
"type": "tool_search_tool_search_result",
"tool_references": [{ "type": "tool_reference", "tool_name": "get_weather" }]
}
},
{
"type": "text",
"text": "I found a weather tool. Let me get the weather for San Francisco."
},
{
"type": "tool_use",
"id": "toolu_01XYZ789",
"name": "get_weather",
"input": { "location": "San Francisco", "unit": "fahrenheit" }
}
],
"stop_reason": "tool_use"
}server_tool_use: Claudes Aufruf des Tool-Search-Tools. Die Suche läuft auf den Servern von Anthropic. Gib niemals ein tool_result für dessen srvtoolu_...-ID zurück.tool_search_tool_result: die Suchergebnisse, in einem verschachtelten tool_search_tool_search_result-Objekt. Behalte es unverändert im Nachrichtenverlauf.tool_references: ein Array von tool_reference-Objekten, die auf entdeckte Tools verweisen. Die API erweitert diese für Claude. Du erweiterst sie niemals selbst.tool_use: Claudes Aufruf eines entdeckten Tools. Führe es aus und gib ein tool_result zurück, genau wie bei der standardmäßigen Tool-Nutzung.Die API erweitert tool_reference-Blöcke automatisch zu vollständigen Tool-Definitionen, bevor sie Claude angezeigt werden. Du musst diese Erweiterung nicht selbst handhaben, solange du alle passenden Tool-Definitionen im tools-Parameter bereitstellst.
Bei der nächsten Anfrage übergibst du den Inhalt des Assistenten unverändert zurück, einschließlich der server_tool_use- und tool_search_tool_result-Blöcke. Füge dein tool_result für das entdeckte Tool in einer User-Nachricht hinzu und sende dasselbe tools-Array: das Such-Tool plus jede verzögerte Definition. Gib kein tool_result für die srvtoolu_...-ID zurück: die API lehnt die Anfrage ab. Die API erweitert tool_reference-Blöcke im gesamten Konversationsverlauf, sodass Claude entdeckte Tools in späteren Turns wiederverwenden kann, ohne erneut zu suchen. Eine Suche, die nichts findet, gibt ein tool_search_tool_search_result mit einem leeren tool_references-Array zurück, keinen Fehler.
Wenn deine Tools von MCP-Servern über den MCP-Connector stammen, setzt du defer_loading nicht auf einzelne Tool-Definitionen. Stattdessen setzt du es einmal in der default_config des mcp_toolset-Eintrags für den gesamten Server oder pro Tool in dessen configs. Siehe MCP-Toolset-Konfiguration.
Du kannst deine eigene Tool-Suchlogik implementieren (zum Beispiel mit Embeddings oder semantischer Suche), indem du tool_reference-Blöcke aus einem benutzerdefinierten Tool zurückgibst. Wenn Claude dein benutzerdefiniertes Such-Tool aufruft, gib ein standardmäßiges tool_result mit tool_reference-Blöcken im Content-Array zurück:
{
"type": "tool_result",
"tool_use_id": "toolu_your_tool_id",
"content": [{ "type": "tool_reference", "tool_name": "discovered_tool_name" }]
}Jedes referenzierte Tool muss eine entsprechende Tool-Definition im tools-Parameter auf oberster Ebene haben, normalerweise mit defer_loading: true. Dadurch kannst du Suchmethoden verwenden, die die eingebauten Varianten nicht bieten, wie etwa Embedding-basiertes Retrieval, und die API erweitert die zurückgegebenen tool_reference-Blöcke auf die gleiche Weise.
Das tool_search_tool_result-Format, das im Abschnitt Antwortformat gezeigt wird, ist das serverseitige Format, das intern von Anthropics eingebauter Tool-Suche verwendet wird. Für benutzerdefinierte clientseitige Implementierungen verwende immer das standardmäßige tool_result-Format mit tool_reference-Content-Blöcken, wie im vorherigen Beispiel gezeigt.
Ein vollständiges Beispiel mit Embeddings findest du im Rezept Tool-Suche mit Embeddings.
Tool-Nutzungsbeispiele
funktionieren mit der Tool-Suche: Wenn Claude ein verzögertes Tool entdeckt, erweitert die API
dessen input_examples zusammen mit seiner Definition.
Diese Fehler verhindern, dass die API die Anfrage verarbeitet:
Alle Tools verzögert:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "At least one tool must have defer_loading=false. All tools cannot be deferred."
}
}Fehlende Tool-Definition:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "Tool reference 'unknown_tool' not found in available tools"
}
}Wenn eine Tool-Suchoperation während der Ausführung fehlschlägt, gibt die API eine 200-Antwort mit dem Fehler im Body zurück:
{
"type": "tool_search_tool_result",
"tool_use_id": "srvtoolu_01ABC123",
"content": {
"type": "tool_search_tool_result_error",
"error_code": "invalid_tool_input",
"error_message": "Invalid regular expression pattern: missing ) at position 1"
}
}Das Feld error_code hat vier mögliche Werte:
invalid_tool_input: die Sucheingabe war ungültig, zum Beispiel ein fehlerhaftes Regex-Muster oder ein Muster über dem 200-Zeichen-Limitunavailable: die Suche konnte nicht ausgeführt werden, zum Beispiel weil sie ein Timeout hatte oder der Dienst nicht verfügbar wartoo_many_requests: Ratenlimit für Tool-Suchoperationen überschrittenexecution_time_exceeded: die Suche hat ihr Ausführungszeitlimit überschrittenWie defer_loading das Prompt-Caching bewahrt, erfährst du unter Tool-Nutzung mit Prompt-Caching.
Ein Tool mit defer_loading: true kann nicht gleichzeitig cache_control tragen: die API gibt einen 400-Fehler zurück. Setze den Cache-Breakpoint auf ein nicht-verzögertes Tool.
Wenn Streaming aktiviert ist, erhältst du Tool-Suche-Events als Teil des Streams:
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "tool_search_tool_regex"}}
// Search pattern streamed
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"pattern\":\"weather\"}"}}
// Pause while search executes
// Search results streamed
event: content_block_start
data: {"type": "content_block_start", "index": 2, "content_block": {"type": "tool_search_tool_result", "tool_use_id": "srvtoolu_xyz789", "content": {"type": "tool_search_tool_search_result", "tool_references": [{"type": "tool_reference", "tool_name": "get_weather"}]}}}
// Claude continues with discovered toolsDu kannst das Tool-Search-Tool in die Messages Batches API einbinden.
defer_loading: true pro AnfrageVerwende die Tool-Suche, wenn einer der folgenden Punkte zutrifft:
Standardmäßige Tool-Aufrufe ohne Tool-Suche sind besser geeignet, wenn du weniger als 10 Tools hast, jedes Tool in jeder Anfrage verwendet wird oder deine Tool-Definitionen klein sind (insgesamt weniger als 100 Token).
github_, slack_), damit eine Suche die gesamte Gruppe erfasst.Die Tool-Suche wird nicht als separates Server-Tool abgerechnet. Das usage.server_tool_use-Objekt der Antwort hat kein Tool-Suche-Feld, und die Tool-Definitionen, die die Suche in den Kontext lädt, zählen wie jede andere Tool-Definition als Input-Token.
Lass Claude Informationen über Konversationen hinweg speichern und abrufen, indem du die Dateioperationen des Memory-Tools in deiner Anwendung implementierst.
Verzeichnis der von Anthropic bereitgestellten Tools und Referenz für optionale Tool-Definitionseigenschaften.
Konfiguriere MCP-Toolsets mit verzögertem Laden.
Cache Tool-Definitionen über Turns hinweg und verstehe, was deinen Cache invalidiert.
Spezifiziere Tool-Schemas, schreibe effektive Beschreibungen und steuere, wann Claude deine Tools aufruft.
Was this page helpful?