Was this page helpful?
This feature is eligible for Zero Data Retention (ZDR). When your organization has a ZDR arrangement, data sent through this feature is not stored after the API response is returned.
Für die meisten Anwendungsfälle ist serverseitige Komprimierung die primäre Strategie zur Verwaltung des Kontexts in langfristigen Gesprächen. Die Strategien auf dieser Seite sind nützlich für spezifische Szenarien, in denen Sie eine präzisere Kontrolle darüber benötigen, welche Inhalte gelöscht werden.
Die Kontextbearbeitung ermöglicht es Ihnen, selektiv spezifische Inhalte aus der Gesprächshistorie zu löschen, während sie wächst. Über die Optimierung von Kosten und die Einhaltung von Grenzen hinaus geht es darum, aktiv zu kuratieren, was Claude sieht: Kontext ist eine endliche Ressource mit abnehmenden Erträgen, und irrelevante Inhalte beeinträchtigen den Fokus des Modells. Die Kontextbearbeitung gibt Ihnen eine präzise Laufzeitkontrolle über diese Kuration. Für die breiteren Prinzipien hinter der Kontextverwaltung siehe Effektive Kontextentwicklung. Diese Seite behandelt:
| Ansatz | Wo es läuft | Strategien | Wie es funktioniert |
|---|---|---|---|
| Serverseitig | API | Werkzeugergebnis-Löschen (clear_tool_uses_20250919)Thinking-Block-Löschen ( clear_thinking_20251015) | Wird angewendet, bevor der Prompt Claude erreicht. Löscht spezifische Inhalte aus der Gesprächshistorie. Jede Strategie kann unabhängig konfiguriert werden. |
| Client-seitig | SDK | Komprimierung | Verfügbar in Python, TypeScript und Ruby SDKs bei Verwendung von tool_runner. Generiert eine Zusammenfassung und ersetzt die vollständige Gesprächshistorie. Siehe Client-seitige Komprimierung unten. |
Die Kontextbearbeitung befindet sich in der Beta-Phase mit Unterstützung für Werkzeugergebnis-Löschen und Thinking-Block-Löschen. Um sie zu aktivieren, verwenden Sie den Beta-Header context-management-2025-06-27 in Ihren API-Anfragen.
Teilen Sie Feedback zu dieser Funktion über das Feedback-Formular.
Die Strategie clear_tool_uses_20250919 löscht Werkzeugergebnisse, wenn der Gesprächskontext über Ihren konfigurierten Schwellenwert hinauswächst. Dies ist besonders nützlich für agentenbasierte Workflows mit intensiver Werkzeugnutzung. Ältere Werkzeugergebnisse (wie Dateiinhalte oder Suchergebnisse) werden nicht mehr benötigt, sobald Claude sie verarbeitet hat.
Wenn aktiviert, löscht die API automatisch die ältesten Werkzeugergebnisse in chronologischer Reihenfolge. Die API ersetzt jedes gelöschte Ergebnis durch Platzhaltertext, damit Claude weiß, dass es entfernt wurde. Standardmäßig werden nur Werkzeugergebnisse gelöscht. Sie können optional sowohl Werkzeugergebnisse als auch Werkzeugaufrufe (die Werkzeugnutzungsparameter) löschen, indem Sie clear_tool_inputs auf true setzen.
Die Strategie clear_thinking_20251015 verwaltet thinking-Blöcke in Gesprächen, wenn Extended Thinking aktiviert ist. Diese Strategie gibt Ihnen Kontrolle über die Thinking-Beibehaltung: Sie können wählen, mehr Thinking-Blöcke zu behalten, um die Reasoning-Kontinuität zu wahren, oder sie aggressiver zu löschen, um Kontextraum zu sparen.
Standardverhalten: Wenn Extended Thinking ohne Konfiguration der Strategie clear_thinking_20251015 aktiviert ist, behält die API automatisch nur die Thinking-Blöcke aus dem letzten Assistent-Turn bei (entspricht keep: {type: "thinking_turns", value: 1}).
Um Cache-Treffer zu maximieren, behalten Sie alle Thinking-Blöcke bei, indem Sie keep: "all" setzen.
Ein Assistent-Gesprächs-Turn kann mehrere Inhaltsblöcke enthalten (z. B. bei Werkzeugnutzung) und mehrere Thinking-Blöcke (z. B. mit verschachteltem Thinking).
Die Kontextbearbeitung wird serverseitig angewendet, bevor der Prompt Claude erreicht. Ihre Client-Anwendung behält die vollständige, unmodifizierte Gesprächshistorie. Sie müssen Ihren Client-Status nicht mit der bearbeiteten Version synchronisieren. Verwalten Sie Ihre vollständige Gesprächshistorie weiterhin lokal wie gewohnt.
Die Interaktion der Kontextbearbeitung mit Prompt-Caching variiert je nach Strategie:
Werkzeugergebnis-Löschen: Invalidiert zwischengespeicherte Prompt-Präfixe, wenn Inhalte gelöscht werden. Um dies zu berücksichtigen, löschen Sie genug Token, um die Cache-Invalidierung lohnenswert zu machen. Verwenden Sie den Parameter clear_at_least, um sicherzustellen, dass jedes Mal eine Mindestanzahl von Token gelöscht wird. Sie entstehen Cache-Schreibkosten jedes Mal, wenn Inhalte gelöscht werden, aber nachfolgende Anfragen können das neu zwischengespeicherte Präfix wiederverwenden.
Thinking-Block-Löschen: Wenn Thinking-Blöcke im Kontext behalten werden (nicht gelöscht), wird der Prompt-Cache beibehalten, was Cache-Treffer ermöglicht und Eingabe-Token-Kosten reduziert. Wenn Thinking-Blöcke gelöscht werden, wird der Cache an dem Punkt invalidiert, an dem das Löschen erfolgt. Konfigurieren Sie den Parameter keep basierend darauf, ob Sie die Cache-Leistung oder die Kontextfenster-Verfügbarkeit priorisieren möchten.
Die Kontextbearbeitung ist auf allen unterstützten Claude-Modellen verfügbar.
Die einfachste Möglichkeit, das Werkzeugergebnis-Löschen zu aktivieren, besteht darin, nur den Strategietyp anzugeben. Alle anderen Konfigurationsoptionen verwenden ihre Standardwerte:
Sie können das Verhalten des Werkzeugergebnis-Löschens mit zusätzlichen Parametern anpassen:
Aktivieren Sie das Clearing von Thinking-Blöcken, um den Kontext und das Prompt-Caching effektiv zu verwalten, wenn erweitertes Denken aktiviert ist:
Die Strategie clear_thinking_20251015 unterstützt die folgende Konfiguration:
| Konfigurationsoption | Standard | Beschreibung |
|---|---|---|
keep | {type: "thinking_turns", value: 1} | Definiert, wie viele aktuelle Assistent-Turns mit Thinking-Blöcken beibehalten werden sollen. Verwenden Sie {type: "thinking_turns", value: N}, wobei N > 0 sein muss, um die letzten N Turns zu behalten, oder "all", um alle Thinking-Blöcke zu behalten. |
Beispielkonfigurationen:
Thinking-Blöcke aus den letzten 3 Assistent-Turns beibehalten:
{
"type": "clear_thinking_20251015",
"keep": {
"type": "thinking_turns",
"value": 3
}
}Alle Thinking-Blöcke beibehalten (maximiert Cache-Treffer):
{
"type": "clear_thinking_20251015",
"keep": "all"
}Sie können das Clearing von Thinking-Blöcken und das Clearing von Tool-Ergebnissen zusammen verwenden:
Wenn Sie mehrere Strategien verwenden, muss die Strategie clear_thinking_20251015 zuerst im Array edits aufgelistet werden.
| Konfigurationsoption | Standard | Beschreibung |
|---|---|---|
trigger | 100.000 Input-Token | Definiert, wann die Kontextbearbeitungsstrategie aktiviert wird. Sobald der Prompt diesen Schwellenwert überschreitet, beginnt das Clearing. Sie können diesen Wert entweder in input_tokens oder tool_uses angeben. |
keep | 3 Tool-Verwendungen | Definiert, wie viele aktuelle Tool-Use/Result-Paare nach dem Clearing beibehalten werden sollen. Die API entfernt zuerst die ältesten Tool-Interaktionen und behält die neuesten bei. |
clear_at_least | Keine | Stellt sicher, dass jedes Mal, wenn die Strategie aktiviert wird, mindestens eine bestimmte Anzahl von Token gelöscht wird. Wenn die API nicht mindestens die angegebene Menge löschen kann, wird die Strategie nicht angewendet. Dies hilft zu bestimmen, ob das Clearing des Kontexts das Unterbrechen Ihres Prompt-Cache wert ist. |
exclude_tools | Keine | Liste von Tool-Namen, deren Tool-Verwendungen und Ergebnisse niemals gelöscht werden sollten. Nützlich zum Beibehalten wichtiger Kontexte. |
Sie können sehen, welche Kontextbearbeitungen auf Ihre Anfrage angewendet wurden, indem Sie das Antwortfeld context_management verwenden, zusammen mit hilfreichen Statistiken über den gelöschten Inhalt und die Input-Token.
{
"id": "msg_013Zva2CMHLNnXjNJJKqJ2EF",
"type": "message",
"role": "assistant",
"content": [
// ...
],
"usage": {
// ...
},
"context_management": {
"applied_edits": [
// Bei Verwendung von `clear_thinking_20251015`
{
"type": "clear_thinking_20251015",
"cleared_thinking_turns": 3,
"cleared_input_tokens": 15000
},
// Bei Verwendung von `clear_tool_uses_20250919`
{
"type": "clear_tool_uses_20250919",
"cleared_tool_uses": 8,
"cleared_input_tokens": 50000
}
]
}
}Bei Streaming-Antworten werden die Kontextbearbeitungen im finalen message_delta-Event enthalten sein:
{
"type": "message_delta",
"delta": {
"stop_reason": "end_turn",
"stop_sequence": null
},
"usage": {
"output_tokens": 1024
},
"context_management": {
"applied_edits": [
// ...
]
}
}Der Endpunkt zur Token-Zählung unterstützt Kontextmanagement, sodass Sie eine Vorschau erhalten können, wie viele Token Ihr Prompt nach Anwendung der Kontextbearbeitung verwendet.
{
"input_tokens": 25000,
"context_management": {
"original_input_tokens": 70000
}
}Die Antwort zeigt sowohl die endgültige Token-Anzahl nach Anwendung des Kontextmanagements (input_tokens) als auch die ursprüngliche Token-Anzahl vor dem Clearing (original_input_tokens).
Die Kontextbearbeitung kann mit dem Memory Tool kombiniert werden. Wenn sich Ihr Gesprächskontext dem konfigurierten Löschschwellenwert nähert, erhält Claude eine automatische Warnung, um wichtige Informationen zu bewahren. Dies ermöglicht Claude, Tool-Ergebnisse oder Kontext in seinen Memory-Dateien zu speichern, bevor sie aus dem Gesprächsverlauf gelöscht werden.
Diese Kombination ermöglicht es Ihnen:
Beispielsweise kann Claude in einem Dateibearbeitungs-Workflow, in dem Claude viele Operationen durchführt, abgeschlossene Änderungen in Memory-Dateien zusammenfassen, während der Kontext wächst. Wenn Tool-Ergebnisse gelöscht werden, behält Claude Zugriff auf diese Informationen durch sein Memory-System und kann effektiv weiterarbeiten.
Um beide Funktionen zusammen zu verwenden, aktivieren Sie sie in Ihrer API-Anfrage:
Für die vollständige Memory Tool-Referenz einschließlich Befehle und Beispiele siehe Memory Tool.
Anthropic empfiehlt Server-seitige Komprimierung gegenüber SDK-Komprimierung. Server-seitige Komprimierung verwaltet die Kontextverwaltung automatisch mit weniger Integrationskomplexität, besserer Token-Nutzungsberechnung und ohne Client-seitige Einschränkungen. Verwenden Sie SDK-Komprimierung nur, wenn Sie speziell Client-seitige Kontrolle über den Zusammenfassungsprozess benötigen.
Die Komprimierung ist in den Python-, TypeScript- und Ruby-SDKs verfügbar, wenn die tool_runner-Methode verwendet wird.
Die Komprimierung ist eine SDK-Funktion, die den Gesprächskontext automatisch verwaltet, indem Zusammenfassungen generiert werden, wenn die Token-Nutzung zu groß wird. Im Gegensatz zu Server-seitigen Kontextbearbeitungsstrategien, die Inhalte löschen, weist die Komprimierung Claude an, den Gesprächsverlauf zusammenzufassen, und ersetzt dann den vollständigen Verlauf durch diese Zusammenfassung. Dies ermöglicht Claude, an langfristigen Aufgaben zu arbeiten, die sonst das Kontextfenster überschreiten würden.
Wenn die Komprimierung aktiviert ist, überwacht das SDK die Token-Nutzung nach jeder Modellreaktion:
input_tokens + cache_creation_input_tokens + cache_read_input_tokens + output_tokens.<summary></summary>-Tags eingeschlossen ist.Fügen Sie compaction_control zu Ihrem tool_runner-Aufruf hinzu, um die automatische Zusammenfassung zu aktivieren, wenn die Token-Nutzung den Schwellenwert überschreitet.
Wenn das Gespräch wächst, sammelt sich der Nachrichtenverlauf an:
Vor der Komprimierung (nähert sich 100k Token):
[
{ "role": "user", "content": "Analyze all files and write a report..." },
{ "role": "assistant", "content": "I'll help. Let me start by reading..." },
{
"role": "user",
"content": [{ "type": "tool_result", "tool_use_id": "...", "content": "..." }]
},
{ "role": "assistant", "content": "Based on file1.txt, I see..." },
{
"role": "user",
"content": [{ "type": "tool_result", "tool_use_id": "...", "content": "..." }]
},
{ "role": "assistant", "content": "After analyzing file2.txt..." }
// ... 50 more exchanges like this ...
]Wenn Token den Schwellenwert überschreiten, fügt das SDK eine Zusammenfassungsanfrage ein und Claude generiert eine Zusammenfassung. Der gesamte Verlauf wird dann ersetzt:
Nach der Komprimierung (zurück zu ~2-3k Token):
[
{
"role": "assistant",
"content": "# Task Overview\nThe user requested analysis of directory files to produce a summary report...\n\n# Current State\nAnalyzed 52 files across 3 subdirectories. Key findings documented in report.md...\n\n# Important Discoveries\n- Configuration files use YAML format\n- Found 3 deprecated dependencies\n- Test coverage at 67%\n\n# Next Steps\n1. Analyze remaining files in /src/legacy\n2. Complete final report sections...\n\n# Context to Preserve\nUser prefers markdown format with executive summary first..."
}
]Claude setzt die Arbeit von dieser Zusammenfassung aus fort, als wäre es der ursprüngliche Gesprächsverlauf.
| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
enabled | boolean | Ja | - | Ob automatische Komprimierung aktiviert werden soll |
context_token_threshold | number | Nein | 100.000 | Token-Anzahl, bei der die Komprimierung ausgelöst wird |
model | string | Nein | Gleiches wie Hauptmodell | Modell zur Verwendung für die Zusammenfassungsgenerierung |
summary_prompt | string | Nein | Siehe unten | Benutzerdefinierte Aufforderung für die Zusammenfassungsgenerierung |
Der Schwellenwert bestimmt, wann die Komprimierung erfolgt. Ein niedrigerer Schwellenwert bedeutet häufigere Komprimierungen mit kleineren Kontextfenstern. Ein höherer Schwellenwert ermöglicht mehr Kontext, riskiert aber, Grenzen zu erreichen.
# More frequent compaction for memory-constrained scenarios
compaction_control = {"enabled": True, "context_token_threshold": 50000}
# Less frequent compaction when you need more context
compaction_control = {"enabled": True, "context_token_threshold": 150000}Sie können ein schnelleres oder günstigeres Modell für die Zusammenfassungsgenerierung verwenden:
compaction_control = {
"enabled": True,
"context_token_threshold": 100000,
"model": "claude-haiku-4-5",
}Sie können eine benutzerdefinierte Aufforderung für domänenspezifische Anforderungen bereitstellen. Ihre Aufforderung sollte Claude anweisen, seine Zusammenfassung in <summary></summary>-Tags einzuschließen.
compaction_control = {
"enabled": True,
"context_token_threshold": 100000,
"summary_prompt": """Summarize the research conducted so far, including:
- Sources consulted and key findings
- Questions answered and remaining unknowns
- Recommended next steps
Wrap your summary in <summary></summary> tags.""",
}Die integrierte Zusammenfassungsaufforderung weist Claude an, eine strukturierte Fortsetzungszusammenfassung zu erstellen, die Folgendes enthält:
Diese Struktur ermöglicht Claude, die Arbeit effizient fortzusetzen, ohne wichtigen Kontext zu verlieren oder Fehler zu wiederholen.
Die Komprimierung erfordert besondere Überlegung bei der Verwendung von Server-seitigen Tools wie Web Search oder Web Fetch.
Bei der Verwendung von Server-seitigen Tools kann das SDK die Token-Nutzung möglicherweise falsch berechnen, was dazu führt, dass die Komprimierung zum falschen Zeitpunkt ausgelöst wird.
Beispielsweise könnte die API-Antwort nach einer Web-Search-Operation Folgendes anzeigen:
{
"usage": {
"input_tokens": 63000,
"cache_read_input_tokens": 270000,
"output_tokens": 1400
}
}Das SDK berechnet die Gesamtnutzung als 63.000 + 270.000 = 333.000 Token. Der cache_read_input_tokens-Wert umfasst jedoch akkumulierte Lesevorgänge aus mehreren internen API-Aufrufen, die vom Server-seitigen Tool durchgeführt werden, nicht Ihren tatsächlichen Gesprächskontext. Ihr echter Kontextlänge könnte nur die 63.000 input_tokens sein, aber das SDK sieht 333k und löst die Komprimierung vorzeitig aus.
Workarounds:
Wenn das SDK die Komprimierung auslöst, während eine Tool-Use-Antwort ausstehend ist, entfernt es den Tool-Use-Block aus dem Nachrichtenverlauf, bevor die Zusammenfassung generiert wird. Claude gibt den Tool-Aufruf nach der Wiederaufnahme von der Zusammenfassung aus erneut aus, falls noch erforderlich.
Das Verständnis, wann die Komprimierung ausgelöst wird, hilft Ihnen, Schwellenwerte zu optimieren und das erwartete Verhalten zu überprüfen.
Gute Anwendungsfälle:
Weniger ideale Anwendungsfälle:
response = client.beta.messages.create(
model="claude-opus-4-7",
max_tokens=4096,
messages=[{"role": "user", "content": "Search for recent developments in AI"}],
tools=[{"type": "web_search_20250305", "name": "web_search"}],
betas=["context-management-2025-06-27"],
context_management={"edits": [{"type": "clear_tool_uses_20250919"}]},
)response = client.beta.messages.create(
model="claude-opus-4-7",
max_tokens=4096,
messages=[
{
"role": "user",
"content": "Create a simple command line calculator app using Python",
}
],
tools=[
{
"type": "text_editor_20250728",
"name": "str_replace_based_edit_tool",
"max_characters": 10000,
},
{"type": "web_search_20250305", "name": "web_search", "max_uses": 3},
],
betas=["context-management-2025-06-27"],
context_management={
"edits": [
{
"type": "clear_tool_uses_20250919",
# Trigger clearing when threshold is exceeded
"trigger": {"type": "input_tokens", "value": 30000},
# Number of tool uses to keep after clearing
"keep": {"type": "tool_uses", "value": 3},
# Optional: Clear at least this many tokens
"clear_at_least": {"type": "input_tokens", "value": 5000},
# Exclude these tools from being cleared
"exclude_tools": ["web_search"],
}
]
},
)response = client.beta.messages.create(
model="claude-opus-4-6",
max_tokens=16000,
messages=[...],
thinking={"type": "enabled", "budget_tokens": 10000},
betas=["context-management-2025-06-27"],
context_management={
"edits": [
{
"type": "clear_thinking_20251015",
"keep": {"type": "thinking_turns", "value": 2},
}
]
},
)response = client.beta.messages.create(
model="claude-opus-4-6",
max_tokens=16000,
messages=[...],
thinking={"type": "enabled", "budget_tokens": 10000},
tools=[...],
betas=["context-management-2025-06-27"],
context_management={
"edits": [
{
"type": "clear_thinking_20251015",
"keep": {"type": "thinking_turns", "value": 2},
},
{
"type": "clear_tool_uses_20250919",
"trigger": {"type": "input_tokens", "value": 50000},
"keep": {"type": "tool_uses", "value": 5},
},
]
},
)clear_tool_inputs | false | Steuert, ob die Tool-Call-Parameter zusammen mit den Tool-Ergebnissen gelöscht werden. Standardmäßig werden nur die Tool-Ergebnisse gelöscht, während Claudes ursprüngliche Tool-Aufrufe sichtbar bleiben. |
response = client.beta.messages.count_tokens(
model="claude-opus-4-7",
messages=[{"role": "user", "content": "Continue our conversation..."}],
tools=[...], # Your tool definitions
betas=["context-management-2025-06-27"],
context_management={
"edits": [
{
"type": "clear_tool_uses_20250919",
"trigger": {"type": "input_tokens", "value": 30000},
"keep": {"type": "tool_uses", "value": 5},
}
]
},
)
print(f"Original tokens: {response.context_management['original_input_tokens']}")
print(f"After clearing: {response.input_tokens}")
print(
f"Savings: {response.context_management['original_input_tokens'] - response.input_tokens} tokens"
)response = client.beta.messages.create(
model="claude-opus-4-7",
max_tokens=4096,
messages=[...],
tools=[
{"type": "memory_20250818", "name": "memory"},
# Your other tools
],
betas=["context-management-2025-06-27"],
context_management={"edits": [{"type": "clear_tool_uses_20250919"}]},
)