Claude ist in der Lage, mit Tools und Funktionen zu interagieren, wodurch Sie Claudes Fähigkeiten erweitern können, um eine größere Vielfalt von Aufgaben zu erfüllen.
Lernen Sie alles, was Sie brauchen, um die Tool-Nutzung mit Claude zu meistern, als Teil unserer neuen Kurse! Bitte teilen Sie weiterhin Ihre Ideen und Vorschläge über dieses Formular mit.
Hier ist ein Beispiel dafür, wie Sie Claude Tools über die Messages API zur Verfügung stellen:
curl https://api.anthropic.com/v1/messages \
  -H "content-type: application/json" \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "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"
            }
          },
          "required": ["location"]
        }
      }
    ],
    "messages": [
      {
        "role": "user",
        "content": "What is the weather like in San Francisco?"
      }
    ]
  }'

Wie Tool-Nutzung funktioniert

Claude unterstützt zwei Arten von Tools:
  1. Client-Tools: Tools, die auf Ihren Systemen ausgeführt werden, dazu gehören:
    • Benutzerdefinierte Tools, die Sie erstellen und implementieren
    • Von Anthropic definierte Tools wie Computer-Nutzung und Text-Editor, die eine Client-Implementierung erfordern
  2. Server-Tools: Tools, die auf Anthropics Servern ausgeführt werden, wie die Web-Suche und Web-Abruf Tools. Diese Tools müssen in der API-Anfrage spezifiziert werden, erfordern aber keine Implementierung Ihrerseits.
Von Anthropic definierte Tools verwenden versionierte Typen (z.B. web_search_20250305, text_editor_20250124), um die Kompatibilität zwischen Modellversionen zu gewährleisten.

Client-Tools

Integrieren Sie Client-Tools mit Claude in diesen Schritten:
1

Stellen Sie Claude Tools und eine Benutzeranfrage zur Verfügung

  • Definieren Sie Client-Tools mit Namen, Beschreibungen und Eingabeschemata in Ihrer API-Anfrage.
  • Fügen Sie eine Benutzeranfrage hinzu, die diese Tools benötigen könnte, z.B. “Wie ist das Wetter in San Francisco?”
2

Claude entscheidet, ein Tool zu verwenden

  • Claude bewertet, ob Tools bei der Benutzeranfrage helfen können.
  • Falls ja, erstellt Claude eine ordnungsgemäß formatierte Tool-Nutzungsanfrage.
  • Für Client-Tools hat die API-Antwort einen stop_reason von tool_use, der Claudes Absicht signalisiert.
3

Führen Sie das Tool aus und geben Sie Ergebnisse zurück

  • Extrahieren Sie den Tool-Namen und die Eingabe aus Claudes Anfrage
  • Führen Sie den Tool-Code auf Ihrem System aus
  • Geben Sie die Ergebnisse in einer neuen user-Nachricht zurück, die einen tool_result-Inhaltsblock enthält
4

Claude verwendet das Tool-Ergebnis, um eine Antwort zu formulieren

  • Claude analysiert die Tool-Ergebnisse, um seine endgültige Antwort auf die ursprüngliche Benutzeranfrage zu erstellen.
Hinweis: Die Schritte 3 und 4 sind optional. Für einige Workflows könnte Claudes Tool-Nutzungsanfrage (Schritt 2) alles sein, was Sie brauchen, ohne Ergebnisse an Claude zurückzusenden.

Server-Tools

Server-Tools folgen einem anderen Workflow:
1

Stellen Sie Claude Tools und eine Benutzeranfrage zur Verfügung

  • Server-Tools, wie Web-Suche und Web-Abruf, haben ihre eigenen Parameter.
  • Fügen Sie eine Benutzeranfrage hinzu, die diese Tools benötigen könnte, z.B. “Suche nach den neuesten Nachrichten über KI” oder “Analysiere den Inhalt dieser URL.”
2

Claude führt das Server-Tool aus

  • Claude bewertet, ob ein Server-Tool bei der Benutzeranfrage helfen kann.
  • Falls ja, führt Claude das Tool aus, und die Ergebnisse werden automatisch in Claudes Antwort eingebunden.
3

Claude verwendet das Server-Tool-Ergebnis, um eine Antwort zu formulieren

  • Claude analysiert die Server-Tool-Ergebnisse, um seine endgültige Antwort auf die ursprüngliche Benutzeranfrage zu erstellen.
  • Keine zusätzliche Benutzerinteraktion ist für die Server-Tool-Ausführung erforderlich.

Tool-Nutzungsbeispiele

Hier sind einige Code-Beispiele, die verschiedene Tool-Nutzungsmuster und -techniken demonstrieren. Der Kürze halber sind die Tools einfache Tools, und die Tool-Beschreibungen sind kürzer als ideal wäre, um die beste Leistung zu gewährleisten.
curl https://api.anthropic.com/v1/messages \
     --header "x-api-key: $ANTHROPIC_API_KEY" \
     --header "anthropic-version: 2023-06-01" \
     --header "content-type: application/json" \
     --data \
'{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "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, either \"celsius\" or \"fahrenheit\""
                }
            },
            "required": ["location"]
        }
    }],
    "messages": [{"role": "user", "content": "What is the weather like in San Francisco?"}]
}'
Claude wird eine Antwort ähnlich dieser zurückgeben:
JSON
{
  "id": "msg_01Aq9w938a90dw8q",
  "model": "claude-sonnet-4-5",
  "stop_reason": "tool_use",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "I'll check the current weather in San Francisco for you."
    },
    {
      "type": "tool_use",
      "id": "toolu_01A09q90qw90lq917835lq9",
      "name": "get_weather",
      "input": {"location": "San Francisco, CA", "unit": "celsius"}
    }
  ]
}
Sie müssten dann die get_weather-Funktion mit der bereitgestellten Eingabe ausführen und das Ergebnis in einer neuen user-Nachricht zurückgeben:
curl https://api.anthropic.com/v1/messages \
     --header "x-api-key: $ANTHROPIC_API_KEY" \
     --header "anthropic-version: 2023-06-01" \
     --header "content-type: application/json" \
     --data \
'{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "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, either \"celsius\" or \"fahrenheit\""
                    }
                },
                "required": ["location"]
            }
        }
    ],
    "messages": [
        {
            "role": "user",
            "content": "What is the weather like in San Francisco?"
        },
        {
            "role": "assistant",
            "content": [
                {
                    "type": "text",
                    "text": "I'll check the current weather in San Francisco for you."
                },
                {
                    "type": "tool_use",
                    "id": "toolu_01A09q90qw90lq917835lq9",
                    "name": "get_weather",
                    "input": {
                        "location": "San Francisco, CA",
                        "unit": "celsius"
                    }
                }
            ]
        },
        {
            "role": "user",
            "content": [
                {
                    "type": "tool_result",
                    "tool_use_id": "toolu_01A09q90qw90lq917835lq9",
                    "content": "15 degrees"
                }
            ]
        }
    ]
}'
Dies wird Claudes endgültige Antwort ausgeben, die die Wetterdaten einbezieht:
JSON
{
  "id": "msg_01Aq9w938a90dw8q",
  "model": "claude-sonnet-4-5",
  "stop_reason": "stop_sequence",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "The current weather in San Francisco is 15 degrees Celsius (59 degrees Fahrenheit). It's a cool day in the city by the bay!"
    }
  ]
}
Claude kann mehrere Tools parallel innerhalb einer einzigen Antwort aufrufen, was für Aufgaben nützlich ist, die mehrere unabhängige Operationen erfordern. Bei der Verwendung paralleler Tools sind alle tool_use-Blöcke in einer einzigen Assistant-Nachricht enthalten, und alle entsprechenden tool_result-Blöcke müssen in der nachfolgenden Benutzer-Nachricht bereitgestellt werden.
Wichtig: Tool-Ergebnisse müssen korrekt formatiert werden, um API-Fehler zu vermeiden und sicherzustellen, dass Claude weiterhin parallele Tools verwendet. Siehe unseren Implementierungsleitfaden für detaillierte Formatierungsanforderungen und vollständige Code-Beispiele.
Für umfassende Beispiele, Testskripte und bewährte Praktiken zur Implementierung paralleler Tool-Aufrufe siehe den Abschnitt über parallele Tool-Nutzung in unserem Implementierungsleitfaden.
Sie können Claude mehrere Tools zur Auswahl in einer einzigen Anfrage zur Verfügung stellen. Hier ist ein Beispiel mit sowohl einem get_weather- als auch einem get_time-Tool, zusammen mit einer Benutzeranfrage, die nach beidem fragt.
curl https://api.anthropic.com/v1/messages \
     --header "x-api-key: $ANTHROPIC_API_KEY" \
     --header "anthropic-version: 2023-06-01" \
     --header "content-type: application/json" \
     --data \
'{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "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, either 'celsius' or 'fahrenheit'"
                }
            },
            "required": ["location"]
        }
    },
    {
        "name": "get_time",
        "description": "Get the current time in a given time zone",
        "input_schema": {
            "type": "object",
            "properties": {
                "timezone": {
                    "type": "string",
                    "description": "The IANA time zone name, e.g. America/Los_Angeles"
                }
            },
            "required": ["timezone"]
        }
    }],
    "messages": [{
        "role": "user",
        "content": "What is the weather like right now in New York? Also what time is it there?"
    }]
}'
In diesem Fall kann Claude entweder:
  • Die Tools sequenziell verwenden (eines nach dem anderen) — zuerst get_weather aufrufen, dann get_time nach Erhalt des Wetterergebnisses
  • Parallele Tool-Aufrufe verwenden — mehrere tool_use-Blöcke in einer einzigen Antwort ausgeben, wenn die Operationen unabhängig sind
Wenn Claude parallele Tool-Aufrufe macht, müssen Sie alle Tool-Ergebnisse in einer einzigen user-Nachricht zurückgeben, wobei jedes Ergebnis in seinem eigenen tool_result-Block steht.
Wenn die Benutzeranfrage nicht genügend Informationen enthält, um alle erforderlichen Parameter für ein Tool zu füllen, erkennt Claude Opus viel eher, dass ein Parameter fehlt und fragt danach. Claude Sonnet kann fragen, besonders wenn es dazu aufgefordert wird, vor der Ausgabe einer Tool-Anfrage zu denken. Aber es kann auch sein Bestes geben, um einen vernünftigen Wert zu schließen.Zum Beispiel, wenn Sie mit dem obigen get_weather-Tool Claude fragen “Wie ist das Wetter?” ohne einen Ort anzugeben, kann Claude, insbesondere Claude Sonnet, eine Vermutung über Tool-Eingaben anstellen:
JSON
{
  "type": "tool_use",
  "id": "toolu_01A09q90qw90lq917835lq9",
  "name": "get_weather",
  "input": {"location": "New York, NY", "unit": "fahrenheit"}
}
Dieses Verhalten ist nicht garantiert, besonders für mehrdeutigere Anfragen und für weniger intelligente Modelle. Wenn Claude Opus nicht genügend Kontext hat, um die erforderlichen Parameter zu füllen, ist es viel wahrscheinlicher, dass es mit einer klärenden Frage antwortet, anstatt einen Tool-Aufruf zu machen.
Einige Aufgaben können das Aufrufen mehrerer Tools in Folge erfordern, wobei die Ausgabe eines Tools als Eingabe für ein anderes verwendet wird. In einem solchen Fall wird Claude ein Tool nach dem anderen aufrufen. Wenn es dazu aufgefordert wird, alle Tools auf einmal aufzurufen, wird Claude wahrscheinlich Parameter für Tools weiter unten raten, wenn sie von Tool-Ergebnissen für Tools weiter oben abhängig sind.Hier ist ein Beispiel für die Verwendung eines get_location-Tools, um den Standort des Benutzers zu erhalten, und dann diesen Standort an das get_weather-Tool zu übergeben:
curl https://api.anthropic.com/v1/messages \
     --header "x-api-key: $ANTHROPIC_API_KEY" \
     --header "anthropic-version: 2023-06-01" \
     --header "content-type: application/json" \
     --data \
'{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "tools": [
        {
            "name": "get_location",
            "description": "Get the current user location based on their IP address. This tool has no parameters or arguments.",
            "input_schema": {
                "type": "object",
                "properties": {}
            }
        },
        {
            "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, either 'celsius' or 'fahrenheit'"
                    }
                },
                "required": ["location"]
            }
        }
    ],
    "messages": [{
        "role": "user",
        "content": "What is the weather like where I am?"
    }]
}'
In diesem Fall würde Claude zuerst das get_location-Tool aufrufen, um den Standort des Benutzers zu erhalten. Nachdem Sie den Standort in einem tool_result zurückgegeben haben, würde Claude dann get_weather mit diesem Standort aufrufen, um die endgültige Antwort zu erhalten.Die vollständige Unterhaltung könnte so aussehen:
RolleInhalt
BenutzerWie ist das Wetter dort, wo ich bin?
AssistantIch werde zuerst Ihren aktuellen Standort finden und dann das Wetter dort prüfen. [Tool-Nutzung für get_location]
Benutzer[Tool-Ergebnis für get_location mit passender ID und Ergebnis San Francisco, CA]
Assistant[Tool-Nutzung für get_weather mit der folgenden Eingabe]{ “location”: “San Francisco, CA”, “unit”: “fahrenheit” }
Benutzer[Tool-Ergebnis für get_weather mit passender ID und Ergebnis “59°F (15°C), größtenteils bewölkt”]
AssistantBasierend auf Ihrem aktuellen Standort in San Francisco, CA, ist das Wetter gerade 59°F (15°C) und größtenteils bewölkt. Es ist ein ziemlich kühler und bedeckter Tag in der Stadt. Sie sollten vielleicht eine leichte Jacke mitnehmen, wenn Sie nach draußen gehen.
Dieses Beispiel zeigt, wie Claude mehrere Tool-Aufrufe verketten kann, um eine Frage zu beantworten, die das Sammeln von Daten aus verschiedenen Quellen erfordert. Die wichtigsten Schritte sind:
  1. Claude erkennt zuerst, dass es den Standort des Benutzers benötigt, um die Wetterfrage zu beantworten, also ruft es das get_location-Tool auf.
  2. Der Benutzer (d.h. der Client-Code) führt die tatsächliche get_location-Funktion aus und gibt das Ergebnis “San Francisco, CA” in einem tool_result-Block zurück.
  3. Mit dem nun bekannten Standort ruft Claude das get_weather-Tool auf und übergibt “San Francisco, CA” als location-Parameter (sowie einen geratenen unit-Parameter, da unit kein erforderlicher Parameter ist).
  4. Der Benutzer führt erneut die tatsächliche get_weather-Funktion mit den bereitgestellten Argumenten aus und gibt die Wetterdaten in einem weiteren tool_result-Block zurück.
  5. Schließlich integriert Claude die Wetterdaten in eine natürlichsprachliche Antwort auf die ursprüngliche Frage.
Standardmäßig wird Claude Opus dazu aufgefordert, zu denken, bevor es eine Tool-Nutzungsanfrage beantwortet, um am besten zu bestimmen, ob ein Tool notwendig ist, welches Tool zu verwenden ist und die angemessenen Parameter. Claude Sonnet und Claude Haiku werden dazu aufgefordert, Tools so viel wie möglich zu verwenden und rufen eher ein unnötiges Tool auf oder schließen fehlende Parameter. Um Sonnet oder Haiku dazu zu bringen, die Benutzeranfrage besser zu bewerten, bevor Tool-Aufrufe gemacht werden, kann der folgende Prompt verwendet werden:Chain of Thought PromptBeantworten Sie die Anfrage des Benutzers mit relevanten Tools (falls verfügbar). Führen Sie vor dem Aufrufen eines Tools eine Analyse durch. Denken Sie zunächst darüber nach, welches der bereitgestellten Tools das relevante Tool ist, um die Anfrage des Benutzers zu beantworten. Zweitens gehen Sie jeden der erforderlichen Parameter des relevanten Tools durch und bestimmen Sie, ob der Benutzer direkt bereitgestellt oder genügend Informationen gegeben hat, um einen Wert zu schließen. Bei der Entscheidung, ob der Parameter geschlossen werden kann, berücksichtigen Sie sorgfältig den gesamten Kontext, um zu sehen, ob er einen bestimmten Wert unterstützt. Wenn alle erforderlichen Parameter vorhanden sind oder vernünftig geschlossen werden können, fahren Sie mit dem Tool-Aufruf fort. ABER, wenn einer der Werte für einen erforderlichen Parameter fehlt, rufen Sie die Funktion NICHT auf (auch nicht mit Füllern für die fehlenden Parameter) und bitten Sie stattdessen den Benutzer, die fehlenden Parameter bereitzustellen. Fragen Sie NICHT nach weiteren Informationen zu optionalen Parametern, wenn sie nicht bereitgestellt werden.
Sie können Tools verwenden, um Claude dazu zu bringen, JSON-Ausgaben zu produzieren, die einem Schema folgen, auch wenn Sie nicht die Absicht haben, diese Ausgabe durch ein Tool oder eine Funktion laufen zu lassen.Bei der Verwendung von Tools auf diese Weise:
  • Sie möchten normalerweise ein einzelnes Tool bereitstellen
  • Sie sollten tool_choice setzen (siehe Tool-Nutzung erzwingen), um das Modell anzuweisen, dieses Tool explizit zu verwenden
  • Denken Sie daran, dass das Modell die input an das Tool weitergibt, also sollten der Name des Tools und die Beschreibung aus der Perspektive des Modells sein.
Das Folgende verwendet ein record_summary-Tool, um ein Bild in einem bestimmten Format zu beschreiben.
#!/bin/bash
IMAGE_URL="https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg"
IMAGE_MEDIA_TYPE="image/jpeg"
IMAGE_BASE64=$(curl "$IMAGE_URL" | base64)

curl https://api.anthropic.com/v1/messages \
     --header "content-type: application/json" \
     --header "x-api-key: $ANTHROPIC_API_KEY" \
     --header "anthropic-version: 2023-06-01" \
     --data \
'{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "tools": [{
        "name": "record_summary",
        "description": "Record summary of an image using well-structured JSON.",
        "input_schema": {
            "type": "object",
            "properties": {
                "key_colors": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
"r": { "type": "number", "description": "red value [0.0, 1.0]" },
"g": { "type": "number", "description": "green value [0.0, 1.0]" },
"b": { "type": "number", "description": "blue value [0.0, 1.0]" },
"name": { "type": "string", "description": "Human-readable color name in snake_case, e.g. \"olive_green\" or \"turquoise\"" }
                        },
                        "required": [ "r", "g", "b", "name" ]
                    },
                    "description": "Key colors in the image. Limit to less than four."
                },
                "description": {
                    "type": "string",
                    "description": "Image description. One to two sentences max."
                },
                "estimated_year": {
                    "type": "integer",
                    "description": "Estimated year that the image was taken, if it is a photo. Only set this if the image appears to be non-fictional. Rough estimates are okay!"
                }
            },
            "required": [ "key_colors", "description" ]
        }
    }],
    "tool_choice": {"type": "tool", "name": "record_summary"},
    "messages": [
        {"role": "user", "content": [
            {"type": "image", "source": {
                "type": "base64",
                "media_type": "'$IMAGE_MEDIA_TYPE'",
                "data": "'$IMAGE_BASE64'"
            }},
            {"type": "text", "text": "Describe this image."}
        ]}
    ]
}'

Preisgestaltung

Tool use requests are priced based on:
  1. The total number of input tokens sent to the model (including in the tools parameter)
  2. The number of output tokens generated
  3. For server-side tools, additional usage-based pricing (e.g., web search charges per search performed)
Client-side tools are priced the same as any other Claude API request, while server-side tools may incur additional charges based on their specific usage. The additional tokens from tool use come from:
  • The tools parameter in API requests (tool names, descriptions, and schemas)
  • tool_use content blocks in API requests and responses
  • tool_result content blocks in API requests
When you use tools, we also automatically include a special system prompt for the model which enables tool use. The number of tool use tokens required for each model are listed below (excluding the additional tokens listed above). Note that the table assumes at least 1 tool is provided. If no tools are provided, then a tool choice of none uses 0 additional system prompt tokens.
ModelTool choiceTool use system prompt token count
Claude Opus 4.1auto, none
any, tool
346 tokens
313 tokens
Claude Opus 4auto, none
any, tool
346 tokens
313 tokens
Claude Sonnet 4.5auto, none
any, tool
346 tokens
313 tokens
Claude Sonnet 4auto, none
any, tool
346 tokens
313 tokens
Claude Sonnet 3.7 (deprecated)auto, none
any, tool
346 tokens
313 tokens
Claude Haiku 4.5auto, none
any, tool
346 tokens
313 tokens
Claude Haiku 3.5auto, none
any, tool
264 tokens
340 tokens
Claude Opus 3 (deprecated)auto, none
any, tool
530 tokens
281 tokens
Claude Sonnet 3auto, none
any, tool
159 tokens
235 tokens
Claude Haiku 3auto, none
any, tool
264 tokens
340 tokens
These token counts are added to your normal input and output tokens to calculate the total cost of a request. Beziehen Sie sich auf unsere Modellübersichtstabelle für aktuelle Preise pro Modell. Wenn Sie eine Tool-Nutzungsanfrage senden, gibt die Antwort, genau wie bei jeder anderen API-Anfrage, sowohl Eingabe- als auch Ausgabe-Token-Zählungen als Teil der gemeldeten usage-Metriken aus.

Nächste Schritte

Erkunden Sie unser Repository mit sofort implementierbaren Tool-Nutzungs-Code-Beispielen in unseren Kochbüchern: