Erweitertes Denken gibt Claude verbesserte Denkfähigkeiten für komplexe Aufgaben und bietet unterschiedliche Transparenzstufen in seinen schrittweisen Denkprozessen, bevor er seine endgültige Antwort liefert.

Unterstützte Modelle

Erweitertes Denken wird in den folgenden Modellen unterstützt:
  • Claude Sonnet 4.5 (claude-sonnet-4-5-20250929)
  • Claude Sonnet 4 (claude-sonnet-4-20250514)
  • Claude Sonnet 3.7 (claude-3-7-sonnet-20250219) (veraltet)
  • Claude Haiku 4.5 (claude-haiku-4-5-20251001)
  • Claude Opus 4.1 (claude-opus-4-1-20250805)
  • Claude Opus 4 (claude-opus-4-20250514)
Das API-Verhalten unterscheidet sich zwischen Claude Sonnet 3.7 und Claude 4 Modellen, aber die API-Strukturen bleiben genau gleich.Weitere Informationen finden Sie unter Unterschiede beim Denken zwischen Modellversionen.

Wie erweitertes Denken funktioniert

Wenn erweitertes Denken aktiviert ist, erstellt Claude thinking Inhaltsblöcke, in denen es sein internes Denken ausgibt. Claude bezieht Erkenntnisse aus diesem Denken ein, bevor er eine endgültige Antwort formuliert. Die API-Antwort enthält thinking Inhaltsblöcke, gefolgt von text Inhaltsblöcken. Hier ist ein Beispiel des Standard-Antwortformats:
{
  "content": [
    {
      "type": "thinking",
      "thinking": "Let me analyze this step by step...",
      "signature": "WaUjzkypQ2mUEVM36O2TxuC06KN8xyfbJwyem2dw3URve/op91XWHOEBLLqIOMfFG/UvLEczmEsUjavL...."
    },
    {
      "type": "text",
      "text": "Based on my analysis..."
    }
  ]
}
Weitere Informationen zum Antwortformat des erweiterten Denkens finden Sie in der Messages API Referenz.

Wie man erweitertes Denken verwendet

Hier ist ein Beispiel für die Verwendung von erweitertem Denken in der Messages API:
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": 16000,
    "thinking": {
        "type": "enabled",
        "budget_tokens": 10000
    },
    "messages": [
        {
            "role": "user",
            "content": "Are there an infinite number of prime numbers such that n mod 4 == 3?"
        }
    ]
}'
Um erweitertes Denken zu aktivieren, fügen Sie ein thinking Objekt hinzu, wobei der type Parameter auf enabled und budget_tokens auf ein angegebenes Token-Budget für erweitertes Denken gesetzt wird. Der budget_tokens Parameter 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 gründlichere Analysen für komplexe Probleme ermöglichen, obwohl Claude möglicherweise nicht das gesamte zugewiesene Budget nutzt, besonders bei Werten über 32k. budget_tokens muss auf einen Wert kleiner als max_tokens gesetzt werden. Wenn Sie jedoch verschachteltes Denken mit Tools verwenden, können Sie diese Grenze überschreiten, da die Token-Grenze Ihr gesamtes Kontextfenster wird (200k Token).

Zusammengefasstes Denken

Mit aktiviertem erweitertem Denken gibt die Messages API für Claude 4 Modelle eine Zusammenfassung von Claudes vollständigem Denkprozess zurück. Zusammengefasstes Denken bietet die vollständigen Intelligenzvorteile des erweiterten Denkens und verhindert gleichzeitig Missbrauch. Hier sind einige wichtige Überlegungen für zusammengefasstes Denken:
  • Sie werden für die vollständigen Denk-Token berechnet, die durch die ursprüngliche Anfrage generiert wurden, nicht für die Zusammenfassungs-Token.
  • Die abgerechnete Ausgabe-Token-Anzahl wird nicht mit der Anzahl der Token übereinstimmen, die Sie in der Antwort sehen.
  • Die ersten Zeilen der Denkausgabe sind ausführlicher und bieten detailliertes Denken, das besonders für Prompt-Engineering-Zwecke hilfreich ist.
  • Während Anthropic versucht, die Funktion des erweiterten Denkens zu verbessern, unterliegt das Zusammenfassungsverhalten Änderungen.
  • Die Zusammenfassung bewahrt die Schlüsselideen von Claudes Denkprozess mit minimaler zusätzlicher Latenz und ermöglicht eine streambare Benutzererfahrung und einfache Migration von Claude Sonnet 3.7 zu Claude 4 Modellen.
  • Die Zusammenfassung wird von einem anderen Modell verarbeitet als dem, das Sie in Ihren Anfragen anvisieren. Das Denkmodell sieht die zusammengefasste Ausgabe nicht.
Claude Sonnet 3.7 gibt weiterhin vollständige Denkausgabe zurück.In seltenen Fällen, in denen Sie Zugriff auf vollständige Denkausgabe für Claude 4 Modelle benötigen, kontaktieren Sie unser Vertriebsteam.

Streaming-Denken

Sie können Antworten mit erweitertem Denken mit Server-Sent Events (SSE) streamen. Wenn Streaming für erweitertes Denken aktiviert ist, erhalten Sie Denkinhalte über thinking_delta Ereignisse. Weitere Dokumentation zum Streaming über die Messages API finden Sie unter Streaming Messages. Hier ist, wie Sie mit Streaming und Denken umgehen:
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": 16000,
    "stream": true,
    "thinking": {
        "type": "enabled",
        "budget_tokens": 10000
    },
    "messages": [
        {
            "role": "user",
            "content": "What is 27 * 453?"
        }
    ]
}'
Beispiel-Streaming-Ausgabe:
event: message_start
data: {"type": "message_start", "message": {"id": "msg_01...", "type": "message", "role": "assistant", "content": [], "model": "claude-sonnet-4-5", "stop_reason": null, "stop_sequence": null}}

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

event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "thinking_delta", "thinking": "Let me solve this step by step:\n\n1. First break down 27 * 453"}}

event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "thinking_delta", "thinking": "\n2. 453 = 400 + 50 + 3"}}

// Additional thinking deltas...

event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "signature_delta", "signature": "EqQBCgIYAhIM1gbcDa9GJwZA2b3hGgxBdjrkzLoky3dl1pkiMOYds..."}}

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

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

event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "text_delta", "text": "27 * 453 = 12,231"}}

// Additional text deltas...

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

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

event: message_stop
data: {"type": "message_stop"}
Wenn Sie Streaming mit aktiviertem Denken verwenden, können Sie bemerken, dass Text manchmal in größeren Blöcken ankommt, die mit kleinerer, Token-für-Token-Lieferung abwechseln. Dies ist erwartetes Verhalten, besonders für Denkinhalte.Das Streaming-System muss Inhalte in Batches für optimale Leistung verarbeiten, was zu diesem “klumpigen” Liefermuster führen kann, mit möglichen Verzögerungen zwischen Streaming-Ereignissen. Wir arbeiten kontinuierlich daran, diese Erfahrung zu verbessern, mit zukünftigen Updates, die sich auf ein sanfteres Streaming von Denkinhalten konzentrieren.

Erweitertes Denken mit Tool-Nutzung

Erweitertes Denken kann zusammen mit Tool-Nutzung verwendet werden, was Claude ermöglicht, die Auswahl von Tools und die Verarbeitung von Ergebnissen durchzudenken. Wenn Sie erweitertes Denken mit Tool-Nutzung verwenden, beachten Sie die folgenden Einschränkungen:
  1. Tool-Auswahl-Einschränkung: Tool-Nutzung mit Denken unterstützt nur tool_choice: {"type": "auto"} (Standard) oder tool_choice: {"type": "none"}. Die Verwendung von tool_choice: {"type": "any"} oder tool_choice: {"type": "tool", "name": "..."} führt zu einem Fehler, da diese Optionen die Tool-Nutzung erzwingen, was mit erweitertem Denken nicht kompatibel ist.
  2. Bewahrung von Denkblöcken: Während der Tool-Nutzung müssen Sie thinking Blöcke für die letzte Assistenten-Nachricht an die API zurückgeben. Geben Sie den vollständigen unveränderten Block an die API zurück, um die Kontinuität des Denkens zu bewahren.

Umschalten von Denkmodi in Gesprächen

Sie können das Denken nicht in der Mitte eines Assistenten-Zuges umschalten, einschließlich während Tool-Nutzungs-Schleifen. Der gesamte Assistenten-Zug muss in einem einzigen Denkmodus arbeiten:
  • Wenn Denken aktiviert ist, muss der endgültige Assistenten-Zug mit einem Denkblock beginnen.
  • Wenn Denken deaktiviert ist, darf der endgültige Assistenten-Zug keine Denkblöcke enthalten
Aus der Perspektive des Modells sind Tool-Nutzungs-Schleifen Teil des Assistenten-Zuges. Ein Assistenten-Zug ist nicht abgeschlossen, bis Claude seine vollständige Antwort beendet hat, die mehrere Tool-Aufrufe und Ergebnisse enthalten kann. Zum Beispiel ist diese Sequenz alles Teil eines einzelnen Assistenten-Zuges:
User: "What's the weather in Paris?"
Assistant: [thinking] + [tool_use: get_weather]
User: [tool_result: "20°C, sunny"]
Assistant: [text: "The weather in Paris is 20°C and sunny"]
Obwohl es mehrere API-Nachrichten gibt, ist die Tool-Nutzungs-Schleife konzeptionell Teil einer kontinuierlichen Assistenten-Antwort.

Häufige Fehlerszenarien

Sie könnten auf diesen Fehler stoßen:
Expected `thinking` or `redacted_thinking`, but found `tool_use`.
When `thinking` is enabled, a final `assistant` message must start
with a thinking block (preceding the lastmost set of `tool_use` and
`tool_result` blocks).
Dies tritt typischerweise auf, wenn:
  1. Sie Denken deaktiviert hatten während einer Tool-Nutzungs-Sequenz
  2. Sie Denken wieder aktivieren möchten
  3. Ihre letzte Assistenten-Nachricht Tool-Nutzungs-Blöcke enthält, aber keinen Denkblock

Praktische Anleitung

✗ Ungültig: Denken unmittelbar nach Tool-Nutzung umschalten
User: "What's the weather?"
Assistant: [tool_use] (thinking disabled)
User: [tool_result]
// Cannot enable thinking here - still in the same assistant turn
✓ Gültig: Assistenten-Zug zuerst abschließen
User: "What's the weather?"
Assistant: [tool_use] (thinking disabled)
User: [tool_result]
Assistant: [text: "It's sunny"] 
User: "What about tomorrow?" (thinking disabled)
Assistant: [thinking] + [text: "..."] (thinking enabled - new turn)
Best Practice: Planen Sie Ihre Denkstrategie am Anfang jedes Zuges, anstatt zu versuchen, mitten im Zug umzuschalten.
Das Umschalten von Denkmodi invalidiert auch Prompt-Caching für Nachrichtenverlauf. Weitere Details finden Sie im Abschnitt Erweitertes Denken mit Prompt-Caching.
Hier ist ein praktisches Beispiel, das zeigt, wie man Denkblöcke bei der Bereitstellung von Tool-Ergebnissen bewahrt:
weather_tool = {
    "name": "get_weather",
    "description": "Get current weather for a location",
    "input_schema": {
        "type": "object",
        "properties": {
            "location": {"type": "string"}
        },
        "required": ["location"]
    }
}

# First request - Claude responds with thinking and tool request
response = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=16000,
    thinking={
        "type": "enabled",
        "budget_tokens": 10000
    },
    tools=[weather_tool],
    messages=[
        {"role": "user", "content": "What's the weather in Paris?"}
    ]
)
Die API-Antwort enthält Denk-, Text- und Tool-Nutzungs-Blöcke:
{
    "content": [
        {
            "type": "thinking",
            "thinking": "The user wants to know the current weather in Paris. I have access to a function `get_weather`...",
            "signature": "BDaL4VrbR2Oj0hO4XpJxT28J5TILnCrrUXoKiiNBZW9P+nr8XSj1zuZzAl4egiCCpQNvfyUuFFJP5CncdYZEQPPmLxYsNrcs...."
        },
        {
            "type": "text",
            "text": "I can help you get the current weather information for Paris. Let me check that for you"
        },
        {
            "type": "tool_use",
            "id": "toolu_01CswdEQBMshySk6Y9DFKrfq",
            "name": "get_weather",
            "input": {
                "location": "Paris"
            }
        }
    ]
}
Lassen Sie uns das Gespräch fortsetzen und das Tool verwenden
# 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)

# Call your actual weather API, here is where your actual API call would go
# let's pretend this is what we get back
weather_data = {"temperature": 88}

# Second request - Include thinking block and tool result
# No new thinking blocks will be generated in the response
continuation = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=16000,
    thinking={
        "type": "enabled",
        "budget_tokens": 10000
    },
    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
        # if this is not passed in, an error is raised
        {"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"
        }]}
    ]
)
Die API-Antwort enthält jetzt nur Text
{
    "content": [
        {
            "type": "text",
            "text": "Currently in Paris, the temperature is 88°F (31°C)"
        }
    ]
}

Bewahrung von Denkblöcken

Während der Tool-Nutzung müssen Sie thinking Blöcke an die API zurückgeben, und Sie müssen den vollständigen unveränderten Block an die API zurückgeben. Dies ist entscheidend für die Aufrechterhaltung des Denkflusses des Modells und der Gesprächsintegrität.
Während Sie thinking Blöcke aus vorherigen assistant Rollen-Zügen weglassen können, empfehlen wir, immer alle Denkblöcke an die API für jedes mehrteilige Gespräch zurückzugeben. Die API wird:
  • Die bereitgestellten Denkblöcke automatisch filtern
  • Die relevanten Denkblöcke verwenden, die notwendig sind, um das Denken des Modells zu bewahren
  • Nur die Eingabe-Token für die Blöcke berechnen, die Claude angezeigt werden
Wenn Sie Denkmodi während eines Gesprächs umschalten, denken Sie daran, dass der gesamte Assistenten-Zug (einschließlich Tool-Nutzungs-Schleifen) in einem einzigen Denkmodus arbeiten muss. Weitere Details finden Sie unter Umschalten von Denkmodi in Gesprächen.
Wenn Claude Tools aufruft, pausiert es die Konstruktion einer Antwort, um auf externe Informationen zu warten. Wenn Tool-Ergebnisse zurückgegeben werden, wird Claude diese bestehende Antwort weiter aufbauen. Dies macht es notwendig, Denkblöcke während der Tool-Nutzung zu bewahren, aus ein paar Gründen:
  1. Denk-Kontinuität: Die Denkblöcke erfassen Claudes schrittweises Denken, das zu Tool-Anfragen führte. Wenn Sie Tool-Ergebnisse posten, stellt die Einbeziehung des ursprünglichen Denkens sicher, dass Claude sein Denken von dort fortsetzen kann, wo es aufgehört hat.
  2. Kontext-Erhaltung: Während Tool-Ergebnisse als Benutzer-Nachrichten in der API-Struktur erscheinen, sind sie Teil eines kontinuierlichen Denkflusses. Die Bewahrung von Denkblöcken erhält diesen konzeptionellen Fluss über mehrere API-Aufrufe hinweg. Weitere Informationen zur Kontext-Verwaltung finden Sie in unserem Leitfaden zu Kontextfenstern.
Wichtig: Wenn Sie thinking Blöcke bereitstellen, muss die gesamte Sequenz aufeinanderfolgender thinking Blöcke den Ausgaben entsprechen, die das Modell während der ursprünglichen Anfrage generiert hat; Sie können die Sequenz dieser Blöcke nicht neu anordnen oder ändern.

Verschachteltes Denken

Erweitertes Denken mit Tool-Nutzung in Claude 4 Modellen unterstützt verschachteltes Denken, das Claude ermöglicht, zwischen Tool-Aufrufen zu denken und nach dem Empfang von Tool-Ergebnissen anspruchsvolleres Denken zu betreiben. Mit verschachteltem Denken kann Claude:
  • Über die Ergebnisse eines Tool-Aufrufs nachdenken, bevor es entscheidet, was als nächstes zu tun ist
  • Mehrere Tool-Aufrufe mit Denkschritten dazwischen verketten
  • Nuanciertere Entscheidungen basierend auf Zwischenergebnissen treffen
Um verschachteltes Denken zu aktivieren, fügen Sie den Beta-Header interleaved-thinking-2025-05-14 zu Ihrer API-Anfrage hinzu. Hier sind einige wichtige Überlegungen für verschachteltes Denken:
  • Mit verschachteltem Denken kann budget_tokens den max_tokens Parameter überschreiten, da es das Gesamtbudget über alle Denkblöcke innerhalb eines Assistenten-Zuges darstellt.
  • Verschachteltes Denken wird nur für Tools unterstützt, die über die Messages API verwendet werden.
  • Verschachteltes Denken wird nur für Claude 4 Modelle mit dem Beta-Header interleaved-thinking-2025-05-14 unterstützt.
  • Direkte Aufrufe an die Claude API ermöglichen es Ihnen, interleaved-thinking-2025-05-14 in Anfragen an jedes Modell zu übergeben, ohne Auswirkungen.
  • Auf Plattformen von Drittanbietern (z.B. Amazon Bedrock und Vertex AI), wenn Sie interleaved-thinking-2025-05-14 an ein anderes Modell als Claude Opus 4.1, Opus 4 oder Sonnet 4 übergeben, schlägt Ihre Anfrage fehl.
import anthropic

client = anthropic.Anthropic()

# Define tools
calculator_tool = {
    "name": "calculator",
    "description": "Perform mathematical calculations",
    "input_schema": {
        "type": "object",
        "properties": {
            "expression": {
                "type": "string",
                "description": "Mathematical expression to evaluate"
            }
        },
        "required": ["expression"]
    }
}

database_tool = {
    "name": "database_query",
    "description": "Query product database",
    "input_schema": {
        "type": "object",
        "properties": {
            "query": {
                "type": "string",
                "description": "SQL query to execute"
            }
        },
        "required": ["query"]
    }
}

# First request - Claude thinks once before all tool calls
response = client.messages.create(
    model="claude-sonnet-4-5",
    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, and how does this compare to our average monthly revenue from the database?"
    }]
)

# Response includes thinking followed by tool uses
# Note: Claude thinks once at the beginning, then makes all tool decisions
print("First response:")
for block in response.content:
    if block.type == "thinking":
        print(f"Thinking (summarized): {block.thinking}")
    elif block.type == "tool_use":
        print(f"Tool use: {block.name} with input {block.input}")
    elif block.type == "text":
        print(f"Text: {block.text}")

# You would execute the tools and return results...
# After getting both tool results back, Claude directly responds without additional thinking
In diesem Beispiel ohne verschachteltes Denken:
  1. Claude denkt einmal am Anfang, um die Aufgabe zu verstehen
  2. Trifft alle Tool-Nutzungs-Entscheidungen im Voraus
  3. Wenn Tool-Ergebnisse zurückgegeben werden, gibt Claude sofort eine Antwort ohne zusätzliches Denken
import anthropic

client = anthropic.Anthropic()

# Same tool definitions as before
calculator_tool = {
    "name": "calculator",
    "description": "Perform mathematical calculations",
    "input_schema": {
        "type": "object",
        "properties": {
            "expression": {
                "type": "string",
                "description": "Mathematical expression to evaluate"
            }
        },
        "required": ["expression"]
    }
}

database_tool = {
    "name": "database_query",
    "description": "Query product database",
    "input_schema": {
        "type": "object",
        "properties": {
            "query": {
                "type": "string",
                "description": "SQL query to execute"
            }
        },
        "required": ["query"]
    }
}

# First request with interleaved thinking enabled
response = client.beta.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=16000,
    thinking={
        "type": "enabled",
        "budget_tokens": 10000
    },
    tools=[calculator_tool, database_tool],
    betas=["interleaved-thinking-2025-05-14"],
    messages=[{
        "role": "user",
        "content": "What's the total revenue if we sold 150 units of product A at $50 each, and how does this compare to our average monthly revenue from the database?"
    }]
)

print("Initial response:")
thinking_blocks = []
tool_use_blocks = []

for block in response.content:
    if block.type == "thinking":
        thinking_blocks.append(block)
        print(f"Thinking: {block.thinking}")
    elif block.type == "tool_use":
        tool_use_blocks.append(block)
        print(f"Tool use: {block.name} with input {block.input}")
    elif block.type == "text":
        print(f"Text: {block.text}")

# First tool result (calculator)
calculator_result = "7500"  # 150 * 50

# Continue with first tool result
response2 = client.beta.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=16000,
    thinking={
        "type": "enabled",
        "budget_tokens": 10000
    },
    tools=[calculator_tool, database_tool],
    betas=["interleaved-thinking-2025-05-14"],
    messages=[
        {
            "role": "user",
            "content": "What's the total revenue if we sold 150 units of product A at $50 each, and how does this compare to our average monthly revenue from the database?"
        },
        {
            "role": "assistant",
            "content": [thinking_blocks[0], tool_use_blocks[0]]
        },
        {
            "role": "user",
            "content": [{
                "type": "tool_result",
                "tool_use_id": tool_use_blocks[0].id,
                "content": calculator_result
            }]
        }
    ]
)

print("\nAfter calculator result:")
# With interleaved thinking, Claude can think about the calculator result
# before deciding to query the database
for block in response2.content:
    if block.type == "thinking":
        thinking_blocks.append(block)
        print(f"Interleaved thinking: {block.thinking}")
    elif block.type == "tool_use":
        tool_use_blocks.append(block)
        print(f"Tool use: {block.name} with input {block.input}")

# Second tool result (database)
database_result = "5200"  # Example average monthly revenue

# Continue with second tool result
response3 = client.beta.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=16000,
    thinking={
        "type": "enabled",
        "budget_tokens": 10000
    },
    tools=[calculator_tool, database_tool],
    betas=["interleaved-thinking-2025-05-14"],
    messages=[
        {
            "role": "user",
            "content": "What's the total revenue if we sold 150 units of product A at $50 each, and how does this compare to our average monthly revenue from the database?"
        },
        {
            "role": "assistant",
            "content": [thinking_blocks[0], tool_use_blocks[0]]
        },
        {
            "role": "user",
            "content": [{
                "type": "tool_result",
                "tool_use_id": tool_use_blocks[0].id,
                "content": calculator_result
            }]
        },
        {
            "role": "assistant",
            "content": thinking_blocks[1:] + tool_use_blocks[1:]
        },
        {
            "role": "user",
            "content": [{
                "type": "tool_result",
                "tool_use_id": tool_use_blocks[1].id,
                "content": database_result
            }]
        }
    ]
)

print("\nAfter database result:")
# With interleaved thinking, Claude can think about both results
# before formulating the final response
for block in response3.content:
    if block.type == "thinking":
        print(f"Final thinking: {block.thinking}")
    elif block.type == "text":
        print(f"Final response: {block.text}")
In diesem Beispiel mit verschachteltem Denken:
  1. Claude denkt zunächst über die Aufgabe nach
  2. Nach Erhalt des Rechner-Ergebnisses kann Claude erneut darüber nachdenken, was dieses Ergebnis bedeutet
  3. Claude entscheidet dann, wie die Datenbank basierend auf dem ersten Ergebnis abgefragt werden soll
  4. Nach Erhalt des Datenbank-Ergebnisses denkt Claude noch einmal über beide Ergebnisse nach, bevor er eine endgültige Antwort formuliert
  5. Das Denk-Budget wird über alle Denkblöcke innerhalb des Zuges verteilt
Dieses Muster ermöglicht anspruchsvollere Denkketten, bei denen die Ausgabe jedes Tools die nächste Entscheidung informiert.

Erweitertes Denken mit Prompt-Caching

Prompt-Caching mit Denken hat mehrere wichtige Überlegungen:
Aufgaben mit erweitertem Denken dauern oft länger als 5 Minuten. Erwägen Sie die Verwendung der 1-Stunden-Cache-Dauer, um Cache-Treffer über längere Denksitzungen und mehrstufige Workflows hinweg zu erhalten.
Entfernung von Denkblock-Kontext
  • Denkblöcke aus vorherigen Zügen werden aus dem Kontext entfernt, was Cache-Haltepunkte beeinflussen kann
  • Wenn Gespräche mit Tool-Nutzung fortgesetzt werden, werden Denkblöcke zwischengespeichert und zählen als Eingabe-Token, wenn sie aus dem Cache gelesen werden
  • Dies schafft einen Kompromiss: Während Denkblöcke visuell keinen Kontextfensterplatz verbrauchen, zählen sie dennoch zu Ihrer Eingabe-Token-Nutzung, wenn sie zwischengespeichert werden
  • Wenn Denken deaktiviert wird, schlagen Anfragen fehl, wenn Sie Denkinhalte im aktuellen Tool-Nutzungs-Zug übergeben. In anderen Kontexten wird Denkinhalte, die an die API übergeben werden, einfach ignoriert
Cache-Invalidierungsmuster
  • Änderungen an Denkparametern (aktiviert/deaktiviert oder Budget-Zuweisung) invalidieren Nachrichten-Cache-Haltepunkte
  • Verschachteltes Denken verstärkt Cache-Invalidierung, da Denkblöcke zwischen mehreren Tool-Aufrufen auftreten können
  • System-Prompts und Tools bleiben trotz Änderungen der Denkparameter oder Block-Entfernung zwischengespeichert
Während Denkblöcke für Caching und Kontextberechnungen entfernt werden, müssen sie bei der Fortsetzung von Gesprächen mit Tool-Nutzung bewahrt werden, besonders mit verschachteltem Denken.

Verständnis des Caching-Verhaltens von Denkblöcken

Wenn Sie erweitertes Denken mit Tool-Nutzung verwenden, zeigen Denkblöcke ein spezifisches Caching-Verhalten, das die Token-Zählung beeinflusst: Wie es funktioniert:
  1. Caching tritt nur auf, wenn Sie eine nachfolgende Anfrage stellen, die Tool-Ergebnisse enthält
  2. Wenn die nachfolgende Anfrage gestellt wird, kann der vorherige Gesprächsverlauf (einschließlich Denkblöcke) zwischengespeichert werden
  3. Diese zwischengespeicherten Denkblöcke zählen als Eingabe-Token in Ihren Nutzungsmetriken, wenn sie aus dem Cache gelesen werden
  4. Wenn ein nicht-Tool-Ergebnis-Benutzer-Block enthalten ist, werden alle vorherigen Denkblöcke ignoriert und aus dem Kontext entfernt
Detailliertes Beispiel-Ablauf: Anfrage 1:
User: "What's the weather in Paris?"
Antwort 1:
[thinking_block_1] + [tool_use block 1]
Anfrage 2:
User: ["What's the weather in Paris?"], 
Assistant: [thinking_block_1] + [tool_use block 1], 
User: [tool_result_1, cache=True]
Antwort 2:
[thinking_block_2] + [text block 2]
Anfrage 2 schreibt einen Cache des Anfrageinhalts (nicht der Antwort). Der Cache enthält die ursprüngliche Benutzernachricht, den ersten Denkblock, Tool-Nutzungs-Block und das Tool-Ergebnis. Anfrage 3:
User: ["What's the weather in Paris?"], 
Assistant: [thinking_block_1] + [tool_use block 1], 
User: [tool_result_1, cache=True], 
Assistant: [thinking_block_2] + [text block 2], 
User: [Text response, cache=True]
Da ein nicht-Tool-Ergebnis-Benutzer-Block enthalten war, werden alle vorherigen Denkblöcke ignoriert. Diese Anfrage wird genauso verarbeitet wie:
User: ["What's the weather in Paris?"], 
Assistant: [tool_use block 1], 
User: [tool_result_1, cache=True], 
Assistant: [text block 2], 
User: [Text response, cache=True]
Wichtige Punkte:
  • Dieses Caching-Verhalten geschieht automatisch, auch ohne explizite cache_control Markierungen
  • Dieses Verhalten ist konsistent, ob Sie reguläres Denken oder verschachteltes Denken verwenden
from anthropic import Anthropic
import requests
from bs4 import BeautifulSoup

client = Anthropic()

def fetch_article_content(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')

    # Remove script and style elements
    for script in soup(["script", "style"]):
        script.decompose()

    # Get text
    text = soup.get_text()

    # Break into lines and remove leading and trailing space on each
    lines = (line.strip() for line in text.splitlines())
    # Break multi-headlines into a line each
    chunks = (phrase.strip() for line in lines for phrase in line.split("  "))
    # Drop blank lines
    text = '\n'.join(chunk for chunk in chunks if chunk)

    return text

# Fetch the content of the article
book_url = "https://www.gutenberg.org/cache/epub/1342/pg1342.txt"
book_content = fetch_article_content(book_url)
# Use just enough text for caching (first few chapters)
LARGE_TEXT = book_content[:5000]

SYSTEM_PROMPT=[
    {
        "type": "text",
        "text": "You are an AI assistant that is tasked with literary analysis. Analyze the following text carefully.",
    },
    {
        "type": "text",
        "text": LARGE_TEXT,
        "cache_control": {"type": "ephemeral"}
    }
]

MESSAGES = [
    {
        "role": "user",
        "content": "Analyze the tone of this passage."
    }
]

# First request - establish cache
print("First request - establishing cache")
response1 = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=20000,
    thinking={
        "type": "enabled",
        "budget_tokens": 4000
    },
    system=SYSTEM_PROMPT,
    messages=MESSAGES
)

print(f"First response usage: {response1.usage}")

MESSAGES.append({
    "role": "assistant",
    "content": response1.content
})
MESSAGES.append({
    "role": "user",
    "content": "Analyze the characters in this passage."
})
# Second request - same thinking parameters (cache hit expected)
print("\nSecond request - same thinking parameters (cache hit expected)")
response2 = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=20000,
    thinking={
        "type": "enabled",
        "budget_tokens": 4000
    },
    system=SYSTEM_PROMPT,
    messages=MESSAGES
)

print(f"Second response usage: {response2.usage}")

# Third request - different thinking parameters (cache miss for messages)
print("\nThird request - different thinking parameters (cache miss for messages)")
response3 = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=20000,
    thinking={
        "type": "enabled",
        "budget_tokens": 8000  # Changed thinking budget
    },
    system=SYSTEM_PROMPT,  # System prompt remains cached
    messages=MESSAGES  # Messages cache is invalidated
)

print(f"Third response usage: {response3.usage}")
from anthropic import Anthropic
import requests
from bs4 import BeautifulSoup

client = Anthropic()

def fetch_article_content(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')

    # Remove script and style elements
    for script in soup(["script", "style"]):
        script.decompose()

    # Get text
    text = soup.get_text()

    # Break into lines and remove leading and trailing space on each
    lines = (line.strip() for line in text.splitlines())
    # Break multi-headlines into a line each
    chunks = (phrase.strip() for line in lines for phrase in line.split("  "))
    # Drop blank lines
    text = '\n'.join(chunk for chunk in chunks if chunk)

    return text

# Fetch the content of the article
book_url = "https://www.gutenberg.org/cache/epub/1342/pg1342.txt"
book_content = fetch_article_content(book_url)
# Use just enough text for caching (first few chapters)
LARGE_TEXT = book_content[:5000]

# No system prompt - caching in messages instead
MESSAGES = [
    {
        "role": "user",
        "content": [
            {
                "type": "text",
                "text": LARGE_TEXT,
                "cache_control": {"type": "ephemeral"},
            },
            {
                "type": "text",
                "text": "Analyze the tone of this passage."
            }
        ]
    }
]

# First request - establish cache
print("First request - establishing cache")
response1 = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=20000,
    thinking={
        "type": "enabled",
        "budget_tokens": 4000
    },
    messages=MESSAGES
)

print(f"First response usage: {response1.usage}")

MESSAGES.append({
    "role": "assistant",
    "content": response1.content
})
MESSAGES.append({
    "role": "user",
    "content": "Analyze the characters in this passage."
})
# Second request - same thinking parameters (cache hit expected)
print("\nSecond request - same thinking parameters (cache hit expected)")
response2 = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=20000,
    thinking={
        "type": "enabled",
        "budget_tokens": 4000  # Same thinking budget
    },
    messages=MESSAGES
)

print(f"Second response usage: {response2.usage}")

MESSAGES.append({
    "role": "assistant",
    "content": response2.content
})
MESSAGES.append({
    "role": "user",
    "content": "Analyze the setting in this passage."
})

# Third request - different thinking budget (cache miss expected)
print("\nThird request - different thinking budget (cache miss expected)")
response3 = client.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=20000,
    thinking={
        "type": "enabled",
        "budget_tokens": 8000  # Different thinking budget breaks cache
    },
    messages=MESSAGES
)

print(f"Third response usage: {response3.usage}")
Hier ist die Ausgabe des Skripts (Sie können leicht unterschiedliche Zahlen sehen)
First request - establishing cache
First response usage: { cache_creation_input_tokens: 1370, cache_read_input_tokens: 0, input_tokens: 17, output_tokens: 700 }

Second request - same thinking parameters (cache hit expected)

Second response usage: { cache_creation_input_tokens: 0, cache_read_input_tokens: 1370, input_tokens: 303, output_tokens: 874 }

Third request - different thinking budget (cache miss expected)
Third response usage: { cache_creation_input_tokens: 1370, cache_read_input_tokens: 0, input_tokens: 747, output_tokens: 619 }
Dieses Beispiel zeigt, dass wenn Caching im Nachrichten-Array eingerichtet ist, das Ändern der Denkparameter (budget_tokens von 4000 auf 8000 erhöht) den Cache invalidiert. Die dritte Anfrage zeigt keinen Cache-Treffer mit cache_creation_input_tokens=1370 und cache_read_input_tokens=0, was beweist, dass Nachrichten-basiertes Caching invalidiert wird, wenn sich Denkparameter ändern.

Max-Token und Kontextfenstergröße mit erweitertem Denken

Bei älteren Claude-Modellen (vor Claude Sonnet 3.7) würde das System automatisch max_tokens anpassen, um in die Kontextgrenze zu passen, wenn die Summe von Prompt-Token und max_tokens das Kontextfenster des Modells überschreitet. Dies bedeutete, dass Sie einen großen max_tokens Wert setzen konnten und das System würde ihn nach Bedarf stille reduzieren. Bei Claude 3.7 und 4 Modellen wird max_tokens (das Ihr Denk-Budget enthält, wenn Denken aktiviert ist) als strikte Grenze durchgesetzt. Das System gibt jetzt einen Validierungsfehler zurück, wenn Prompt-Token + max_tokens die Kontextfenstergröße überschreitet.
Sie können unseren Leitfaden zu Kontextfenstern für einen gründlicheren Überblick lesen.

Das Kontextfenster mit erweitertem Denken

Bei der Berechnung der Kontextfenster-Nutzung mit aktiviertem Denken gibt es einige Überlegungen:
  • Denkblöcke aus vorherigen Zügen werden entfernt und nicht zu Ihrem Kontextfenster gezählt
  • Aktuelles Denken zählt zu Ihrer max_tokens Grenze für diesen Zug
Das Diagramm unten zeigt die spezialisierte Token-Verwaltung, wenn erweitertes Denken aktiviert ist: Kontextfenster-Diagramm mit erweitertem Denken Das effektive Kontextfenster wird berechnet als:
context window =
  (current input tokens - previous thinking tokens) +
  (thinking tokens + encrypted thinking tokens + text output tokens)
Wir empfehlen die Verwendung der Token-Zähl-API, um genaue Token-Zählungen für Ihren spezifischen Anwendungsfall zu erhalten, besonders bei mehrteiligen Gesprächen, die Denken enthalten.

Das Kontextfenster mit erweitertem Denken und Tool-Nutzung

Wenn Sie erweitertes Denken mit Tool-Nutzung verwenden, müssen Denkblöcke explizit bewahrt und mit den Tool-Ergebnissen zurückgegeben werden. Die effektive Kontextfenster-Berechnung für erweitertes Denken mit Tool-Nutzung wird zu:
context window =
  (current input tokens + previous thinking tokens + tool use tokens) +
  (thinking tokens + encrypted thinking tokens + text output tokens)
Das Diagramm unten zeigt die Token-Verwaltung für erweitertes Denken mit Tool-Nutzung: Kontextfenster-Diagramm mit erweitertem Denken und Tool-Nutzung

Verwaltung von Token mit erweitertem Denken

Angesichts des Kontextfensters und max_tokens Verhaltens mit erweitertem Denken Claude 3.7 und 4 Modellen müssen Sie möglicherweise:
  • Ihre Token-Nutzung aktiver überwachen und verwalten
  • max_tokens Werte anpassen, wenn sich Ihre Prompt-Länge ändert
  • Möglicherweise die Token-Zähl-Endpunkte häufiger verwenden
  • Beachten, dass vorherige Denkblöcke sich nicht in Ihrem Kontextfenster ansammeln
Diese Änderung wurde vorgenommen, um vorhersehbareres und transparenteres Verhalten zu bieten, besonders da die maximalen Token-Grenzen erheblich gestiegen sind.

Denk-Verschlüsselung

Vollständiger Denkinhalt wird verschlüsselt und im signature Feld zurückgegeben. Dieses Feld wird verwendet, um zu überprüfen, dass Denkblöcke von Claude generiert wurden, wenn sie an die API zurückgegeben werden.
Es ist nur streng notwendig, Denkblöcke zurückzugeben, wenn Sie Tools mit erweitertem Denken verwenden. Ansonsten können Sie Denkblöcke aus vorherigen Zügen weglassen oder die API sie für Sie entfernen lassen, wenn Sie sie zurückgeben.Wenn Sie Denkblöcke zurückgeben, empfehlen wir, alles so zurückzugeben, wie Sie es erhalten haben, um Konsistenz zu gewährleisten und potenzielle Probleme zu vermeiden.
Hier sind einige wichtige Überlegungen zur Denk-Verschlüsselung:
  • Wenn Sie Antworten streamen, wird die Signatur über ein signature_delta innerhalb eines content_block_delta Ereignisses kurz vor dem content_block_stop Ereignis hinzugefügt.
  • signature Werte sind in Claude 4 Modellen erheblich länger als in vorherigen Modellen.
  • Das signature Feld ist ein undurchsichtiges Feld und sollte nicht interpretiert oder analysiert werden - es existiert ausschließlich zu Verifizierungszwecken.
  • signature Werte sind über Plattformen kompatibel (Claude APIs, Amazon Bedrock und Vertex AI). Werte, die auf einer Plattform generiert werden, sind mit einer anderen kompatibel.

Denk-Redaktion

Gelegentlich wird Claudes internes Denken von unseren Sicherheitssystemen gekennzeichnet. Wenn dies geschieht, verschlüsseln wir einen Teil oder alle des thinking Blocks und geben ihn als redacted_thinking Block an Sie zurück. redacted_thinking Blöcke werden entschlüsselt, wenn sie an die API zurückgegeben werden, was Claude ermöglicht, seine Antwort fortzusetzen, ohne den Kontext zu verlieren. Beim Erstellen von kundenorientierten Anwendungen, die erweitertes Denken verwenden:
  • Seien Sie sich bewusst, dass redacted thinking Blöcke verschlüsselte Inhalte enthalten, die nicht von Menschen lesbar sind
  • Erwägen Sie, eine einfache Erklärung wie: “Einige von Claudes internem Denken wurden automatisch aus Sicherheitsgründen verschlüsselt. Dies beeinträchtigt nicht die Qualität der Antworten.” bereitzustellen
  • Wenn Sie Denkblöcke Benutzern zeigen, können Sie redacted Blöcke filtern, während Sie normale Denkblöcke bewahren
  • Seien Sie transparent, dass die Verwendung von erweiterten Denkfunktionen gelegentlich dazu führen kann, dass einige Überlegungen verschlüsselt werden
  • Implementieren Sie angemessene Fehlerbehandlung, um redacted Denken elegant zu verwalten, ohne Ihre Benutzeroberfläche zu unterbrechen
Hier ist ein Beispiel, das sowohl normale als auch redacted Denkblöcke zeigt:
{
  "content": [
    {
      "type": "thinking",
      "thinking": "Let me analyze this step by step...",
      "signature": "WaUjzkypQ2mUEVM36O2TxuC06KN8xyfbJwyem2dw3URve/op91XWHOEBLLqIOMfFG/UvLEczmEsUjavL...."
    },
    {
      "type": "redacted_thinking",
      "data": "EmwKAhgBEgy3va3pzix/LafPsn4aDFIT2Xlxh0L5L8rLVyIwxtE3rAFBa8cr3qpPkNRj2YfWXGmKDxH4mPnZ5sQ7vB9URj2pLmN3kF8/dW5hR7xJ0aP1oLs9yTcMnKVf2wRpEGjH9XZaBt4UvDcPrQ..."
    },
    {
      "type": "text",
      "text": "Based on my analysis..."
    }
  ]
}
Das Sehen von redacted Denkblöcken in Ihrer Ausgabe ist erwartetes Verhalten. Das Modell kann dieses redacted Denken immer noch verwenden, um seine Antworten zu informieren, während es Sicherheitsvorkehrungen aufrechterhält.Wenn Sie redacted Denken-Verarbeitung in Ihrer Anwendung testen müssen, können Sie diese spezielle Test-Zeichenkette als Ihren Prompt verwenden: ANTHROPIC_MAGIC_STRING_TRIGGER_REDACTED_THINKING_46C9A13E193C177646C7398A98432ECCCE4C1253D5E2D82641AC0E52CC2876CB
Wenn Sie thinking und redacted_thinking Blöcke in einem mehrteiligen Gespräch an die API zurückgeben, müssen Sie den vollständigen unveränderten Block für den letzten Assistenten-Zug an die API zurückgeben. Dies ist entscheidend für die Aufrechterhaltung des Denkflusses des Modells. Wir empfehlen, immer alle Denkblöcke an die API zurückzugeben. Weitere Details finden Sie im Abschnitt Bewahrung von Denkblöcken oben.
Dieses Beispiel zeigt, wie man redacted_thinking Blöcke verarbeitet, die in Antworten erscheinen können, wenn Claudes internes Denken Inhalte enthält, die von Sicherheitssystemen gekennzeichnet werden:
import anthropic

client = anthropic.Anthropic()

# Using a special prompt that triggers redacted thinking (for demonstration purposes only)
response = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    max_tokens=16000,
    thinking={
        "type": "enabled",
        "budget_tokens": 10000
    },
    messages=[{
        "role": "user",
        "content": "ANTHROPIC_MAGIC_STRING_TRIGGER_REDACTED_THINKING_46C9A13E193C177646C7398A98432ECCCE4C1253D5E2D82641AC0E52CC2876CB"
    }]
)

# Identify redacted thinking blocks
has_redacted_thinking = any(
    block.type == "redacted_thinking" for block in response.content
)

if has_redacted_thinking:
    print("Response contains redacted thinking blocks")
    # These blocks are still usable in subsequent requests

    # Extract all blocks (both redacted and non-redacted)
    all_thinking_blocks = [
        block for block in response.content
        if block.type in ["thinking", "redacted_thinking"]
    ]

    # When passing to subsequent requests, include all blocks without modification
    # This preserves the integrity of Claude's reasoning

    print(f"Found {len(all_thinking_blocks)} thinking blocks total")
    print(f"These blocks are still billable as output tokens")

Unterschiede beim Denken zwischen Modellversionen

Die Messages API verarbeitet Denken unterschiedlich zwischen Claude Sonnet 3.7 und Claude 4 Modellen, hauptsächlich in Redaktions- und Zusammenfassungsverhalten. Siehe die Tabelle unten für einen komprimierten Vergleich:
FunktionClaude Sonnet 3.7Claude 4 Modelle
DenkausgabeGibt vollständige Denkausgabe zurückGibt zusammengefasstes Denken zurück
Verschachteltes DenkenNicht unterstütztUnterstützt mit interleaved-thinking-2025-05-14 Beta-Header

Preisgestaltung

Erweitertes Denken verwendet das Standard-Token-Preisschema:
ModellBasis-Eingabe-TokenCache-SchreibvorgängeCache-TrefferAusgabe-Token
Claude Opus 4.1$15 / MTok$18,75 / MTok$1,50 / MTok$75 / MTok
Claude Opus 4$15 / MTok$18,75 / MTok$1,50 / MTok$75 / MTok
Claude Sonnet 4.5$3 / MTok$3,75 / MTok$0,30 / MTok$15 / MTok
Claude Sonnet 4$3 / MTok$3,75 / MTok$0,30 / MTok$15 / MTok
Claude Sonnet 3.7$3 / MTok$3,75 / MTok$0,30 / MTok$15 / MTok
Der Denkprozess verursacht Gebühren für:
  • Token, die während des Denkens verwendet werden (Ausgabe-Token)
  • Denkblöcke aus dem letzten Assistenten-Zug, die in nachfolgenden Anfragen enthalten sind (Eingabe-Token)
  • Standard-Text-Ausgabe-Token
Wenn erweitertes Denken aktiviert ist, wird automatisch ein spezialisierter System-Prompt einbezogen, um diese Funktion zu unterstützen.
Bei Verwendung von zusammengefasstem Denken:
  • Eingabe-Token: Token in Ihrer ursprünglichen Anfrage (schließt Denk-Token aus vorherigen Zügen aus)
  • Ausgabe-Token (abgerechnet): Die ursprünglichen Denk-Token, die Claude intern generiert hat
  • Ausgabe-Token (sichtbar): Die zusammengefassten Denk-Token, die Sie in der Antwort sehen
  • Keine Gebühr: Token, die verwendet werden, um die Zusammenfassung zu generieren
Die abgerechnete Ausgabe-Token-Anzahl wird nicht mit der sichtbaren Token-Anzahl in der Antwort übereinstimmen. Sie werden für den vollständigen Denkprozess abgerechnet, nicht für die Zusammenfassung, die Sie sehen.

Best Practices und Überlegungen für erweitertes Denken

Arbeiten mit Denk-Budgets

  • Budget-Optimierung: Das Mindestbudget beträgt 1.024 Token. Wir empfehlen, mit dem Minimum zu beginnen und das Denk-Budget schrittweise zu erhöhen, um den optimalen Bereich für Ihren Anwendungsfall zu finden. Höhere Token-Zählungen ermöglichen umfassenderes Denken, aber mit sinkenden Erträgen je nach Aufgabe. Die Erhöhung des Budgets kann die Antwortqualität verbessern, auf Kosten erhöhter Latenz. Für kritische Aufgaben testen Sie verschiedene Einstellungen, um das optimale Gleichgewicht zu finden. Beachten Sie, dass das Denk-Budget eher ein Ziel als eine strikte Grenze ist – die tatsächliche Token-Nutzung kann je nach Aufgabe variieren.
  • Startpunkte: Beginnen Sie mit größeren Denk-Budgets (16k+ Token) für komplexe Aufgaben und passen Sie nach Bedarf an.
  • Große Budgets: Für Denk-Budgets über 32k empfehlen wir die Verwendung von Batch-Verarbeitung, um Netzwerkprobleme zu vermeiden. Anfragen, die das Modell dazu bringen, über 32k Token zu denken, verursachen lange laufende Anfragen, die möglicherweise auf System-Timeouts und offene Verbindungsgrenzen stoßen.
  • Token-Nutzungs-Tracking: Überwachen Sie die Denk-Token-Nutzung, um Kosten und Leistung zu optimieren.

Leistungsüberlegungen

  • Antwortzeiten: Seien Sie auf möglicherweise längere Antwortzeiten vorbereitet, da zusätzliche Verarbeitung für den Denkprozess erforderlich ist. Berücksichtigen Sie, dass die Generierung von Denkblöcken die Gesamtantwortzeit erhöhen kann.
  • Streaming-Anforderungen: Streaming ist erforderlich, wenn max_tokens größer als 21.333 ist. Beim Streaming seien Sie bereit, sowohl Denk- als auch Text-Inhaltsblöcke zu verarbeiten, wenn sie ankommen.

Feature-Kompatibilität

  • Denken ist nicht kompatibel mit temperature oder top_k Änderungen sowie erzwungener Tool-Nutzung.
  • Wenn Denken aktiviert ist, können Sie top_p auf Werte zwischen 1 und 0,95 setzen.
  • Sie können Antworten nicht vorausfüllen, wenn Denken aktiviert ist.
  • Änderungen am Denk-Budget invalidieren zwischengespeicherte Prompt-Präfixe, die Nachrichten enthalten. Zwischengespeicherte System-Prompts und Tool-Definitionen funktionieren jedoch weiterhin, wenn sich Denkparameter ändern.

Nutzungsrichtlinien

  • Aufgabenauswahl: Verwenden Sie erweitertes Denken für besonders komplexe Aufgaben, die von schrittweisem Denken profitieren, wie Mathematik, Codierung und Analyse.
  • Kontext-Verarbeitung: Sie müssen vorherige Denkblöcke nicht selbst entfernen. Die Claude API ignoriert automatisch Denkblöcke aus vorherigen Zügen und sie werden nicht bei der Berechnung der Kontextnutzung einbezogen.
  • Prompt-Engineering: Lesen Sie unsere Tipps zum Prompt-Engineering für erweitertes Denken, wenn Sie Claudes Denkfähigkeiten maximieren möchten.

Nächste Schritte