Claude Platform Docs
MessagesKontextverwaltung

Prompt-Caching

Cache Prompt-Präfixe mit cache_control, um Kosten und Latenz zu senken – mit automatischem Caching oder expliziten Breakpoints mit TTLs von 5 Minuten oder 1 Stunde.

„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 die Kosten für sich wiederholende Aufgaben oder Prompts mit gleichbleibenden Elementen erheblich.

Es gibt zwei Möglichkeiten, Prompt-Caching zu aktivieren:

  • Automatisches Caching: Füge ein einzelnes cache_control-Feld auf der obersten Ebene deiner Anfrage hinzu. Das System wendet den Cache-Breakpoint automatisch auf den letzten cachefähigen Block an und verschiebt ihn nach vorne, wenn Gespräche wachsen. Am besten geeignet für mehrstufige Gespräche, bei denen der wachsende Nachrichtenverlauf automatisch gecacht werden soll.
  • Explizite Cache-Breakpoints: Platziere cache_control direkt auf einzelnen Inhaltsblöcken, um feingranular zu steuern, 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 cachefähigen Blocks. Bei nachfolgenden Anfragen mit demselben Präfix werden gecachte Inhalte automatisch wiederverwendet.


So funktioniert Prompt-Caching

Wenn du eine Anfrage mit aktiviertem Prompt-Caching sendest:

  1. Das System prüft, ob ein Prompt-Präfix bis zu einem angegebenen Cache-Breakpoint bereits aus einer kürzlich erfolgten Abfrage gecacht ist.
  2. Falls gefunden, verwendet es die gecachte Version, was Verarbeitungszeit und Kosten reduziert.
  3. Andernfalls verarbeitet es den vollständigen Prompt und cacht das Präfix, sobald die Antwort beginnt.

Dies ist besonders nützlich für:

  • Prompts mit vielen Beispielen
  • Große Mengen an Kontext oder Hintergrundinformationen
  • Sich wiederholende Aufgaben mit gleichbleibenden Anweisungen
  • Lange mehrstufige Gespräche

Standardmäßig hat der Cache eine Lebensdauer von 5 Minuten. Der Cache wird jedes Mal, wenn der gecachte Inhalt verwendet wird, ohne zusätzliche Kosten aufgefrischt.

Die Lebensdauer wird ab dem Beginn der Anfrage gemessen, die den Cache-Eintrag schreibt oder liest, nicht ab dem Ende ihrer Antwort. Die für die Generierung einer Antwort aufgewendete Zeit wird auf die Lebensdauer angerechnet: Wenn das Streaming einer Antwort 4 Minuten dauert, muss eine Folgeanfrage, die dasselbe gecachte Präfix wiederverwendet, innerhalb von etwa 1 Minute nach Abschluss dieser Antwort beginnen.


Preise

Prompt-Caching führt eine neue Preisstruktur ein. Die folgende Tabelle zeigt den Preis pro Million Token für jedes unterstützte Modell:

ModellBasis-Input-Token5m Cache-Schreibvorgänge1h Cache-SchreibvorgängeCache-Treffer und -AktualisierungenOutput-Token
Claude Fable 5.110 $ / MTok12,50 $ / MTok20 $ / MTok0,25 $ / MTok150 $ / MTok
Claude Mythos 5.1 (eingeschränkte Verfügbarkeit)10 $ / MTok12,50 $ / MTok20 $ / MTok0,25 $ / MTok150 $ / MTok
Claude Fable 510 $ / MTok12,50 $ / MTok20 $ / MTok1 $ / MTok50 $ / MTok
Claude Mythos 5 (eingeschränkte Verfügbarkeit)10 $ / MTok12,50 $ / MTok20 $ / MTok1 $ / MTok50 $ / MTok
Claude Opus 55 $ / MTok6,25 $ / MTok10 $ / MTok0,50 $ / MTok25 $ / MTok
Claude Opus 4.85 $ / MTok6,25 $ / MTok10 $ / MTok0,50 $ / MTok25 $ / MTok
Claude Opus 4.75 $ / MTok6,25 $ / MTok10 $ / MTok0,50 $ / MTok25 $ / MTok
Claude Opus 4.65 $ / MTok6,25 $ / MTok10 $ / MTok0,50 $ / MTok25 $ / MTok
Claude Opus 4.55 $ / MTok6,25 $ / MTok10 $ / MTok0,50 $ / MTok25 $ / MTok
Claude Opus 4.1 (eingestellt, außer auf Bedrock und Google Cloud)15 $ / MTok18,75 $ / MTok30 $ / MTok1,50 $ / MTok75 $ / MTok
Claude Opus 4 (eingestellt, außer auf Google Cloud)15 $ / MTok18,75 $ / MTok30 $ / MTok1,50 $ / MTok75 $ / MTok
Claude Sonnet 52 $ / MTok2,50 $ / MTok4 $ / MTok0,20 $ / MTok10 $ / MTok
Claude Sonnet 4.63 $ / MTok3,75 $ / MTok6 $ / MTok0,30 $ / MTok15 $ / MTok
Claude Sonnet 4.53 $ / MTok3,75 $ / MTok6 $ / MTok0,30 $ / MTok15 $ / MTok
Claude Sonnet 4 (eingestellt, außer auf Bedrock und Google Cloud)3 $ / MTok3,75 $ / MTok6 $ / MTok0,30 $ / MTok15 $ / MTok
Claude Haiku 4.51 $ / MTok1,25 $ / MTok2 $ / MTok0,10 $ / MTok5 $ / MTok
Claude Haiku 3.5 (eingestellt, außer auf Bedrock und Google Cloud)0,80 $ / MTok1 $ / MTok1,60 $ / MTok0,08 $ / MTok4 $ / MTok

1 Cache-Treffer und -Aktualisierungen bei Claude Fable 5.1 und Claude Mythos 5.1 werden mit dem 0,025-Fachen des Basis-Input-Preises berechnet. Alle anderen Modelle verwenden den Standard-Multiplikator von 0,1x.


Unterstützte Modelle

Prompt-Caching (sowohl automatisch als auch explizit) wird auf allen aktiven Claude-Modellen unterstützt.


Automatisches Caching

Automatisches Caching ist die einfachste Möglichkeit, Prompt-Caching zu aktivieren. Anstatt cache_control auf einzelnen Inhaltsblöcken zu platzieren, fügst du ein einzelnes cache_control-Feld auf der obersten Ebene deines Anfrage-Bodys hinzu. Das System wendet den Cache-Breakpoint automatisch auf den letzten cachefähigen 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())

So funktioniert automatisches Caching in mehrstufigen Gesprächen

Beim automatischen Caching verschiebt sich der Cache-Punkt automatisch nach vorne, wenn Gespräche wachsen. Jede neue Anfrage cacht alles bis zum letzten cachefähigen Block, und vorherige Inhalte werden aus dem Cache gelesen.

AnfrageInhaltCache-Verhalten
Anfrage 1System
+ User(1) + Asst(1)
+ User(2) ◀ cache
Alles wird in den Cache geschrieben
Anfrage 2System
+ User(1) + Asst(1)
+ User(2) + Asst(2)
+ User(3) ◀ cache
System bis User(2) aus dem Cache gelesen;
Asst(2) + User(3) in den Cache geschrieben
Anfrage 3System
+ User(1) + Asst(1)
+ User(2) + Asst(2)
+ User(3) + Asst(3)
+ User(4) ◀ cache
System bis User(3) aus dem Cache gelesen;
Asst(3) + User(4) in den Cache geschrieben

Der Cache-Breakpoint verschiebt sich in jeder Anfrage automatisch zum letzten cachefähigen Block, sodass du keine cache_control-Markierungen aktualisieren musst, wenn das Gespräch wächst.

TTL-Unterstützung

Standardmäßig verwendet automatisches Caching eine TTL von 5 Minuten. Du kannst eine TTL von 1 Stunde zum 2-fachen Basispreis für Eingabe-Token angeben:

{ "cache_control": { "type": "ephemeral", "ttl": "1h" } }

Kombination mit Caching auf Blockebene

Automatisches Caching ist mit expliziten Cache-Breakpoints kompatibel. Bei gemeinsamer Verwendung belegt der automatische Cache-Breakpoint einen der 4 verfügbaren Breakpoint-Plätze.

So kannst du beide Ansätze kombinieren. Verwende zum Beispiel einen expliziten Breakpoint, um deinen System-Prompt zu cachen, während automatisches 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?" }]
}

Was gleich bleibt

Automatisches Caching verwendet dieselbe zugrunde liegende Caching-Infrastruktur. Preise, Mindest-Token-Schwellen, Anforderungen an die Kontextreihenfolge und das Lookback-Fenster von 20 Blöcken gelten genauso wie bei expliziten Breakpoints.

Sonderfälle

  • Wenn der letzte Block bereits ein explizites cache_control mit derselben TTL hat, ist automatisches Caching ein No-op.
  • Wenn der letzte Block ein explizites cache_control mit einer anderen TTL hat, gibt die API einen 400-Fehler zurück.
  • Wenn bereits 4 explizite Breakpoints auf Blockebene existieren, gibt die API einen 400-Fehler zurück (keine Plätze mehr für automatisches Caching).
  • Wenn der letzte Block nicht als Ziel für einen automatischen Cache-Breakpoint geeignet ist, geht das System stillschweigend rückwärts, um den nächstgelegenen geeigneten Block zu finden. Wird keiner gefunden, wird das Caching übersprungen.

Explizite Cache-Breakpoints

Für mehr Kontrolle über das Caching kannst du cache_control direkt auf einzelnen Inhaltsblöcken platzieren. Das ist nützlich, wenn du verschiedene Abschnitte cachen musst, die sich unterschiedlich häufig ändern, oder wenn du feingranular steuern musst, was genau gecacht wird.

Strukturierung deines Prompts

Platziere statische Inhalte (Tool-Definitionen, Systemanweisungen, Kontext, Beispiele) am Anfang deines Prompts. Markiere das Ende des wiederverwendbaren Inhalts für das Caching mit dem Parameter cache_control.

Cache-Präfixe werden in der folgenden Reihenfolge erstellt: tools, system, dann messages. Diese Reihenfolge bildet eine Hierarchie, in der jede Ebene auf den vorherigen aufbaut.

So funktioniert die automatische Präfixprüfung

Du kannst nur einen einzigen 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:

  1. Cache-Schreibvorgänge 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 die Änderung eines beliebigen Blocks am oder vor dem Breakpoint bei der nächsten Anfrage einen anderen Hash.

  2. Cache-Lesevorgänge 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, ob ein passender Cache-Eintrag existiert. Falls keiner existiert, 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 liegt. Es sucht nach früheren Schreibvorgängen, nicht nach stabilem Inhalt.

  3. 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, endet die Prüfung (oder wird ab dem nächsten expliziten Breakpoint fortgesetzt, falls vorhanden). Auf der Claude API zählt eine Folge aufeinanderfolgender tool_use-Blöcke als eine Position, ebenso eine Folge aufeinanderfolgender tool_result-Blöcke, sodass ein Zug mit vielen parallelen Tool-Aufrufen den Eintrag der vorherigen Anfrage nicht allein aus dem Fenster schiebt.

Beispiel: Lookback in einem wachsenden Gespräch

Du hängst in jedem Zug neue Blöcke an und setzt cache_control auf den letzten Block jeder Anfrage:

  • Zug 1: 10 Blöcke, Breakpoint auf Block 10. Es existieren keine früheren Cache-Einträge. Das System schreibt einen Eintrag bei Block 10.
  • Zug 2: 15 Blöcke, Breakpoint auf Block 15. Block 15 hat keinen Eintrag, also geht das System zurück zu Block 10 und findet den Eintrag aus Zug 1. Cache-Treffer bei Block 10; das System verarbeitet nur die Blöcke 11 bis 15 neu und schreibt einen neuen Eintrag bei Block 15.
  • Zug 3: 35 Blöcke, Breakpoint auf Block 35. Das System prüft 20 Positionen (Blöcke 35 bis 16) und findet nichts. Der Eintrag aus Zug 2 bei Block 15 liegt eine Position außerhalb des Fensters, daher gibt es keinen Cache-Treffer. Das Hinzufügen eines zweiten Breakpoints bei Block 15 startet dort ein zweites Lookback-Fenster, das den Eintrag aus Zug 2 findet.

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:

  • Anfrage 1: Cache-Schreibvorgang bei Block 6. Der Hash enthält den Zeitstempel.
  • Anfrage 2: Der Zeitstempel unterscheidet sich, also unterscheidet sich der Präfix-Hash bei Block 6. Der Lookback geht durch die Blöcke 5, 4, 3, 2 und 1, aber das System hat an keiner dieser Positionen je einen Eintrag geschrieben. Kein Cache-Treffer. Du zahlst bei jeder Anfrage für einen neuen Cache-Schreibvorgang und erhältst nie einen Lesevorgang.

Der Lookback findet keinen stabilen Inhalt hinter deinem Breakpoint und cacht ihn. Er findet Einträge, die frühere Anfragen bereits geschrieben haben, und Schreibvorgänge 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 cachefähigen 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 jeder Zug weniger als 20 Blöcke hinzufügt: Frühere Inhalte ändern sich nie, sodass der Lookback der nächsten Anfrage den vorherigen Schreibvorgang findet. Bei einem Prompt mit variierendem Suffix (Zeitstempel, anfragespezifischer Kontext, die eingehende Nachricht) platziere den Breakpoint am Ende des statischen Präfixes, nicht auf dem variierenden Block.

Wann mehrere Breakpoints sinnvoll sind

Du kannst bis zu 4 Cache-Breakpoints definieren, wenn du:

  • Verschiedene Abschnitte cachen möchtest, die sich unterschiedlich häufig ändern (zum Beispiel ändern sich Tools selten, aber der Kontext wird täglich aktualisiert)
  • Mehr Kontrolle darüber haben möchtest, was genau gecacht wird
  • Einen Cache-Treffer sicherstellen möchtest, wenn ein wachsendes Gespräch deinen Breakpoint 20 oder mehr Blöcke über den letzten Cache-Schreibvorgang hinausschiebt

Kosten von Cache-Breakpoints verstehen

Cache-Breakpoints selbst verursachen keine Kosten. Dir wird nur Folgendes berechnet:

  • Cache-Schreibvorgänge: Wenn neuer Inhalt in den Cache geschrieben wird (25 % mehr als Basis-Eingabe-Token bei einer TTL von 5 Minuten)
  • Cache-Lesevorgänge: Wenn gecachter Inhalt verwendet wird (10 % des Basispreises für Eingabe-Token bzw. 2,5 % bei Claude Fable 5.1 und Claude Mythos 5.1)
  • Reguläre Eingabe-Token: Für alle nicht gecachten Inhalte

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 Kontrolle darüber, welche Abschnitte unabhängig voneinander gecacht werden können.


Caching-Strategien und Überlegungen

Cache-Einschränkungen

Auf der Claude API, Claude Platform on AWS, Google Cloud und Microsoft Foundry beträgt die minimale cachefähige 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 an 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änge nicht erreicht hat).

Wenn dein Prompt das Minimum für dein Modell und deine Plattform knapp verfehlt, lohnt es sich oft, den gecachten Inhalt zu erweitern, um die Schwelle zu erreichen. Cache-Lesevorgänge kosten deutlich weniger als nicht gecachte Eingabe-Token, sodass das Erreichen des Minimums die Kosten für häufig wiederverwendete Prompts senken kann.

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.

Was gecacht werden kann

Die meisten Blöcke in der Anfrage können gecacht werden. Dazu gehören:

  • Tools: Tool-Definitionen im tools-Array
  • Systemnachrichten: Inhaltsblöcke im system-Array
  • Textnachrichten: Inhaltsblöcke im messages.content-Array, sowohl in Benutzer- als auch in Assistenten-Zügen
  • Bilder & Dokumente: Inhaltsblöcke im messages.content-Array, in Benutzer-Zügen
  • Tool-Nutzung und Tool-Ergebnisse: Inhaltsblöcke im messages.content-Array, sowohl in Benutzer- als auch in Assistenten-Zügen

Jedes dieser Elemente kann gecacht werden, entweder automatisch oder durch Markierung mit cache_control.

Was nicht gecacht werden kann

Obwohl die meisten Anfrageblö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 Assistenten-Zügen erscheinen. Wenn sie auf diese Weise gecacht werden, zählen sie beim Lesen aus dem Cache als Eingabe-Token.

  • Unter-Inhaltsblöcke (wie Zitate) selbst können nicht direkt gecacht werden. Cache stattdessen den Block der obersten Ebene.

    Im Fall von Zitaten können die Dokument-Inhaltsblöcke der obersten Ebene, die als Quellmaterial für Zitate dienen, gecacht werden. So kannst du Prompt-Caching effektiv mit Zitaten nutzen, indem du die Dokumente cachst, auf die sich die Zitate beziehen.

  • Leere Textblöcke können nicht gecacht werden.

Was den Cache invalidiert

Änderungen an gecachten Inhalten können den Cache teilweise oder vollständig invalidieren.

Wie unter Strukturierung deines Prompts beschrieben, folgt der Cache der Hierarchie: toolssystemmessages. Änderungen auf einer Ebene invalidieren diese Ebene und alle nachfolgenden Ebenen.

Die folgende Tabelle zeigt, welche Teile des Caches durch verschiedene Arten von Änderungen invalidiert werden. ✘ bedeutet, dass der Cache invalidiert wird, während ✓ bedeutet, dass der Cache gültig bleibt.

Was sich ändertTools-CacheSystem-CacheMessages-CacheAuswirkung
Tool-DefinitionenDas Ändern von Tool-Definitionen (Namen, Beschreibungen, Parameter) invalidiert den gesamten Cache
Websuche-UmschalterDas Aktivieren/Deaktivieren der Websuche ändert den System-Prompt
Zitate-UmschalterDas Aktivieren/Deaktivieren von Zitaten ändert den System-Prompt
GeschwindigkeitseinstellungDas Wechseln zwischen speed: "fast" und Standardgeschwindigkeit invalidiert System- und Nachrichten-Caches
Tool-AuswahlÄnderungen am Parameter tool_choice betreffen nur Nachrichtenblöcke
BilderDas Hinzufügen/Entfernen von Bildern an beliebiger Stelle im Prompt betrifft Nachrichtenblöcke
Thinking-ParameterModellspezifischModellspezifischDie Thinking-Konfiguration (Modus und budget_tokens im erweiterten Modus) wird in den Prompt gerendert, sodass eine Änderung immer Nachrichtenblöcke invalidiert; Tool- und System-Caches werden ebenfalls auf Modellen invalidiert, die die Konfiguration vor ihnen rendern. Siehe Thinking und Prompt-Caching.
Effort-EinstellungModellspezifischModellspezifischDas Ändern des Werts von output_config.effort invalidiert immer Nachrichtenblöcke, mit derselben modellspezifischen Auswirkung auf Tool- und System-Caches wie bei Thinking-Parametern. Effort explizit auf den Standardwert des Modells zu setzen, ist gleichbedeutend mit dem Weglassen und invalidiert nicht. Auf Modellen, die Effort pro Nachricht unterstützen, lässt eine Effort-Änderung, die in einer role: "system"-Nachricht innerhalb von messages übermittelt wird, das gecachte Präfix intakt.
Nicht-Tool-Ergebnisse, die an Anfragen mit erweitertem Denken übergeben werdenModellspezifischAuf 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.
Verworfene Thinking-BlöckeWenn die API einen Thinking-Block von Claude Fable 5.1 oder Claude Mythos 5.1 verwirft, der bei dieser Anfrage nicht beibehalten wird (zum Beispiel einen, den du an ein früheres Modell zurückspielst), ändert sich das gecachte Präfix bei dieser Anfrage ab der Position dieses Blocks. Blöcke, die das empfangende Modell lesen kann und die unverändert zurückgegeben werden, halten den Cache intakt.

Cache-Leistung verfolgen

Überwache die Cache-Leistung 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 Eingabe-Token, die weder aus einem Cache gelesen noch zum Erstellen eines Caches verwendet wurden (das heißt, Token nach dem letzten Cache-Breakpoint).

Caching mit Thinking-Blöcken

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. Das passiert häufig bei der Tool-Nutzung, wenn du Thinking-Blöcke zurückgibst, um das Gespräch fortzusetzen.

Zählung der Eingabe-Token: Wenn Thinking-Blöcke aus dem Cache gelesen werden, zählen sie in deinen Nutzungsmetriken als Eingabe-Token. Das ist wichtig für die Kostenberechnung und die Token-Budgetierung.

Muster der Cache-Invalidierung:

  • Der Cache bleibt gültig, wenn nur Tool-Ergebnisse als Benutzernachrichten bereitgestellt werden
  • Auf Opus 4.5+ und Sonnet 4.6+ werden Thinking-Blöcke standardmäßig beibehalten, selbst wenn Benutzerinhalte hinzugefügt werden, die keine Tool-Ergebnisse sind, sodass der Cache gültig bleibt
  • Auf früheren Opus-/Sonnet-Modellen und allen Haiku-Modellen wird der Cache invalidiert, wenn Benutzerinhalte hinzugefügt werden, die keine Tool-Ergebnisse sind, wodurch alle vorherigen Thinking-Blöcke aus dem Kontext entfernt werden
  • Dieses Caching-Verhalten tritt auch ohne explizite cache_control-Markierungen auf

Weitere 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 kept

Auf früheren Opus-/Sonnet-Modellen und allen Haiku-Modellen werden an dieser Stelle 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.

Cache-Speicherung und -Freigabe

  • Organisations- und Workspace-Isolation: Caches sind zwischen Organisationen isoliert. Verschiedene Organisationen teilen niemals Caches, selbst wenn sie identische Prompts verwenden. Caches sind auf der Claude API, Claude Platform on AWS und Microsoft Foundry außerdem pro Workspace innerhalb einer Organisation isoliert; Bedrock und Google Cloud verwenden nur Isolation auf Organisationsebene.

  • Exakte Übereinstimmung: Cache-Treffer erfordern 100 % identische Prompt-Segmente, einschließlich aller Texte und Bilder bis einschließlich des mit Cache-Control markierten Blocks.

  • Generierung von Ausgabe-Token: Prompt-Caching hat keine Auswirkung auf die Generierung von Ausgabe-Token. Die Antwort, die du erhältst, ist identisch mit der, die du ohne Prompt-Caching erhalten würdest.

Best Practices für effektives Caching

So optimierst du die Leistung von Prompt-Caching:

  • Beginne bei mehrstufigen Gesprächen mit automatischem Caching. Es übernimmt die Breakpoint-Verwaltung automatisch.
  • Verwende explizite Breakpoints auf Blockebene, wenn du verschiedene Abschnitte mit unterschiedlichen Änderungshäufigkeiten cachen musst.
  • Cache stabile, wiederverwendbare Inhalte wie Systemanweisungen, Hintergrundinformationen, große Kontexte oder häufige Tool-Definitionen.
  • Platziere gecachte Inhalte für die beste Leistung am Anfang des Prompts.
  • Setze Cache-Breakpoints strategisch ein, um verschiedene cachefähige Präfixabschnitte zu trennen.
  • Platziere den Breakpoint auf dem letzten Block, der über Anfragen hinweg identisch bleibt. Bei einem Prompt mit statischem Präfix und variierendem Suffix (Zeitstempel, anfragespezifischer Kontext, die eingehende Nachricht) ist das das Ende des Präfixes, nicht der variierende Block.
  • Analysiere regelmäßig die Cache-Trefferraten und passe deine Strategie bei Bedarf an.

Optimierung für verschiedene Anwendungsfälle

Passe deine Prompt-Caching-Strategie an dein Szenario an:

  • Konversationsagenten: Reduziere Kosten und Latenz bei längeren Gesprächen, insbesondere bei solchen mit langen Anweisungen oder hochgeladenen Dokumenten.
  • Coding-Assistenten: Verbessere Autovervollständigung und Fragen & Antworten zur Codebasis, indem du relevante Abschnitte oder eine zusammengefasste Version der Codebasis im Prompt behältst.
  • Verarbeitung großer Dokumente: Binde vollständiges Langform-Material einschließlich Bildern in deinen Prompt ein, ohne die Antwortlatenz zu erhöhen.
  • Detaillierte Anweisungssätze: Teile umfangreiche Listen von Anweisungen, Verfahren und Beispielen, um Claudes Antworten zu verfeinern. Entwickler fügen oft ein oder zwei Beispiele in den Prompt ein, aber mit Prompt-Caching kannst du noch bessere Leistung erzielen, indem du 20+ vielfältige Beispiele hochwertiger Antworten einfügst.
  • Agentische Tool-Nutzung: Verbessere die Leistung in Szenarien mit mehreren Tool-Aufrufen und iterativen Codeänderungen, bei denen jeder Schritt typischerweise einen neuen API-Aufruf erfordert.
  • Sprich mit Büchern, Papers, Dokumentation, Podcast-Transkripten und anderen Langform-Inhalten: Erwecke jede Wissensbasis zum Leben, indem du das/die gesamte(n) Dokument(e) in den Prompt einbettest und Benutzer Fragen dazu stellen lässt.

Fehlerbehebung bei häufigen Problemen

Bei unerwartetem Verhalten:

  • Stelle sicher, dass gecachte Abschnitte über Aufrufe hinweg identisch sind. Überprüfe bei expliziten Breakpoints, dass sich die cache_control-Markierungen an denselben Stellen befinden
  • Prüfe, dass Aufrufe innerhalb der Cache-Lebensdauer erfolgen (standardmäßig 5 Minuten)
  • Überprüfe, dass tool_choice, Bildnutzung, die Thinking-Konfiguration und output_config.effort zwischen Aufrufen konsistent bleiben
  • Stelle sicher, dass du mindestens die Mindestanzahl an Token für dein Modell und deine Plattform cachst (siehe Cache-Einschränkungen)
  • Vergewissere dich, dass dein Breakpoint auf einem Block liegt, der über Anfragen hinweg identisch bleibt. Cache-Schreibvorgänge erfolgen nur am Breakpoint, und wenn sich dieser Block ändert (Zeitstempel, anfragespezifischer Kontext, die eingehende Nachricht), stimmt der Präfix-Hash nie überein. Der Lookback findet keinen stabilen Inhalt hinter dem Breakpoint; er findet nur Einträge, die frühere Anfragen an ihren eigenen Breakpoints geschrieben haben
  • Überprüfe, dass die Schlüssel in deinen tool_use-Inhaltsblöcken eine stabile Reihenfolge haben, da einige Sprachen (zum Beispiel Swift, Go) die Schlüsselreihenfolge bei der JSON-Konvertierung randomisieren und damit Caches brechen
  • Verwende die Cache-Diagnose, damit die API aufeinanderfolgende Anfragen vergleicht und meldet, welcher Teil des Prompts abgewichen ist

Cache-Dauer von 1 Stunde

Falls dir 5 Minuten zu kurz sind, bietet Anthropic auch eine Cache-Dauer von 1 Stunde gegen Aufpreis an.

Um den erweiterten Cache zu verwenden, füge ttl wie folgt in die cache_control-Definition ein:

"cache_control": {
  "type": "ephemeral",
  "ttl": "1h"
}

Die Antwort enthält detaillierte Cache-Informationen wie die folgenden:

Output
{
  "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 Objekt cache_creation entspricht.

Wenn du bei der Verwendung von Server-Tools wie der Websuche ephemeral_5m_input_tokens-Schreibvorgänge siehst, die du nicht angefordert hast, siehe Tool-Nutzung mit Prompt-Caching.

Wann der 1-Stunden-Cache sinnvoll ist

Wenn du Prompts hast, die in regelmäßigem Rhythmus 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 aufgefrischt wird.

Der 1-Stunden-Cache eignet sich am besten für die folgenden Szenarien:

  • Wenn du Prompts hast, die wahrscheinlich seltener als alle 5 Minuten, aber häufiger als jede Stunde verwendet werden. Zum Beispiel, wenn ein agentischer Neben-Agent länger als 5 Minuten braucht, oder wenn du ein langes Chat-Gespräch mit einem Benutzer speicherst und allgemein erwartest, dass dieser Benutzer möglicherweise nicht innerhalb der nächsten 5 Minuten antwortet.
  • Wenn Latenz wichtig ist und deine Folge-Prompts möglicherweise nach mehr als 5 Minuten gesendet werden.
  • Wenn du die Auslastung deines Ratenlimits verbessern möchtest, da Cache-Treffer nicht von deinem Ratenlimit abgezogen werden.

Verschiedene TTLs mischen

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:

  1. Position A: Die Token-Anzahl beim höchsten Cache-Treffer (oder 0, wenn es keine Treffer gibt).
  2. Position B: Die Token-Anzahl beim höchsten 1-Stunden-cache_control-Block nach A (oder gleich A, wenn keiner existiert).
  3. Position C: Die Token-Anzahl beim letzten cache_control-Block.

Dir wird Folgendes berechnet:

  1. Cache-Lese-Token für A.
  2. 1-Stunden-Cache-Schreib-Token für (B - A).
  3. 5-Minuten-Cache-Schreib-Token für (C - B).

Hier sind drei Beispiele. Dargestellt sind die Eingabe-Token von 3 Anfragen, die jeweils unterschiedliche Cache-Treffer und Cache-Fehltreffer haben. Jede hat infolgedessen eine unterschiedlich berechnete Preisgestaltung, die in den farbigen Kästen gezeigt wird. Diagramm zum Mischen von TTLs


Vorwärmen des Caches

Das Vorwärmen des Caches („cache pre-warming“) ermöglicht es dir, deinen System-Prompt oder deine Tool-Definitionen in den Prompt-Cache zu laden, bevor ein Nutzer eine echte Anfrage auslöst. Dadurch entfällt die Latenzstrafe durch einen Cache-Miss bei der ersten Nutzerinteraktion, was die „time-to-first-token“ (Zeit bis zum ersten Token), oder TTFT, für latenzempfindliche Anwendungen reduziert.

So funktioniert es

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 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-Nutzernachricht. Andernfalls wird der Cache-Eintrag auf den Platzhalter geschlüsselt und die Folgeanfrage trifft ihn nicht. Verwende außerdem dieselbe Thinking-Konfiguration und denselben output_config.effort-Wert wie in deinen Folgeanfragen: Diese Werte werden in den Prompt gerendert (siehe Was den Cache invalidiert), sodass ein Vorwärmen mit einer anderen Konfiguration einen Eintrag schreiben kann, den dein echter Traffic nie trifft. Das bedeutet, einen expliziten Cache-Breakpoint statt automatischem Caching zu verwenden, da automatisches Caching den Breakpoint auf dem letzten Block platziert, der hier der Platzhalter ist. Die Platzhalter-Nutzernachricht kann eine beliebige Zeichenkette mit Nicht-Leerzeichen-Inhalt sein (die Beispiele hier verwenden "warmup"); ihr Inhalt wird in das Modell eingelesen, aber nie beantwortet.

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-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:

Output
{
  "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"
  }
}

Typisches Nutzungsmuster

Sende eine Vorwärm-Anfrage, wenn deine Anwendung startet (oder in einem geplanten Intervall), und sende dann echte Nutzeranfragen, nachdem das Vorwärmen 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 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?")
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 Vorwärm-Anfrage, um den Cache warm zu halten. Für längere Pausen zwischen Nutzeranfragen verwende stattdessen die 1-Stunden-Cache-Dauer.

Einschränkungen

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:

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.

Ersetzen des max_tokens=1-Workarounds

Bevor max_tokens: 0 verfügbar war, verwendeten einige Anwendungen Aufwärm-Aufrufe mit max_tokens: 1, um denselben Effekt zu erzielen. Der Ansatz mit max_tokens: 0 ist vorzuziehen: Es wird keine Ausgabe erzeugt, sodass keine Ein-Token-Antwort verworfen werden muss, keine Output-Token abgerechnet werden und die Absicht der Anfrage eindeutig ist.


Prompt-Caching-Beispiele

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 Caching in unterschiedlichen Szenarien implementiert wird, und helfen dir, die praktischen Anwendungen dieser Funktion zu verstehen:

Datenaufbewahrung

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“, Schlüssel-Wert) und kryptografische Hashes gecachter Inhalte 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 auf der Claude API, der Claude Platform auf AWS und Microsoft Foundry auch zwischen Workspaces innerhalb einer Organisation.

Zur ZDR-Fähigkeit aller Funktionen siehe API und Datenaufbewahrung.


FAQ

Was this page helpful?