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.
Diese Funktion ist für Zero Data Retention (ZDR) qualifiziert. Wenn deine Organisation eine ZDR-Vereinbarung hat, werden Daten, die über diese Funktion gesendet werden, nicht gespeichert, nachdem die API-Antwort zurückgegeben wurde.
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 Konversationen wachsen. Am besten geeignet für mehrstufige Konversationen, 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-4-8",
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 wird der gecachte Inhalt 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.
Falls dir 5 Minuten zu kurz sind, bietet Anthropic auch eine 1-Stunden-Cache-Dauer 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-Token | 5-Min.-Cache-Schreibvorgänge | 1-Std.-Cache-Schreibvorgänge | Cache-Treffer & -Aktualisierungen | Output-Token |
|---|---|---|---|---|---|
| Claude Fable 5 | $10 / MTok | $12.50 / MTok | $20 / MTok | $1 / MTok | $50 / MTok |
| Claude Mythos 5 (begrenzte Verfügbarkeit) | $10 / MTok | $12.50 / MTok | $20 / MTok | $1 / MTok | $50 / 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 (veraltet) | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / 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 (veraltet) | $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 Vertex AI) | $0.80 / MTok | $1 / MTok | $1.60 / MTok | $0.08 / MTok | $4 / MTok |
Die obige 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 vollständige Details.
Prompt-Caching (sowohl automatisch als auch explizit) wird auf allen aktiven Claude-Modellen unterstützt.
Automatisches Caching ist der einfachste Weg, Prompt-Caching zu aktivieren. Anstatt cache_control auf einzelnen Content-Blöcken zu platzieren, fügst du ein einzelnes cache_control-Feld auf der obersten Ebene deines Request-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-4-8",
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 bewegt sich der Cache-Punkt automatisch nach vorne, wenn Konversationen 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) aus Cache gelesen; Asst(2) + User(3) in Cache geschrieben |
| Anfrage 3 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) + Asst(3) + User(4) ◀ Cache | System bis User(3) aus Cache gelesen; Asst(3) + User(4) in Cache geschrieben |
Der Cache-Breakpoint bewegt sich automatisch zum letzten cachebaren Block in jeder Anfrage, sodass du keine cache_control-Markierungen aktualisieren musst, wenn die Konversation wächst.
Standardmäßig verwendet automatisches Caching eine 5-Minuten-TTL. Du kannst eine 1-Stunden-TTL 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 belegt der automatische Cache-Breakpoint einen der 4 verfügbaren Breakpoint-Slots.
So kannst du beide Ansätze kombinieren. Verwende beispielsweise einen expliziten Breakpoint, um deinen System-Prompt zu cachen, während automatisches Caching die Konversation übernimmt:
{
"model": "claude-opus-4-8",
"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 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, Claude Platform on AWS und Microsoft Foundry (Beta) verfügbar. Bedrock und Vertex AI unterstützen 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 unterschiedlich häufig ändern, oder wenn du 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 folgender 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 frühere Anfrage bereits in den Cache geschrieben hat. Zu verstehen, wie das funktioniert, hilft dir, deine Caching-Strategie zu optimieren.
Drei Grundprinzipien:
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 an oder vor dem Breakpoint bei der nächsten Anfrage einen anderen Hash.
Cache-Reads suchen rückwärts nach Einträgen, die frühere 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 früheren 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 beim nächsten expliziten Breakpoint fortgesetzt, falls vorhanden).
Beispiel: Lookback in einer wachsenden Konversation
Du hängst bei jedem Turn neue Blöcke an 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 mit einem Zeitstempel und der Benutzernachricht (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 frühere 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 also 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 einer wachsenden Konversation funktioniert der letzte Block, solange jeder Turn 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 eine wachsende Konversation deinen Breakpoint 20 oder mehr Blöcke über den letzten Write hinaus verschiebt, 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 wird nur Folgendes 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 lediglich Kontrolle darüber, welche Abschnitte unabhängig voneinander gecacht werden können.
Auf der Claude API, Claude Platform on AWS, Vertex AI und Microsoft Foundry (Beta) beträgt die minimale cachebare Prompt-Länge:
Die Modellverfügbarkeit variiert je nach Plattform, ebenso wie das Minimum für neu veröffentlichte Modelle: Auf Amazon Bedrock beträgt die minimale cachebare Prompt-Länge für Claude Fable 5 und Claude Mythos 5 1.024 Token.
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 in 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. Für Bedrock findest du in der Bedrock-Dokumentation zum Prompt-Caching die modellspezifischen Mindestwerte, das Fehlerverhalten und die Namen der Usage-Felder, die dort gelten.
Beachte bei gleichzeitigen Anfragen, dass ein Cache-Eintrag erst verfügbar wird, nachdem die erste Antwort begonnen hat. Wenn du Cache-Hits 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 Assistant-Turnsmessages.content-Array, in User-Turnsmessages.content-Array, sowohl in User- als auch Assistant-TurnsJedes dieser Elemente kann gecacht werden, entweder automatisch oder durch Markierung mit cache_control.
Während die meisten Request-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 anderem Inhalt gecacht werden, wenn sie in vorherigen Assistant-Turns erscheinen. Wenn sie auf diese Weise gecacht werden, ZÄHLEN sie als Input-Token, wenn sie aus dem Cache gelesen werden.
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. Dies ermöglicht es dir, Prompt-Caching effektiv mit Zitaten zu verwenden, indem du die Dokumente cachst, auf die Zitate verweisen werden.
Leere Textblöcke können nicht gecacht werden.
Änderungen an gecachtem Inhalt können einen Teil oder den gesamten Cache invalidieren.
Wie in Strukturierung deines Prompts beschrieben, folgt der Cache der Hierarchie: tools → system → messages. Änderungen auf jeder Ebene invalidieren diese Ebene und alle nachfolgenden Ebenen.
Die folgende Tabelle zeigt, welche Teile des Caches durch verschiedene Arten von Änderungen invalidiert werden. ✘ zeigt an, dass der Cache invalidiert wird, während ✓ anzeigt, 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) invalidiert den gesamten Cache |
| Websuche-Umschaltung | ✓ | ✘ | ✘ | Das Aktivieren/Deaktivieren der Websuche ändert den System-Prompt |
| Zitate-Umschaltung | ✓ | ✘ | ✘ | Das Aktivieren/Deaktivieren von Zitaten ändert den System-Prompt |
| Speed-Einstellung | ✓ | ✘ | ✘ | Das Wechseln zwischen speed: "fast" und Standardgeschwindigkeit invalidiert System- und Message-Caches |
| Tool-Auswahl | ✓ | ✓ | ✘ | Änderungen am tool_choice-Parameter betreffen nur Message-Blöcke |
| Bilder | ✓ | ✓ | ✘ | Das Hinzufügen/Entfernen von Bildern irgendwo im Prompt betrifft Message-Blöcke |
| Thinking-Parameter | ✓ | ✓ | ✘ | Änderungen an den Einstellungen für erweitertes Denken (aktivieren/deaktivieren, Budget) betreffen Message-Blöcke |
| Nicht-Tool-Ergebnisse, die an Anfragen mit erweitertem Denken übergeben werden | ✓ | ✓ | Modellabhängig | Bei Opus 4.5+ und Sonnet 4.6+ werden Thinking-Blöcke standardmäßig beibehalten, sodass der Cache gültig bleibt (✓). Bei 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. |
Bei Claude Opus 4.8 kannst du mitten in einer Konversation eine neue Systemanweisung hinzufügen, ohne die System- oder Message-Caches zu invalidieren. Hänge eine {"role": "system"}-Nachricht an messages an, anstatt das übergeordnete system-Feld zu bearbeiten, damit das gecachte Präfix unverändert bleibt. Siehe Systemnachrichten mitten in der Konversation.
Überwache die Cache-Performance mithilfe dieser API-Antwortfelder 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 weder aus dem Cache gelesen noch zum Erstellen eines Caches verwendet wurden (das heißt, 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.
Um die gesamten Input-Token zu berechnen:
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 Cache geeignet)Beispiel: Wenn du eine Anfrage mit 100.000 Token gecachtem Inhalt (aus 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 für das Verständnis sowohl der Kosten als auch der Ratenlimits, da input_tokens typischerweise viel kleiner als dein gesamter Input sein wird, wenn du Caching effektiv nutzt.
Bei der Verwendung von erweitertem Denken mit Prompt-Caching haben Thinking-Blöcke ein besonderes Verhalten:
Automatisches Caching zusammen mit anderem Inhalt: Während 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 die Konversation fortzusetzen.
Input-Token-Zählung: 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 Token-Budgetierung.
Cache-Invalidierungsmuster:
cache_control-Markierungen aufWeitere Details zur Cache-Invalidierung findest du unter Was den Cache invalidiert.
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 keptBei früheren Opus/Sonnet-Modellen und allen Haiku-Modellen werden an diesem Punkt alle vorherigen Thinking-Blöcke aus dem Kontext entfernt. Bei Opus 4.5+ und Sonnet 4.6+ werden frühere Thinking-Blöcke standardmäßig beibehalten und bleiben Teil des gecachten Präfixes.
Ausführlichere Informationen findest du in der Dokumentation zum erweiterten Denken.
Ab dem 5. Februar 2026 verwendet Prompt-Caching eine Isolation auf Workspace-Ebene anstelle einer Isolation auf Organisationsebene. Caches sind pro Workspace isoliert, was die Datentrennung zwischen Workspaces innerhalb derselben Organisation sicherstellt. Dies gilt für die Claude API, Claude Platform on AWS und Microsoft Foundry (Beta); Bedrock und Vertex AI behalten die Cache-Isolation auf Organisationsebene bei. Wenn du mehrere Workspaces verwendest, überprüfe deine Caching-Strategie, um diesen Unterschied zu berücksichtigen.
Organisations- und Workspace-Isolation: Caches sind zwischen Organisationen isoliert. Verschiedene Organisationen teilen niemals Caches, selbst wenn sie identische Prompts verwenden. Ab dem 5. Februar 2026 sind Caches auch pro Workspace innerhalb einer Organisation auf der Claude API, Claude Platform on AWS und Microsoft Foundry (Beta) isoliert; Bedrock und Vertex AI verwenden weiterhin nur die Isolation auf Organisationsebene.
Exakte Übereinstimmung: Cache-Hits erfordern 100 % identische Prompt-Segmente, einschließlich aller Texte und Bilder bis einschließlich des mit cache_control markierten Blocks.
Output-Token-Generierung: Prompt-Caching hat keinen Einfluss auf die Output-Token-Generierung. Die Antwort, die du erhältst, ist identisch mit dem, was du erhalten würdest, wenn Prompt-Caching nicht verwendet würde.
Um die Prompt-Caching-Performance 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 abdeckt.
cache_control-Markierungen an denselben Stellen sindtool_choice und Bildnutzung zwischen Aufrufen konsistent bleibentool_use-Content-Blöcken eine stabile Reihenfolge haben, da einige Sprachen (zum Beispiel Swift, Go) die Key-Reihenfolge bei der JSON-Konvertierung randomisieren und so Caches brechenÄnderungen an tool_choice oder das Vorhandensein/Fehlen von Bildern irgendwo im Prompt invalidieren den Cache, sodass ein neuer Cache-Eintrag erstellt werden muss. Weitere Details zur Cache-Invalidierung findest du unter Was den Cache invalidiert.
Falls dir 5 Minuten zu kurz sind, bietet Anthropic auch eine 1-Stunden-Cache-Dauer gegen zusätzliche Kosten an.
Die 1-Stunden-Cache-Dauer ist auf der Claude API, Claude Platform on AWS, Amazon Bedrock, Amazon Bedrock (Legacy), Vertex AI und Microsoft Foundry (Beta) verfügbar.
Um den erweiterten Cache zu verwenden, füge ttl in die cache_control-Definition wie folgt ein:
"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 Prompts hast, die in regelmäßigen Abständen verwendet werden (das heißt, 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 folgende Szenarien:
Der 5-Minuten- und der 1-Stunden-Cache verhalten sich in Bezug auf Latenz gleich. Du wirst generell eine verbesserte Time-to-First-Token für lange Dokumente 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-Hit (oder 0, wenn keine Hits).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-Hit ist.
Dir wird Folgendes berechnet:
A.(B - A).(C - B).Hier sind 3 Beispiele. Dies zeigt die Input-Token von 3 Anfragen, von denen jede unterschiedliche Cache-Hits und Cache-Misses hat. Jede hat eine unterschiedlich berechnete Preisgestaltung, die in den farbigen Kästchen dargestellt ist.
Cache-Vorwärmen (Pre-Warming) 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 Cache-Miss-Latenzstrafe 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, kehrt dann sofort zurück, ohne Output zu generieren. Die Antwort hat ein leeres content-Array, stop_reason: "max_tokens" und einen vollständig ausgefü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-Benutzernachricht. Andernfalls ist der Cache-Eintrag an den Platzhalter gebunden und die Folgeanfrage trifft ihn nicht. Das bedeutet, einen expliziten Cache-Breakpoint anstelle von automatischem Caching zu verwenden, da automatisches Caching den Breakpoint auf dem letzten Block platziert, der hier der Platzhalter ist. Die Platzhalter-Benutzernachricht kann ein beliebiger String mit Nicht-Whitespace-Inhalt sein (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 erfolgt ist. Null Output-Token werden berechnet.
client = anthropic.Anthropic()
# Führe dies aus, bevor Nutzer eintreffen, um den gemeinsamen System-Prompt-Cache vorzuwärmen.
prewarm = client.messages.create(
model="claude-opus-4-8",
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-4-8",
"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 das Pre-Warming 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-4-8",
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-4-8",
max_tokens=1024,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": user_message}],
)
# Wärme den Cache auf, 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?")
print(response.content[0].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 eine der folgenden Optionen gesetzt ist, da jede 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. Das Vorwärmen zielt auf die Zeit bis zum ersten 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-Aufwärmaufrufe, um denselben Effekt zu erzielen. Der max_tokens: 0-Ansatz wird bevorzugt: Es wird keine Ausgabe erzeugt, sodass es keine Ein-Token-Antwort zu verwerfen gibt, keine Ausgabe-Token berechnet werden und die Absicht der Anfrage eindeutig ist.
Um dir den Einstieg in das 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 die Antworten von Claude.
KV-Cache-Repräsentationen (Key-Value) und kryptografische Hashes von gecachten Inhalten werden nur im Arbeitsspeicher gehalten und nicht dauerhaft 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 – bei der Claude API, Claude Platform on AWS und Microsoft Foundry (Beta) – auch zwischen Workspaces innerhalb einer Organisation.
Informationen zur ZDR-Fähigkeit aller Funktionen findest du unter API und Datenspeicherung.
Was this page helpful?