cache_control, um Kosten und Latenz zu senken, mit automatischem Caching oder expliziten Breakpoints mit 5-Minuten- oder 1-Stunden-TTLs.„Prompt caching" (Prompt-Caching) optimiert deine API-Nutzung, indem es das Fortsetzen ab bestimmten Präfixen in deinen Prompts ermöglicht. Dies reduziert die Verarbeitungszeit und Kosten für sich wiederholende Aufgaben oder Prompts mit gleichbleibenden Elementen erheblich.
Wie „zero data retention" (keine Datenspeicherung), oder ZDR, auf dieses Feature angewendet wird, erfährst du unter API und Datenspeicherung.
Es gibt zwei Möglichkeiten, Prompt-Caching zu aktivieren:
cache_control-Feld auf der obersten Ebene deiner Anfrage hinzu. Das System wendet den Cache-Breakpoint automatisch auf den letzten cachebaren Block an und verschiebt ihn nach vorne, wenn Gespräche wachsen. Am besten geeignet für Gespräche mit mehreren Runden, bei denen der wachsende Nachrichtenverlauf automatisch gecacht werden soll.cache_control direkt auf einzelnen Content-Blöcken für eine feingranulare Kontrolle darüber, was genau gecacht wird.Der einfachste Einstieg ist das automatische Caching:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
cache_control={"type": "ephemeral"},
system="You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.",
messages=[
{
"role": "user",
"content": "Analyze the major themes in 'Pride and Prejudice'.",
}
],
)
print(response.usage.model_dump_json())Beim automatischen Caching cacht das System alle Inhalte bis einschließlich des letzten cachebaren Blocks. Bei nachfolgenden Anfragen mit demselben Präfix werden gecachte Inhalte automatisch wiederverwendet.
Wenn du eine Anfrage mit aktiviertem Prompt-Caching sendest:
Dies ist besonders nützlich für:
Standardmäßig hat der Cache eine Lebensdauer von 5 Minuten. Der Cache wird ohne zusätzliche Kosten jedes Mal aktualisiert, wenn der gecachte Inhalt verwendet wird.
Wenn du feststellst, dass 5 Minuten zu kurz sind, bietet Anthropic auch eine Cache-Dauer von 1 Stunde gegen zusätzliche Kosten an.
Weitere Informationen findest du unter 1-Stunden-Cache-Dauer.
Prompt-Caching cacht das vollständige Präfix
Prompt-Caching bezieht sich auf den gesamten Prompt – tools, system und messages (in dieser Reihenfolge) bis einschließlich des mit cache_control gekennzeichneten Blocks.
Prompt-Caching führt eine neue Preisstruktur ein. Die folgende Tabelle zeigt den Preis pro Million Token für jedes unterstützte Modell:
| Modell | Basis-Input-Tokens | 5m-Cache-Schreibvorgänge | 1h-Cache-Schreibvorgänge | Cache-Treffer & -Aktualisierungen | Output-Tokens |
|---|---|---|---|---|---|
| Claude Fable 5 | $10 / MTok | $12.50 / MTok | $20 / MTok | $1 / MTok | $50 / MTok |
| Claude Mythos 5 (eingeschränkte Verfügbarkeit) | $10 / MTok | $12.50 / MTok | $20 / MTok | $1 / MTok | $50 / MTok |
| Claude Opus 5 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.8 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.7 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.6 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.5 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.1 (veraltet) | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
| Claude Opus 4 (eingestellt, außer auf Google Cloud) | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
| Claude Sonnet 5 bis zum 31. August 2026 | $2 / MTok | $2.50 / MTok | $4 / MTok | $0.20 / MTok | $10 / MTok |
| Claude Sonnet 5 ab dem 1. September 2026 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 4.6 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 4.5 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 4 (eingestellt, außer auf Bedrock und Google Cloud) | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Haiku 4.5 | $1 / MTok | $1.25 / MTok | $2 / MTok | $0.10 / MTok | $5 / MTok |
| Claude Haiku 3.5 (eingestellt, außer auf Bedrock und Google Cloud) | $0.80 / MTok | $1 / MTok | $1.60 / MTok | $0.08 / MTok | $4 / MTok |
Die vorherige Tabelle spiegelt die folgenden Preismultiplikatoren für Prompt-Caching wider:
Diese Multiplikatoren kombinieren sich mit anderen Preismodifikatoren wie dem Batch-API-Rabatt und der Datenresidenz. Siehe Preise für alle Details.
Prompt-Caching (sowohl automatisch als auch explizit) wird auf allen aktiven Claude-Modellen unterstützt.
Automatisches Caching ist die einfachste Möglichkeit, Prompt-Caching zu aktivieren. Anstatt cache_control auf einzelnen Content-Blöcken zu platzieren, füge ein einzelnes cache_control-Feld auf der obersten Ebene deines Anfrage-Bodys hinzu. Das System wendet den Cache-Breakpoint automatisch auf den letzten cachebaren Block an.
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
cache_control={"type": "ephemeral"},
system="You are a helpful assistant that remembers our conversation.",
messages=[
{"role": "user", "content": "My name is Alex. I work on machine learning."},
{
"role": "assistant",
"content": "Nice to meet you, Alex! How can I help with your ML work today?",
},
{"role": "user", "content": "What did I say I work on?"},
],
)
print(response.usage.model_dump_json())Beim automatischen Caching verschiebt sich der Cache-Punkt automatisch nach vorne, wenn Gespräche wachsen. Jede neue Anfrage cacht alles bis zum letzten cachebaren Block, und vorheriger Inhalt wird aus dem Cache gelesen.
| Anfrage | Inhalt | Cache-Verhalten |
|---|---|---|
| Anfrage 1 | System + User(1) + Asst(1) + User(2) ◀ Cache | Alles wird in den Cache geschrieben |
| Anfrage 2 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) ◀ Cache | System bis User(2) wird aus dem Cache gelesen; Asst(2) + User(3) werden in den Cache geschrieben |
| Anfrage 3 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) + Asst(3) + User(4) ◀ Cache | System bis User(3) wird aus dem Cache gelesen; Asst(3) + User(4) werden in den Cache geschrieben |
Der Cache-Breakpoint verschiebt sich automatisch zum letzten cachebaren Block in jeder Anfrage, sodass du keine cache_control-Markierungen aktualisieren musst, wenn das Gespräch wächst.
Standardmäßig verwendet automatisches Caching eine TTL von 5 Minuten. Du kannst eine TTL von 1 Stunde zum 2-fachen Basispreis für Input-Token angeben:
{ "cache_control": { "type": "ephemeral", "ttl": "1h" } }Automatisches Caching ist mit expliziten Cache-Breakpoints kompatibel. Bei gemeinsamer Verwendung nutzt der automatische Cache-Breakpoint einen der 4 verfügbaren Breakpoint-Slots.
So kannst du beide Ansätze kombinieren. Verwende zum Beispiel einen expliziten Breakpoint, um deinen System-Prompt zu cachen, während das automatische Caching das Gespräch übernimmt:
{
"model": "claude-opus-5",
"max_tokens": 1024,
"cache_control": { "type": "ephemeral" },
"system": [
{
"type": "text",
"text": "You are a helpful assistant.",
"cache_control": { "type": "ephemeral" }
}
],
"messages": [{ "role": "user", "content": "What are the key terms?" }]
}Automatisches Caching verwendet dieselbe zugrunde liegende Caching-Infrastruktur. Preise, Mindest-Token-Schwellenwerte, Anforderungen an die Kontextreihenfolge und das 20-Block-Lookback-Fenster gelten alle genauso wie bei expliziten Breakpoints.
cache_control mit derselben TTL hat, ist automatisches Caching ein No-op.cache_control mit einer anderen TTL hat, gibt die API einen 400-Fehler zurück.Automatisches Caching ist auf der Claude API, der Claude Platform on AWS, Google Cloud und Microsoft Foundry verfügbar. Amazon Bedrock unterstützt kein automatisches Caching.
Für mehr Kontrolle über das Caching kannst du cache_control direkt auf einzelnen Content-Blöcken platzieren. Dies ist nützlich, wenn du verschiedene Abschnitte cachen musst, die sich mit unterschiedlicher Häufigkeit ändern, oder eine feingranulare Kontrolle darüber benötigst, was genau gecacht wird.
Platziere statische Inhalte (Tool-Definitionen, Systemanweisungen, Kontext, Beispiele) am Anfang deines Prompts. Markiere das Ende des wiederverwendbaren Inhalts für das Caching mit dem cache_control-Parameter.
Cache-Präfixe werden in der folgenden Reihenfolge erstellt: tools, system, dann messages. Diese Reihenfolge bildet eine Hierarchie, bei der jede Ebene auf den vorherigen aufbaut.
Du kannst nur einen Cache-Breakpoint am Ende deines statischen Inhalts verwenden, und das System findet automatisch das längste Präfix, das eine vorherige Anfrage bereits in den Cache geschrieben hat. Zu verstehen, wie das funktioniert, hilft dir, deine Caching-Strategie zu optimieren.
Drei Kernprinzipien:
Cache-Writes erfolgen nur an deinem Breakpoint. Das Markieren eines Blocks mit cache_control schreibt genau einen Cache-Eintrag: einen Hash des Präfixes, das an diesem Block endet. Das System schreibt keine Einträge für frühere Positionen. Da der Hash kumulativ ist und alles bis einschließlich des Breakpoints abdeckt, erzeugt das Ändern eines beliebigen Blocks am oder vor dem Breakpoint bei der nächsten Anfrage einen anderen Hash.
Cache-Reads suchen rückwärts nach Einträgen, die vorherige Anfragen geschrieben haben. Bei jeder Anfrage berechnet das System den Präfix-Hash an deinem Breakpoint und prüft auf einen passenden Cache-Eintrag. Existiert keiner, geht es Block für Block rückwärts und prüft, ob der Präfix-Hash an jeder früheren Position mit etwas übereinstimmt, das bereits im Cache ist. Es sucht nach vorherigen Writes, nicht nach stabilem Inhalt.
Das Lookback-Fenster umfasst 20 Blöcke. Das System prüft höchstens 20 Positionen pro Breakpoint, wobei der Breakpoint selbst als erste zählt. Findet das System in diesem Fenster keinen passenden Eintrag, stoppt die Prüfung (oder wird ab dem nächsten expliziten Breakpoint fortgesetzt, falls vorhanden).
Beispiel: Lookback in einem wachsenden Gespräch
Du fügst in jeder Runde neue Blöcke hinzu und setzt cache_control auf den letzten Block jeder Anfrage:
Häufiger Fehler: Breakpoint auf Inhalt, der sich bei jeder Anfrage ändert
Dein Prompt hat einen großen statischen Systemkontext (Blöcke 1 bis 5), gefolgt von einem anfragespezifischen Block, der einen Zeitstempel und die Benutzernachricht enthält (Block 6). Du setzt cache_control auf Block 6:
Der Lookback findet keinen stabilen Inhalt hinter deinem Breakpoint und cacht ihn. Er findet Einträge, die vorherige Anfragen bereits geschrieben haben, und Writes erfolgen nur an Breakpoints. Verschiebe cache_control auf Block 5, den letzten Block, der über Anfragen hinweg gleich bleibt, und jede nachfolgende Anfrage liest das gecachte Präfix. Automatisches Caching tappt in dieselbe Falle: Es platziert den Breakpoint auf dem letzten cachebaren Block, der in dieser Struktur derjenige ist, der sich bei jeder Anfrage ändert. Verwende daher stattdessen einen expliziten Breakpoint auf Block 5.
Wichtigste Erkenntnis: Platziere cache_control auf dem letzten Block, dessen Präfix über die Anfragen hinweg identisch ist, die sich einen Cache teilen sollen. In einem wachsenden Gespräch funktioniert der letzte Block, solange jede Runde weniger als 20 Blöcke hinzufügt: Früherer Inhalt ändert sich nie, sodass der Lookback der nächsten Anfrage den vorherigen Write findet. Bei einem Prompt mit einem variierenden Suffix (Zeitstempel, anfragespezifischer Kontext, die eingehende Nachricht) platziere den Breakpoint am Ende des statischen Präfixes, nicht auf dem variierenden Block.
Du kannst bis zu 4 Cache-Breakpoints definieren, wenn du:
Wichtige Einschränkung: Der Lookback kann nur Einträge finden, die frühere Anfragen bereits geschrieben haben. Wenn ein wachsendes Gespräch deinen Breakpoint 20 oder mehr Blöcke über den letzten Write hinausschiebt, verfehlt ihn das Lookback-Fenster. Füge von Anfang an einen zweiten Breakpoint näher an dieser Position hinzu, damit sich dort ein Write ansammelt, bevor du ihn brauchst.
Cache-Breakpoints selbst verursachen keine Kosten. Dir werden nur berechnet:
Das Hinzufügen weiterer cache_control-Breakpoints erhöht deine Kosten nicht – du zahlst weiterhin denselben Betrag basierend darauf, welcher Inhalt tatsächlich gecacht und gelesen wird. Die Breakpoints geben dir die Kontrolle darüber, welche Abschnitte unabhängig voneinander gecacht werden können.
Auf der Claude API, der Claude Platform on AWS, Google Cloud und Microsoft Foundry beträgt die minimale cachebare Prompt-Länge:
Diese Mindestwerte gelten auf jeder Plattform, auf der das jeweilige Modell verfügbar ist.
Kürzere Prompts können nicht gecacht werden, selbst wenn sie mit cache_control markiert sind. Alle Anfragen, weniger als diese Anzahl von Token zu cachen, werden ohne Caching verarbeitet, und es wird kein Fehler zurückgegeben. Um zu überprüfen, ob ein Prompt gecacht wurde, prüfe die Usage-Felder der Antwort: Wenn sowohl cache_creation_input_tokens als auch cache_read_input_tokens 0 sind, wurde der Prompt nicht gecacht (wahrscheinlich, weil er die Mindestlängenanforderung nicht erfüllt hat).
Wenn dein Prompt knapp unter dem Minimum für dein Modell und deine Plattform liegt, lohnt es sich oft, den gecachten Inhalt zu erweitern, um den Schwellenwert zu erreichen. Cache-Reads kosten deutlich weniger als nicht gecachte Input-Token, sodass das Erreichen des Minimums die Kosten für häufig wiederverwendete Prompts senken kann.
Bedrock ist eine von AWS betriebene Plattform. Auf Bedrock findest du in der Bedrock-Dokumentation zum Prompt-Caching die geltenden modellspezifischen Mindestwerte, das Fehlerverhalten und die Namen der Usage-Felder.
Beachte bei gleichzeitigen Anfragen, dass ein Cache-Eintrag erst verfügbar wird, nachdem die erste Antwort begonnen hat. Wenn du Cache-Treffer für parallele Anfragen benötigst, warte auf die erste Antwort, bevor du nachfolgende Anfragen sendest.
Derzeit ist „ephemeral" der einzige unterstützte Cache-Typ, der standardmäßig eine Lebensdauer von 5 Minuten hat.
Die meisten Blöcke in der Anfrage können gecacht werden. Dazu gehören:
tools-Arraysystem-Arraymessages.content-Array, sowohl für User- als auch für Assistant-Rundenmessages.content-Array, in User-Rundenmessages.content-Array, sowohl in User- als auch in Assistant-RundenJedes dieser Elemente kann gecacht werden, entweder automatisch oder durch Markierung mit cache_control.
Während die meisten Anfrage-Blöcke gecacht werden können, gibt es einige Ausnahmen:
Thinking-Blöcke können nicht direkt mit cache_control gecacht werden. Thinking-Blöcke KÖNNEN jedoch zusammen mit anderen Inhalten gecacht werden, wenn sie in vorherigen Assistant-Runden erscheinen. Wenn sie auf diese Weise gecacht werden, zählen sie beim Lesen aus dem Cache als Input-Token.
Sub-Content-Blöcke (wie Zitate) selbst können nicht direkt gecacht werden. Cache stattdessen den übergeordneten Block.
Im Fall von Zitaten können die übergeordneten Dokument-Content-Blöcke, die als Quellmaterial für Zitate dienen, gecacht werden. So kannst du Prompt-Caching effektiv mit Zitaten verwenden, indem du die Dokumente cachst, auf die sich die Zitate beziehen werden.
Leere Textblöcke können nicht gecacht werden.
Änderungen an gecachten Inhalten können einen Teil oder den gesamten Cache ungültig machen.
Wie unter Strukturierung deines Prompts beschrieben, folgt der Cache der Hierarchie: tools → system → messages. Änderungen auf jeder Ebene machen diese Ebene und alle nachfolgenden Ebenen ungültig.
Die folgende Tabelle zeigt, welche Teile des Caches durch verschiedene Arten von Änderungen ungültig werden. ✘ bedeutet, dass der Cache ungültig wird, während ✓ bedeutet, dass der Cache gültig bleibt.
| Was sich ändert | Tools-Cache | System-Cache | Messages-Cache | Auswirkung |
|---|---|---|---|---|
| Tool-Definitionen | ✘ | ✘ | ✘ | Das Ändern von Tool-Definitionen (Namen, Beschreibungen, Parameter) macht den gesamten Cache ungültig |
| Websuche-Umschalter | ✓ | ✘ | ✘ | Das Aktivieren/Deaktivieren der Websuche ändert den System-Prompt |
| Zitate-Umschalter | ✓ | ✘ | ✘ | Das Aktivieren/Deaktivieren von Zitaten ändert den System-Prompt |
| Geschwindigkeitseinstellung | ✓ | ✘ | ✘ | Das Umschalten zwischen speed: "fast" und Standardgeschwindigkeit macht System- und Message-Caches ungültig |
| Tool-Auswahl | ✓ | ✓ | ✘ | Änderungen am tool_choice-Parameter betreffen nur Message-Blöcke |
| Bilder | ✓ | ✓ | ✘ | Das Hinzufügen/Entfernen von Bildern an beliebiger Stelle im Prompt betrifft Message-Blöcke |
| Thinking-Parameter | Modellspezifisch | Modellspezifisch | ✘ | Die Thinking-Konfiguration (Modus und budget_tokens im erweiterten Modus) wird in den Prompt gerendert, daher macht eine Änderung immer Message-Blöcke ungültig; Tool- und System-Caches werden ebenfalls ungültig bei Modellen, die die Konfiguration vor ihnen rendern. Siehe Thinking und Prompt-Caching. |
| Effort-Einstellung | Modellspezifisch | Modellspezifisch | ✘ | Das Ändern des output_config.effort-Werts macht immer Message-Blöcke ungültig, mit demselben modellspezifischen Effekt auf Tool- und System-Caches wie bei Thinking-Parametern. Das explizite Setzen von effort auf den Standardwert des Modells ist gleichbedeutend mit dem Weglassen und macht nichts ungültig. |
| Nicht-Tool-Ergebnisse, die an Anfragen mit erweitertem Denken übergeben werden | ✓ | ✓ | Modellspezifisch | Auf Opus 4.5+ und Sonnet 4.6+ werden Thinking-Blöcke standardmäßig beibehalten, sodass der Cache gültig bleibt (✓). Auf früheren Opus-/Sonnet-Modellen und allen Haiku-Modellen werden alle zuvor gecachten Thinking-Blöcke aus dem Kontext entfernt, und alle Nachrichten, die auf diese Thinking-Blöcke folgen, werden aus dem Cache entfernt (✘). Weitere Details findest du unter Caching mit Thinking-Blöcken. |
Auf Claude Fable 5, Claude Mythos 5, Claude Opus 4.8 und Claude Opus 5 kannst du mitten in einem Gespräch eine neue Systemanweisung hinzufügen, ohne die System- oder Message-Caches ungültig zu machen. Hänge eine {"role": "system"}-Nachricht an messages an, anstatt das system-Feld auf oberster Ebene zu bearbeiten, damit das gecachte Präfix unverändert bleibt. Diese Funktion ist auf Claude Sonnet 5 nicht verfügbar; verwende stattdessen das system-Feld auf oberster Ebene. Siehe Systemnachrichten mitten im Gespräch.
Überwache die Cache-Leistung mit diesen API-Antwortfeldern innerhalb von usage in der Antwort (oder im message_start-Event bei Streaming):
cache_creation_input_tokens: Anzahl der Token, die beim Erstellen eines neuen Eintrags in den Cache geschrieben wurden.cache_read_input_tokens: Anzahl der Token, die für diese Anfrage aus dem Cache abgerufen wurden.input_tokens: Anzahl der Input-Token, die nicht aus dem Cache gelesen oder zum Erstellen eines Caches verwendet wurden (also Token nach dem letzten Cache-Breakpoint).Die Token-Aufschlüsselung verstehen
Das Feld input_tokens repräsentiert nur die Token, die nach dem letzten Cache-Breakpoint in deiner Anfrage kommen – nicht alle Input-Token, die du gesendet hast.
So berechnest du die gesamten Input-Token:
total_input_tokens = cache_read_input_tokens + cache_creation_input_tokens + input_tokensRäumliche Erklärung:
cache_read_input_tokens = Token vor dem Breakpoint, die bereits gecacht sind (Reads)cache_creation_input_tokens = Token vor dem Breakpoint, die jetzt gecacht werden (Writes)input_tokens = Token nach deinem letzten Breakpoint (nicht für den Cache geeignet)Beispiel: Wenn du eine Anfrage mit 100.000 Token gecachtem Inhalt (aus dem Cache gelesen), 0 Token neuem Inhalt, der gecacht wird, und 50 Token in deiner Benutzernachricht (nach dem Cache-Breakpoint) hast:
cache_read_input_tokens: 100.000cache_creation_input_tokens: 0input_tokens: 50Dies ist wichtig, um sowohl Kosten als auch Ratenlimits zu verstehen, da input_tokens bei effektiver Nutzung des Cachings typischerweise viel kleiner ist als dein gesamter Input.
Bei der Verwendung von Thinking mit Prompt-Caching haben Thinking-Blöcke ein besonderes Verhalten:
Automatisches Caching zusammen mit anderen Inhalten: Obwohl Thinking-Blöcke nicht explizit mit cache_control markiert werden können, werden sie als Teil des Anfrageinhalts gecacht, wenn du nachfolgende API-Aufrufe mit Tool-Ergebnissen machst. Dies geschieht häufig bei der Tool-Nutzung, wenn du Thinking-Blöcke zurückgibst, um das Gespräch fortzusetzen.
Zählung der Input-Token: Wenn Thinking-Blöcke aus dem Cache gelesen werden, zählen sie als Input-Token in deinen Nutzungsmetriken. Dies ist wichtig für die Kostenberechnung und das Token-Budgeting.
Muster der Cache-Invalidierung:
cache_control-Markierungen aufWeitere Details zur Cache-Invalidierung findest du unter Was den Cache ungültig macht.
Beispiel mit Tool-Nutzung:
Request 1: User: "What's the weather in Paris?"
Response: [thinking_block_1] + [tool_use block 1]
Request 2:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True]
Response: [thinking_block_2] + [text block 2]
# Request 2 caches its request content (not the response)
# The cache includes: user message, thinking_block_1, tool_use block 1, and tool_result_1
Request 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]
# On earlier Opus/Sonnet and all Haiku models, non-tool-result user block causes prior thinking blocks to be stripped; on Opus 4.5+/Sonnet 4.6+ they are keptAuf früheren Opus-/Sonnet-Modellen und allen Haiku-Modellen werden an diesem Punkt alle vorherigen Thinking-Blöcke aus dem Kontext entfernt. Auf Opus 4.5+ und Sonnet 4.6+ werden vorherige Thinking-Blöcke standardmäßig beibehalten und bleiben Teil des gecachten Präfixes.
Ausführlichere Informationen findest du unter Thinking und Prompt-Caching.
Seit dem 5. Februar 2026 verwendet Prompt-Caching eine Isolierung auf Workspace-Ebene anstelle einer Isolierung auf Organisationsebene. Caches sind pro Workspace isoliert, was die Datentrennung zwischen Workspaces innerhalb derselben Organisation gewährleistet. Dies gilt für die Claude API, die Claude Platform on AWS und Microsoft Foundry; Bedrock und Google Cloud behalten die Cache-Isolierung auf Organisationsebene bei. Wenn du mehrere Workspaces verwendest, überprüfe deine Caching-Strategie, um diesen Unterschied zu berücksichtigen.
Organisations- und Workspace-Isolierung: Caches sind zwischen Organisationen isoliert. Verschiedene Organisationen teilen sich niemals Caches, selbst wenn sie identische Prompts verwenden. Seit dem 5. Februar 2026 sind Caches auf der Claude API, der Claude Platform on AWS und Microsoft Foundry auch pro Workspace innerhalb einer Organisation isoliert; Bedrock und Google Cloud verwenden weiterhin nur die Isolierung auf Organisationsebene.
Exakte Übereinstimmung: Cache-Treffer erfordern zu 100 % identische Prompt-Segmente, einschließlich aller Texte und Bilder bis einschließlich des mit Cache-Control markierten Blocks.
Generierung von Output-Token: Prompt-Caching hat keinen Einfluss auf die Generierung von Output-Token. Die Antwort, die du erhältst, ist identisch mit der, die du ohne Prompt-Caching erhalten würdest.
Um die Leistung des Prompt-Cachings zu optimieren:
Passe deine Prompt-Caching-Strategie an dein Szenario an:
Bei unerwartetem Verhalten:
Cache-Diagnose (Beta) lässt die API aufeinanderfolgende Anfragen vergleichen und genau melden, wo das Prompt-Präfix abgewichen ist, was viele der Schritte in dieser Liste automatisch übernimmt.
cache_control-Markierungen an denselben Stellen befindentool_choice, die Bildnutzung, die Thinking-Konfiguration und output_config.effort zwischen Aufrufen konsistent bleibentool_use-Content-Blöcken eine stabile Reihenfolge haben, da einige Sprachen (zum Beispiel Swift, Go) die Schlüsselreihenfolge bei der JSON-Konvertierung randomisieren, was Caches zerstörtÄnderungen an tool_choice oder das Vorhandensein/Fehlen von Bildern an beliebiger Stelle im Prompt machen den Cache ungültig und erfordern die Erstellung eines neuen Cache-Eintrags. Weitere Details zur Cache-Invalidierung findest du unter Was den Cache ungültig macht.
Wenn du feststellst, dass 5 Minuten zu kurz sind, bietet Anthropic auch eine Cache-Dauer von 1 Stunde gegen zusätzliche Kosten an.
Die 1-Stunden-Cache-Dauer ist auf der Claude API, Amazon Bedrock, Amazon Bedrock (Opus 4.6 und früher), der Claude Platform on AWS, Google Cloud und Microsoft Foundry verfügbar.
Um den erweiterten Cache zu verwenden, füge ttl in die cache_control-Definition ein, etwa so:
"cache_control": {
"type": "ephemeral",
"ttl": "1h"
}Die Antwort enthält detaillierte Cache-Informationen wie die folgenden:
{
"usage": {
"input_tokens": 2048,
"cache_read_input_tokens": 1800,
"cache_creation_input_tokens": 248,
"output_tokens": 503,
"cache_creation": {
"ephemeral_5m_input_tokens": 148,
"ephemeral_1h_input_tokens": 100
}
}
}Beachte, dass das aktuelle Feld cache_creation_input_tokens der Summe der Werte im cache_creation-Objekt entspricht.
Wenn du ephemeral_5m_input_tokens-Writes siehst, die du nicht angefordert hast, während du Server-Tools wie die Websuche verwendest, siehe Tool-Nutzung mit Prompt-Caching.
Wenn du Prompts hast, die in regelmäßigen Abständen verwendet werden (also System-Prompts, die häufiger als alle 5 Minuten verwendet werden), verwende weiterhin den 5-Minuten-Cache, da dieser weiterhin ohne zusätzliche Kosten aktualisiert wird.
Der 1-Stunden-Cache eignet sich am besten für die folgenden Szenarien:
Der 5-Minuten- und der 1-Stunden-Cache verhalten sich in Bezug auf die Latenz gleich. Du wirst im Allgemeinen eine verbesserte Time-to-First-Token bei langen Dokumenten sehen.
Du kannst sowohl 1-Stunden- als auch 5-Minuten-Cache-Controls in derselben Anfrage verwenden, jedoch mit einer wichtigen Einschränkung: Cache-Einträge mit längerer TTL müssen vor kürzeren TTLs erscheinen (das heißt, ein 1-Stunden-Cache-Eintrag muss vor allen 5-Minuten-Cache-Einträgen erscheinen).
Beim Mischen von TTLs bestimmt die API drei Abrechnungspositionen in deinem Prompt:
A: Die Token-Anzahl beim höchsten Cache-Treffer (oder 0, wenn keine Treffer vorliegen).B: Die Token-Anzahl beim höchsten 1-Stunden-cache_control-Block nach A (oder gleich A, wenn keiner existiert).C: Die Token-Anzahl beim letzten cache_control-Block.Wenn B und/oder C größer als A sind, sind sie zwangsläufig Cache-Misses, da A der höchste Cache-Treffer ist.
Dir wird berechnet:
A.(B - A).(C - B).Hier sind drei Beispiele. Dies zeigt die Input-Token von 3 Anfragen, von denen jede unterschiedliche Cache-Treffer und Cache-Misses hat. Jede hat dadurch einen anderen berechneten Preis, der in den farbigen Kästen dargestellt ist.
Das Vorwärmen des Caches ermöglicht es dir, deinen System-Prompt oder deine Tool-Definitionen in den Prompt-Cache zu laden, bevor ein Benutzer eine echte Anfrage auslöst. Dies eliminiert die Latenzstrafe durch Cache-Misses bei der ersten Benutzerinteraktion und reduziert die Time-to-First-Token (TTFT) für latenzempfindliche Anwendungen.
Setze max_tokens: 0 in deiner Anfrage. Die API liest deinen Prompt in das Modell ein und schreibt den Cache an jedem cache_control-Breakpoint und kehrt dann sofort zurück, ohne eine Ausgabe zu generieren. Die Antwort hat ein leeres content-Array, stop_reason: "max_tokens" und einen vollständig befüllten usage-Block.
Platziere den cache_control-Breakpoint auf dem letzten Block, der mit der Folgeanfrage geteilt wird (typischerweise dein System-Prompt oder deine Tool-Definitionen), nicht auf der Platzhalter-User-Nachricht. Andernfalls wird der Cache-Eintrag auf den Platzhalter geschlüsselt und die Folgeanfrage trifft ihn nicht. Verwende auch dieselbe Thinking-Konfiguration und denselben output_config.effort wie deine Folgeanfragen: Diese Werte werden in den Prompt gerendert (siehe Was den Cache invalidiert), sodass ein Pre-Warm mit einer anderen Konfiguration einen Eintrag schreiben kann, den dein echter Traffic nie trifft. Das bedeutet, dass du einen expliziten Cache-Breakpoint anstelle von automatischem Caching verwenden solltest, da automatisches Caching den Breakpoint auf den letzten Block setzt, der hier der Platzhalter ist. Die Platzhalter-User-Nachricht kann ein beliebiger String mit Inhalt sein, der nicht nur aus Leerzeichen besteht (die Beispiele hier verwenden "warmup"); ihr Inhalt wird in das Modell eingelesen, aber nie beantwortet.
Eine Pre-Warm-Anfrage verursacht eine Cache-Write-Gebühr, wenn das Präfix noch nicht gecacht ist, genau wie jede andere Anfrage. Prüfe usage.cache_creation_input_tokens in der Antwort, um zu bestätigen, dass ein Write stattgefunden hat. Es werden null Output-Token berechnet.
client = anthropic.Anthropic()
# Führe dies aus, bevor Nutzer eintreffen, um den gemeinsamen System-Prompt-Cache aufzuwärmen.
prewarm = client.messages.create(
model="claude-opus-5",
max_tokens=0,
system=[
{
"type": "text",
"text": "You are an expert software engineer with deep knowledge of distributed systems...",
"cache_control": {"type": "ephemeral"},
}
],
messages=[{"role": "user", "content": "warmup"}],
)
print(prewarm.stop_reason) # "max_tokens"
print(prewarm.content) # []
print(prewarm.usage)Die API gibt ein leeres content-Array zurück:
{
"id": "msg_01XFDUDYJgAACzvnptvVoYEL",
"type": "message",
"role": "assistant",
"content": [],
"model": "claude-opus-5",
"stop_reason": "max_tokens",
"stop_sequence": null,
"usage": {
"input_tokens": 8,
"cache_creation_input_tokens": 5120,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 5120,
"ephemeral_1h_input_tokens": 0
},
"iterations": [
{
"input_tokens": 8,
"output_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 5120,
"cache_creation": {
"ephemeral_5m_input_tokens": 5120,
"ephemeral_1h_input_tokens": 0
},
"type": "message"
}
],
"output_tokens": 0,
"service_tier": "standard",
"inference_geo": "global"
}
}Sende eine Pre-Warm-Anfrage, wenn deine Anwendung startet (oder in einem geplanten Intervall), und sende dann echte Benutzeranfragen, nachdem der Pre-Warm abgeschlossen ist:
client = anthropic.Anthropic()
SYSTEM_PROMPT = [
{
"type": "text",
"text": "You are an expert software engineer with deep knowledge of distributed systems...",
"cache_control": {"type": "ephemeral"},
}
]
def prewarm_cache() -> None:
"""Call this at application startup or on a scheduled interval."""
client.messages.create(
model="claude-opus-5",
max_tokens=0,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": "warmup"}],
)
def respond(user_message: str) -> anthropic.types.Message:
"""The real user request; benefits from a warm cache."""
return client.messages.create(
model="claude-opus-5",
max_tokens=1024,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": user_message}],
)
# Wärme den Cache vor, bevor Nutzer-Traffic eintrifft.
prewarm_cache()
# Später, wenn der Nutzer eine Nachricht sendet, ist das System-Prompt-Präfix bereits gecacht.
response = respond("How do I implement a binary search tree?")
for block in response.content:
if block.type == "text":
print(block.text)Beachte, dass die Cache-TTL weiterhin gilt. Für den standardmäßigen 5-Minuten-Cache sende mindestens alle 5 Minuten eine neue Pre-Warm-Anfrage, um den Cache warm zu halten. Für längere Lücken zwischen Benutzeranfragen verwende stattdessen die 1-Stunden-Cache-Dauer.
Eine max_tokens: 0-Anfrage wird mit einem invalid_request_error abgelehnt, wenn eines der folgenden gesetzt ist, da jedes davon eine Ausgabe impliziert, die ein Null-Token-Budget nicht erzeugen kann:
stream: truethinking.type: "enabled")output_config.format)tool_choice mit {"type": "tool", ...} oder {"type": "any"}max_tokens: 0 wird auch innerhalb einer Message Batches-Anfrage abgelehnt. Pre-Warming zielt auf die Time-to-First-Token ab, was für die Batch-Verarbeitung nicht relevant ist, und ein während der Batch-Verarbeitung geschriebener Cache-Eintrag würde wahrscheinlich ablaufen, bevor die Folgeanfrage ausgeführt wird.
Bevor max_tokens: 0 verfügbar war, verwendeten einige Anwendungen max_tokens: 1-Warm-up-Aufrufe, um denselben Effekt zu erzielen. Der max_tokens: 0-Ansatz wird bevorzugt: Es wird keine Ausgabe erzeugt, sodass es keine Ein-Token-Antwort zum Verwerfen gibt, keine Output-Token berechnet werden und die Absicht der Anfrage eindeutig ist.
Um dir den Einstieg in Prompt-Caching zu erleichtern, bietet das Prompt-Caching-Cookbook detaillierte Beispiele und Best Practices.
Die folgenden Code-Snippets zeigen verschiedene Prompt-Caching-Muster. Diese Beispiele demonstrieren, wie du Caching in verschiedenen Szenarien implementierst, und helfen dir, die praktischen Anwendungen dieser Funktion zu verstehen:
Prompt-Caching (sowohl automatisch als auch explizit) ist ZDR-fähig. Anthropic speichert weder den Rohtext deiner Prompts noch Claudes Antworten.
KV-Cache-Repräsentationen (Key-Value) und kryptografische Hashes von gecachten Inhalten werden nur im Arbeitsspeicher gehalten und nicht persistent gespeichert. Gecachte Einträge haben eine Mindestlebensdauer von 5 Minuten (Standard) oder 1 Stunde (erweitert), danach werden sie zeitnah, wenn auch nicht sofort, gelöscht. Cache-Einträge sind zwischen Organisationen isoliert und, auf der Claude API, Claude Platform auf AWS und Microsoft Foundry, zwischen Workspaces innerhalb einer Organisation.
Für die ZDR-Fähigkeit aller Funktionen siehe API und Datenspeicherung.
Was this page helpful?