Loading...
  • Erstellen
  • Admin
  • Modelle & Preise
  • Client-SDKs
  • API-Referenz
Search...
⌘K
Log in
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
Documentation

API-Nutzungsleitfaden für Claude

Dieser Leitfaden soll Claude die Grundlagen der Verwendung der Claude API vermitteln. Er bietet Erklärungen und Beispiele für Modell-IDs/die grundlegende Messages API, Tool-Nutzung, Streaming, erweitertes Denken und nichts anderes.

Was this page helpful?

  • Modelle
  • API aufrufen
  • Grundlegende Anfrage und Antwort
  • Mehrere Gesprächsrunden
  • Claudia Worte in den Mund legen
  • Vision
  • Erweitertes Denken
  • Wie erweitertes Denken funktioniert
  • Erweitertes Denken mit Tool-Nutzung
  • Bewahrung von Denk-Blöcken
  • Verschachteltes Denken
  • Tool-Nutzung
  • Angeben von Client-Tools
  • Best Practices für Tool-Definitionen
  • Claudias Ausgabe steuern
  • Erzwungene Tool-Nutzung
  • JSON-Ausgabe
  • Gedankenkette
  • Parallele Tool-Nutzung
  • Umgang mit Tool-Nutzungs- und Tool-Ergebnis-Inhaltsblöcken
  • Umgang mit Ergebnissen von Client-Tools
  • Umgang mit dem max_tokens-Stop-Grund
  • Umgang mit dem pause_turn-Stop-Grund
  • Fehlerbehebung
  • Tool-Ausführungsfehler
  • Ungültiger Tool-Name
  • Streaming-Nachrichten
  • Streaming mit SDKs
  • Ereignistypen
  • Content Block Delta-Typen
  • Beispiel für eine grundlegende Streaming-Anfrage

API-Nutzungsleitfaden für Claude

Dieser Leitfaden soll Claude die Grundlagen der Verwendung der Claude API vermitteln. Er bietet Erklärungen und Beispiele für Modell-IDs/die grundlegende Messages API, Tool-Nutzung, Streaming, erweitertes Denken und nichts anderes.

Modelle

Intelligentestes Modell: Claude Opus 4.7: claude-opus-4-7
Intelligentes Modell: Claude Sonnet 4.6: claude-sonnet-4-6
Für schnelle, kostengünstige Aufgaben: Claude Haiku 4.5: claude-haiku-4-5-20251001

API aufrufen

Grundlegende Anfrage und Antwort

import anthropic
import os

message = anthropic.Anthropic(
    api_key=os.environ.get("ANTHROPIC_API_KEY")
).messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello, Claude"}],
)
print(message)
Output
{
  "id": "msg_01XFDUDYJgAACzvnptvVoYEL",
  "type": "message",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "Hello!"
    }
  ],
  "model": "claude-opus-4-7",
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "usage": {
    "input_tokens": 12,
    "output_tokens": 6
  }
}

Mehrere Gesprächsrunden

Die Messages API ist zustandslos, was bedeutet, dass Sie immer die vollständige Gesprächshistorie an die API senden. Sie können dieses Muster verwenden, um ein Gespräch im Laufe der Zeit aufzubauen. Frühere Gesprächsrunden müssen nicht unbedingt tatsächlich von Claude stammen. Sie können synthetische assistant-Nachrichten verwenden.

import anthropic

message = anthropic.Anthropic().messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "Hello, Claude"},
        {"role": "assistant", "content": "Hello!"},
        {"role": "user", "content": "Can you describe LLMs to me?"},
    ],
)
print(message)

Claudia Worte in den Mund legen

Sie können einen Teil von Claudes Antwort an der letzten Position der Eingabenachrichtenliste vorab ausfüllen. Dies kann verwendet werden, um Claudes Antwort zu beeinflussen. Das folgende Beispiel verwendet "max_tokens": 1, um eine einzelne Multiple-Choice-Antwort von Claude zu erhalten.

message = anthropic.Anthropic().messages.create(
    model="claude-sonnet-4-5",
    max_tokens=1,
    messages=[
        {
            "role": "user",
            "content": "What is latin for Ant? (A) Apoidea, (B) Rhopalocera, (C) Formicidae",
        },
        {"role": "assistant", "content": "The answer is ("},
    ],
)

Vision

Claude kann sowohl Text als auch Bilder in Anfragen lesen. Sowohl base64- als auch url-Quellentypen werden für Bilder unterstützt, zusammen mit den Medientypen image/jpeg, image/png, image/gif und image/webp.

Erweitertes Denken

Erweitertes Denken kann Claude manchmal bei sehr schwierigen Aufgaben helfen. Bei Modellen vor Claude Opus 4.7 muss die Temperatur auf 1 gesetzt werden, wenn erweitertes Denken aktiviert ist.

Erweitertes Denken wird in den folgenden Modellen unterstützt:

  • Claude Opus 4.1 (claude-opus-4-1-20250805)
  • Claude Opus 4 (veraltet) (claude-opus-4-20250514)
  • Claude Sonnet 4.6 (claude-sonnet-4-6)
  • Claude Sonnet 4.5 (claude-sonnet-4-5-20250929)

Wie erweitertes Denken funktioniert

Wenn erweitertes Denken aktiviert ist, erstellt Claude thinking-Inhaltsblöcke, in denen es sein internes Denken ausgibt. Die API-Antwort enthält thinking-Inhaltsblöcke, gefolgt von text-Inhaltsblöcken.

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=16000,
    thinking={"type": "adaptive", "display": "summarized"},
    messages=[
        {
            "role": "user",
            "content": "Are there an infinite number of prime numbers such that n mod 4 == 3?",
        }
    ],
)

# The response will contain summarized thinking blocks and text blocks
for block in response.content:
    if block.type == "thinking":
        print(f"\nThinking summary: {block.thinking}")
    elif block.type == "text":
        print(f"\nResponse: {block.text}")

Der Parameter budget_tokens bestimmt die maximale Anzahl von Token, die Claude für seinen internen Denkprozess verwenden darf. Bei Claude 4-Modellen gilt diese Grenze für vollständige Denk-Token und nicht für die zusammengefasste Ausgabe. Größere Budgets können die Antwortqualität verbessern, indem sie eine gründlichere Analyse für komplexe Probleme ermöglichen. Eine Regel: Der Wert von max_tokens muss streng größer sein als der Wert von budget_tokens, damit Claude Platz hat, seine Antwort nach dem Denken zu schreiben.

Erweitertes Denken mit Tool-Nutzung

Erweitertes Denken kann zusammen mit Tool-Nutzung verwendet werden, was Claude ermöglicht, die Werkzeugauswahl und die Verarbeitung von Ergebnissen zu durchdenken.

Wichtige Einschränkungen:

  1. Tool-Choice-Einschränkung: Unterstützt nur tool_choice: {"type": "auto"} (Standard) oder tool_choice: {"type": "none"}.
  2. Bewahrung von Denk-Blöcken: Während der Tool-Nutzung müssen Sie thinking-Blöcke für die letzte Assistenten-Nachricht an die API zurückgeben.

Bewahrung von Denk-Blöcken

Verschachteltes Denken

Erweitertes Denken mit Tool-Nutzung in Claude 4-Modellen unterstützt verschachteltes Denken, das Claude ermöglicht, zwischen Tool-Aufrufen zu denken. Um es auf Claude 4, 4.5 und Sonnet 4.6-Modellen zu aktivieren, fügen Sie den Beta-Header interleaved-thinking-2025-05-14 zu Ihrer API-Anfrage hinzu.

Mit verschachteltem Denken und NUR mit verschachteltem Denken (nicht mit regulärem erweitertem Denken) kann budget_tokens den Parameter max_tokens überschreiten, da budget_tokens in diesem Fall das Gesamtbudget über alle Denk-Blöcke innerhalb einer Assistenten-Runde darstellt.

Für Claude Opus 4.6 ist verschachteltes Denken automatisch aktiviert, wenn adaptives Denken (thinking: {type: "adaptive"}) verwendet wird. Kein Beta-Header ist erforderlich. Sonnet 4.6 unterstützt sowohl den Beta-Header interleaved-thinking-2025-05-14 mit manuellem erweitertem Denken als auch adaptives Denken.

Tool-Nutzung

Angeben von Client-Tools

Client-Tools werden im Parameter tools auf oberster Ebene der API-Anfrage angegeben. Jede Tool-Definition enthält:

ParameterBeschreibung
nameDer Name des Tools. Muss dem Regex ^[a-zA-Z0-9_-]{1,64}$ entsprechen.
descriptionEine detaillierte Klartextbeschreibung, was das Tool tut, wann es verwendet werden sollte und wie es sich verhält.
input_schemaEin JSON Schema-Objekt, das die erwarteten Parameter für das Tool definiert.
{
  "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"]
  }
}

Best Practices für Tool-Definitionen

Bieten Sie äußerst detaillierte Beschreibungen. Dies ist bei weitem der wichtigste Faktor für die Tool-Leistung. Ihre Beschreibungen sollten jedes Detail über das Tool erklären, einschließlich:

  • Was das Tool tut
  • Wann es verwendet werden sollte (und wann nicht)
  • Was jeder Parameter bedeutet und wie er das Verhalten des Tools beeinflusst
  • Alle wichtigen Vorbehalte oder Einschränkungen

Erwägen Sie die Verwendung von input_examples für komplexe Tools. Für Tools mit verschachtelten Objekten, optionalen Parametern oder formatempfindlichen Eingaben können Sie konkrete Beispiele mit dem Feld input_examples (Beta) bereitstellen. Dies hilft Claude, erwartete Eingabemuster zu verstehen. Siehe Bereitstellung von Tool-Nutzungsbeispielen für Details.

Beispiel einer guten Tool-Beschreibung:

{
  "name": "get_stock_price",
  "description": "Retrieves the current stock price for a given ticker symbol. The ticker symbol must be a valid symbol for a publicly traded company on a major US stock exchange like NYSE or NASDAQ. The tool will return the latest trade price in USD. It should be used when the user asks about the current or most recent price of a specific stock. It will not provide any other information about the stock or company.",
  "input_schema": {
    "type": "object",
    "properties": {
      "ticker": {
        "type": "string",
        "description": "The stock ticker symbol, e.g. AAPL for Apple Inc."
      }
    },
    "required": ["ticker"]
  }
}

Claudias Ausgabe steuern

Erzwungene Tool-Nutzung

Sie können Claude zwingen, ein bestimmtes Tool zu verwenden, indem Sie das Tool im Feld tool_choice angeben:

tool_choice = {"type": "tool", "name": "get_weather"}

Bei der Arbeit mit dem Parameter tool_choice gibt es vier mögliche Optionen:

  • auto ermöglicht Claude zu entscheiden, ob bereitgestellte Tools verwendet werden sollen oder nicht (Standard).
  • any teilt Claude mit, dass es eines der bereitgestellten Tools verwenden muss.
  • tool zwingt Claude, immer ein bestimmtes Tool zu verwenden.
  • none verhindert, dass Claude Tools verwendet.

JSON-Ausgabe

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 entspricht.

Gedankenkette

Bei der Verwendung von Tools zeigt Claude oft seine "Gedankenkette", d. h. das schrittweise Denken, das es verwendet, um das Problem zu zerlegen und zu entscheiden, welche Tools verwendet werden sollen.

{
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "<thinking>To answer this question, I will: 1. Use the get_weather tool to get the current weather in San Francisco. 2. Use the get_time tool to get the current time in the America/Los_Angeles timezone, which covers San Francisco, CA.</thinking>"
    },
    {
      "type": "tool_use",
      "id": "toolu_01A09q90qw90lq917835lq9",
      "name": "get_weather",
      "input": { "location": "San Francisco, CA" }
    }
  ]
}

Parallele Tool-Nutzung

Standardmäßig kann Claude mehrere Tools verwenden, um eine Benutzeranfrage zu beantworten. Sie können dieses Verhalten deaktivieren, indem Sie disable_parallel_tool_use=true setzen.

Umgang mit Tool-Nutzungs- und Tool-Ergebnis-Inhaltsblöcken

Umgang mit Ergebnissen von Client-Tools

Die Antwort hat einen stop_reason von tool_use und einen oder mehrere tool_use-Inhaltsblöcke, die Folgendes enthalten:

  • id: Ein eindeutiger Bezeichner für diesen bestimmten Tool-Nutzungsblock.
  • name: Der Name des verwendeten Tools.
  • input: Ein Objekt, das die an das Tool übergebene Eingabe enthält.

Wenn Sie eine Tool-Nutzungsantwort erhalten, sollten Sie:

  1. Extrahieren Sie name, id und input aus dem tool_use-Block.
  2. Führen Sie das tatsächliche Tool in Ihrer Codebasis aus, das diesem Tool-Namen entspricht.
  3. Setzen Sie das Gespräch fort, indem Sie eine neue Nachricht mit einem tool_result senden:
{
  "role": "user",
  "content": [
    {
      "type": "tool_result",
      "tool_use_id": "toolu_01A09q90qw90lq917835lq9",
      "content": "15 degrees"
    }
  ]
}

Umgang mit dem max_tokens-Stop-Grund

Wenn Claudes Antwort aufgrund des Erreichens des max_tokens-Limits während der Tool-Nutzung unterbrochen wird, wiederholen Sie die Anfrage mit einem höheren max_tokens-Wert.

Umgang mit dem pause_turn-Stop-Grund

Bei Verwendung von Server-Tools wie Web-Suche kann die API einen pause_turn-Stop-Grund zurückgeben. Setzen Sie das Gespräch fort, indem Sie die angehaltene Antwort unverändert in einer nachfolgenden Anfrage zurückgeben.

Fehlerbehebung

Tool-Ausführungsfehler

Wenn das Tool selbst während der Ausführung einen Fehler wirft, geben Sie die Fehlermeldung mit "is_error": true zurück:

{
  "role": "user",
  "content": [
    {
      "type": "tool_result",
      "tool_use_id": "toolu_01A09q90qw90lq917835lq9",
      "content": "ConnectionError: the weather service API is not available (HTTP 500)",
      "is_error": true
    }
  ]
}

Ungültiger Tool-Name

Wenn Claudes versuchte Verwendung eines Tools ungültig ist (z. B. fehlende erforderliche Parameter), wiederholen Sie die Anfrage mit detaillierteren description-Werten in Ihren Tool-Definitionen.

Streaming-Nachrichten

Beim Erstellen einer Nachricht können Sie "stream": true setzen, um die Antwort inkrementell mit Server-Sent Events (SSE) zu streamen.

Streaming mit SDKs

Ereignistypen

Jedes Server-Sent Event enthält einen benannten Ereignistyp und zugehörige JSON-Daten. Jeder Stream verwendet den folgenden Ereignisfluss:

  1. message_start: enthält ein Message-Objekt mit leerem content.
  2. Eine Reihe von Inhaltsblöcken, jeweils mit content_block_start, einem oder mehreren content_block_delta-Ereignissen und content_block_stop.
  3. Ein oder mehrere message_delta-Ereignisse, die Änderungen auf oberster Ebene am endgültigen Message-Objekt anzeigen.
  4. Ein finales message_stop-Ereignis.

Warnung: Die Token-Anzahl, die im Feld usage des message_delta-Ereignisses angezeigt wird, ist kumulativ.

Content Block Delta-Typen

Text Delta

{
  "type": "content_block_delta",
  "index": 0,
  "delta": { "type": "text_delta", "text": "Hello frien" }
}

Input JSON Delta

Für tool_use-Inhaltsblöcke sind Deltas partielle JSON-Strings:

{"type": "content_block_delta","index": 1,"delta": {"type": "input_json_delta","partial_json": "{\"location\": \"San Fra"}}

Thinking Delta

Bei Verwendung von erweitertem Denken mit Streaming:

{
  "type": "content_block_delta",
  "index": 0,
  "delta": {
    "type": "thinking_delta",
    "thinking": "Let me solve this step by step..."
  }
}

Beispiel für eine grundlegende Streaming-Anfrage

event: message_start
data: {"type": "message_start", "message": {"id": "msg_1nZdL29xx5MUA1yADyHTEsnR8uuvGzszyY", "type": "message", "role": "assistant", "content": [], "model": "claude-opus-4-7", "stop_reason": null, "stop_sequence": null, "usage": {"input_tokens": 25, "output_tokens": 1}}}

event: content_block_start
data: {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}}

event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "text_delta", "text": "Hello"}}

event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "text_delta", "text": "!"}}

event: content_block_stop
data: {"type": "content_block_stop", "index": 0}

event: message_delta
data: {"type": "message_delta", "delta": {"stop_reason": "end_turn", "stop_sequence":null}, "usage": {"output_tokens": 15}}

event: message_stop
data: {"type": "message_stop"}
import anthropic
import base64
import httpx

# Option 1: Base64-encoded image
image_url = "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg"
image_media_type = "image/jpeg"
image_data = base64.standard_b64encode(httpx.get(image_url).content).decode("utf-8")

message = anthropic.Anthropic().messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": image_media_type,
                        "data": image_data,
                    },
                },
                {"type": "text", "text": "What is in the above image?"},
            ],
        }
    ],
)

# Option 2: URL-referenced image
message_from_url = anthropic.Anthropic().messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {
                        "type": "url",
                        "url": "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg",
                    },
                },
                {"type": "text", "text": "What is in the above image?"},
            ],
        }
    ],
)
import anthropic

client = anthropic.Anthropic()

weather_tool = {
    "name": "get_weather",
    "description": "Get the current weather for a location.",
    "input_schema": {
        "type": "object",
        "properties": {"location": {"type": "string", "description": "The city name."}},
        "required": ["location"],
    },
}

weather_data = {"temperature": 72}

# First request - Claude responds with thinking and tool request
response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=16000,
    thinking={"type": "adaptive", "display": "summarized"},
    tools=[weather_tool],
    messages=[{"role": "user", "content": "What's the weather in Paris?"}],
)

# Extract thinking block and tool use block
thinking_block = next(
    (block for block in response.content if block.type == "thinking"), None
)
tool_use_block = next(
    (block for block in response.content if block.type == "tool_use"), None
)

# Second request - Include thinking block and tool result
continuation = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=16000,
    thinking={"type": "adaptive", "display": "summarized"},
    tools=[weather_tool],
    messages=[
        {"role": "user", "content": "What's the weather in Paris?"},
        # Notice that the thinking_block is passed in as well as the tool_use_block
        {"role": "assistant", "content": [thinking_block, tool_use_block]},
        {
            "role": "user",
            "content": [
                {
                    "type": "tool_result",
                    "tool_use_id": tool_use_block.id,
                    "content": f"Current temperature: {weather_data['temperature']}°F",
                }
            ],
        },
    ],
)
import anthropic

client = anthropic.Anthropic()

calculator_tool = {
    "name": "calculator",
    "description": "Perform arithmetic calculations.",
    "input_schema": {
        "type": "object",
        "properties": {
            "expression": {
                "type": "string",
                "description": "The math expression to evaluate.",
            }
        },
        "required": ["expression"],
    },
}

database_tool = {
    "name": "database_query",
    "description": "Query the product database.",
    "input_schema": {
        "type": "object",
        "properties": {
            "query": {"type": "string", "description": "The database query."}
        },
        "required": ["query"],
    },
}

response = client.beta.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=16000,
    thinking={"type": "enabled", "budget_tokens": 10000},
    tools=[calculator_tool, database_tool],
    messages=[
        {
            "role": "user",
            "content": "What's the total revenue if we sold 150 units of product A at $50 each?",
        }
    ],
    betas=["interleaved-thinking-2025-05-14"],
)
import anthropic

client = anthropic.Anthropic()

with client.messages.stream(
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}],
    model="claude-opus-4-7",
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)