Technical reference
Prompt-Caching
Prompt-Caching ermöglicht es einem Modell-Provider, ein unverändertes Prompt-Präfix (System-/Entwickleranweisungen, Tool-Definitionen und anderen stabilen Kontext) über mehrere Durchläufe hinweg wiederzuverwenden, statt es bei jeder Anfrage erneut zu verarbeiten. Dies reduziert Token-Kosten und Latenz bei lang laufenden Sitzungen mit wiederkehrendem Kontext.
OpenClaw normalisiert die Providernutzung in cacheRead und cacheWrite, sofern die Upstream-API diese Zähler bereitstellt. Nutzungszusammenfassungen (/status und ähnliche) greifen auf den letzten Nutzungseintrag im Transkript zurück, wenn der Snapshot der laufenden Sitzung keine Cache-Zähler enthält; ein von null verschiedener Live-Wert hat immer Vorrang vor dem Rückfallwert.
Provider-Referenzen:
Primäre Einstellungen
cacheRetention
Werte: "none" | "short" | "long". Konfigurierbar als globaler Standardwert, pro Modell und pro Agent.
"standard" ist kein Alias; verwenden Sie "short" für das standardmäßige Cache-Zeitfenster des Providers. Ungültige Werte werden mit einer Warnung ignoriert.
agents: defaults: params: cacheRetention: "long" # none | short | long models: "anthropic/claude-opus-4-6": params: cacheRetention: "short" # überschreibt den globalen Standardwert für dieses Modell list: - id: "alerts" params: cacheRetention: "none" # überschreibt beide Standardwerte für diesen AgentZusammenführungsreihenfolge (spätere Werte haben Vorrang):
agents.defaults.params- globaler Standardwert für alle Modelleagents.defaults.models["provider/model"].params- Überschreibung pro Modellagents.entries.*.params- Überschreibung pro Agent, abgeglichen anhand der Agent-ID
Quelle: src/agents/embedded-agent-runner/extra-params.ts (resolveExtraParams).
contextPruning.mode: "cache-ttl"
Entfernt alten Tool-Ergebniskontext nach Ablauf des Cache-TTL-Zeitfensters, damit eine Anfrage nach einer Leerlaufphase keinen übermäßig großen Verlauf erneut zwischenspeichert.
agents: defaults: contextPruning: mode: "cache-ttl" ttl: "1h"Das vollständige Verhalten wird unter Sitzungsbereinigung beschrieben.
Warmhalten durch Heartbeat
Heartbeat kann Cache-Zeitfenster warmhalten und wiederholte Cache-Schreibvorgänge nach Leerlaufphasen reduzieren. Global (agents.defaults.heartbeat) oder pro Agent (agents.entries.*.heartbeat) konfigurierbar.
agents: defaults: heartbeat: every: "55m"Provider-Verhalten
Anthropic (direkte API und Vertex AI)
cacheRetentionwird für die Provideranthropicundanthropic-vertexsowie für Claude-Modelle aufamazon-bedrockund benutzerdefinierten, mitanthropic-messageskompatiblen Endpunkten unterstützt, wenncacheRetentionexplizit festgelegt ist.- Wenn kein Wert festgelegt ist, setzt OpenClaw
cacheRetention: "short"für direktes Anthropic ein (nur für die Provideranthropicundanthropic-vertex; andere Routen der Anthropic-Familie erfordern einen expliziten Wert). - Native Antworten von Anthropic Messages stellen
cache_read_input_tokensundcache_creation_input_tokensbereit, die aufcacheReadundcacheWriteabgebildet werden. cacheRetention: "short"wird dem standardmäßigen flüchtigen 5-Minuten-Cache zugeordnet.cacheRetention: "long"fordert bei expliziter Festlegung die 1-Stunden-TTL (cache_control: { type: "ephemeral", ttl: "1h" }) an. Eine implizite bzw. durch eine Umgebungsvariable gesteuerte lange Aufbewahrung (OPENCLAW_CACHE_RETENTION=longohne explizitescacheRetention) wird nur aufapi.anthropic.com- oder Vertex-AI-Hosts (aiplatform.googleapis.com/*-aiplatform.googleapis.com) auf die 1-Stunden-TTL hochgestuft; andere Hosts behalten den 5-Minuten-Cache bei.
Quelle: packages/ai/src/transports/anthropic-payload-policy.ts (resolveAnthropicEphemeralCacheControl, isLongTtlEligibleEndpoint).
OpenAI (direkte API)
- Prompt-Caching erfolgt bei unterstützten aktuellen Modellen automatisch; OpenClaw fügt keine Cache-Markierungen auf Blockebene ein.
- OpenClaw sendet
prompt_cache_key, um das Cache-Routing über mehrere Durchläufe hinweg stabil zu halten. Direkteapi.openai.com-Hosts erhalten dies automatisch. OpenAI-kompatible Proxys (oMLX, llama.cpp, benutzerdefinierte Endpunkte) müssen zur Aktivierungcompat.supportsPromptCacheKey: truein der Modellkonfiguration festlegen – bei einem Proxy wird dies niemals automatisch erkannt. prompt_cache_retention: "24h"wird nur hinzugefügt, wenncacheRetention: "long"ausgewählt ist und der aufgelöste Endpunkt sowohl den Cache-Schlüssel als auch die lange Aufbewahrung unterstützt (compat.supportsLongCacheRetention, standardmäßig wahr; Kompatibilitätsprofile von Together AI und Cloudflare deaktivieren dies).cacheRetention: "none"unterdrückt beide Felder.- Cache-Treffer werden über
usage.prompt_tokens_details.cached_tokens(Chat Completions) oderinput_tokens_details.cached_tokens(Responses API) bereitgestellt und aufcacheReadabgebildet. - Nutzdaten der Responses API können außerdem
input_tokens_details.cache_write_tokensbereitstellen, das aufcacheWriteabgebildet und zum Cache-Schreibpreis des Modells abgerechnet wird; bei Responses-Nutzdaten ohne dieses Feld bleibtcacheWriteauf0. Die Chat Completions API von OpenAI dokumentiert und liefert keinencache_write_tokens-Zähler, OpenClaw liest dort jedoch weiterhinprompt_tokens_details.cache_write_tokensfür OpenRouter-kompatible und DeepSeek-artige Proxys, die eine separate Schreibanzahl melden. - In der Praxis verhält sich OpenAI eher wie ein Cache für das anfängliche Präfix als wie Anthrophics Wiederverwendung des fortlaufenden vollständigen Verlaufs – siehe unten Erwartungen an OpenAI im Live-Betrieb.
Amazon Bedrock
- Anthropic-Claude-Modellreferenzen (
amazon-bedrock/*anthropic.claude*sowie die AWS-System-Inferenzprofilpräfixeus./eu./global.anthropic.claude*) unterstützen die explizite Weitergabe voncacheRetention. - Bedrock-Modelle, die nicht von Anthropic stammen (beispielsweise
amazon.nova-*), werden zur Laufzeit unabhängig von einem konfiguriertencacheRetention-Wert ohne Cache-Aufbewahrung aufgelöst. - Undurchsichtige ARNs von Bedrock-Anwendungsinferenzprofilen (Profil-IDs, die
claudenicht enthalten) werden ebenfalls ohne Cache-Aufbewahrung aufgelöst, soferncacheRetentionnicht explizit festgelegt ist, da die Modellfamilie nicht allein aus dem ARN abgeleitet werden kann.
OpenRouter
Für openrouter/anthropic/*-Modellreferenzen fügt OpenClaw Anthropic-cache_control-Markierungen in System-/Entwickler-Prompt-Blöcke ein, jedoch nur, wenn die Anfrage weiterhin an eine verifizierte OpenRouter-Route gerichtet ist (openrouter an ihrem Standardendpunkt oder ein beliebiger Provider bzw. eine beliebige Basis-URL, die zu openrouter.ai aufgelöst wird). Wird das Modell auf eine beliebige OpenAI-kompatible Proxy-URL umgeleitet, werden diese Markierungen nicht mehr eingefügt.
contextPruning.mode: "cache-ttl" ist für die Modellreferenzen openrouter/anthropic/*, openrouter/deepseek/*, openrouter/moonshot/*, openrouter/moonshotai/* und openrouter/zai/* zulässig, da diese Routen das providerseitige Prompt-Caching ohne von OpenClaw eingefügte Markierungen verarbeiten.
Quelle: extensions/openrouter/index.ts (OPENROUTER_CACHE_TTL_MODEL_PREFIXES).
Der Aufbau des DeepSeek-Caches auf OpenRouter erfolgt nach bestem Bemühen und kann einige Sekunden dauern; eine unmittelbar folgende Anfrage kann weiterhin cached_tokens: 0 anzeigen. Überprüfen Sie dies nach einer kurzen Verzögerung mit einer wiederholten Anfrage mit demselben Präfix und verwenden Sie usage.prompt_tokens_details.cached_tokens als Signal für einen Cache-Treffer.
Google Gemini (direkte API)
- Der direkte Gemini-Transport (
api: "google-generative-ai") meldet Cache-Treffer über das Upstream-FeldcachedContentTokenCount, das aufcacheReadabgebildet wird. - Unterstützte Modellfamilien:
gemini-2.5*undgemini-3*(Live-/Vorschauvarianten außerhalb dieses Präfixabgleichs sind ausgeschlossen, beispielsweisegemini-live-2.5-flash-preview). - Wenn
cacheRetentionfür ein unterstütztes Modell festgelegt ist, erstellt, verwendet und aktualisiert OpenClaw automatisch einecachedContents-Ressource für den System-Prompt – ein manuelles Handle für zwischengespeicherte Inhalte ist nicht erforderlich. Die TTL beträgt300sfürcacheRetention: "short"und3600sfür"long". - Ein bereits vorhandenes Gemini-Handle für zwischengespeicherte Inhalte kann weiterhin als
params.cachedContent(oder als veraltetesparams.cached_content) übergeben werden; bei einem expliziten Handle wird der automatische Cache-Verwaltungspfad vollständig übersprungen. - Dies ist vom Prompt-Präfix-Caching von Anthropic/OpenAI getrennt: OpenClaw verwaltet für Gemini eine providernative
cachedContents-Ressource, statt Inline-Cache-Markierungen einzufügen.
Quelle: src/agents/embedded-agent-runner/google-prompt-cache.ts.
CLI-Harness-Provider (Claude Code, Gemini CLI)
CLI-Backends, die JSONL-Nutzungsereignisse (jsonlDialect: "claude-stream-json" oder "gemini-stream-json") ausgeben, durchlaufen einen gemeinsamen Nutzungsparser, der mehrere Varianten von Feldnamen erkennt, darunter einen einfachen cached-Zähler, der auf cacheRead abgebildet wird. Wenn die JSON-Nutzdaten der CLI kein direktes Feld für Eingabe-Token enthalten, leitet OpenClaw es als input_tokens - cached ab. Dies dient ausschließlich der Nutzungsnormalisierung – es werden keine Prompt-Cache-Markierungen im Stil von Anthropic/OpenAI für diese CLI-gesteuerten Modelle erstellt.
Quelle: src/agents/cli-output.ts (toCliUsage).
Andere Provider
Wenn ein Provider keinen der oben genannten Cache-Modi unterstützt, hat cacheRetention keine Wirkung.
Cache-Grenze des System-Prompts
OpenClaw teilt den System-Prompt an einer internen Cache-Präfixgrenze in ein stabiles Präfix und ein veränderliches Suffix. Inhalte oberhalb der Grenze (Tool-Definitionen, Skills-Metadaten, Workspace-Dateien) werden so angeordnet, dass sie über mehrere Durchläufe hinweg byteidentisch bleiben. Inhalte unterhalb der Grenze (beispielsweise HEARTBEAT.md, Laufzeit-Zeitstempel und andere Metadaten pro Durchlauf) können sich ändern, ohne das zwischengespeicherte Präfix ungültig zu machen.
Wesentliche Designentscheidungen:
- Stabile Projektkontextdateien des Workspace werden vor
HEARTBEAT.mdangeordnet, damit Heartbeat-Änderungen das stabile Präfix nicht ungültig machen. - Die Grenze gilt für die Transportaufbereitung der Anthropic-, OpenAI- und Google-Familien sowie der CLI, sodass alle unterstützten Provider von derselben Präfixstabilität profitieren.
- Codex-Responses- und Anthropic-Vertex-Anfragen werden durch eine grenzbewusste Cache-Aufbereitung geleitet, sodass die Cache-Wiederverwendung mit den tatsächlich bei den Providern eingehenden Daten übereinstimmt.
- Fingerabdrücke von System-Prompts werden normalisiert (Leerraum, Zeilenenden, durch Hooks hinzugefügter Kontext und Reihenfolge der Laufzeitfähigkeiten), sodass semantisch unveränderte Prompts über mehrere Durchläufe hinweg denselben Cache verwenden.
Wenn nach einer Konfigurations- oder Workspace-Änderung unerwartete Spitzen bei cacheWrite auftreten, prüfen Sie, ob die Änderung oberhalb oder unterhalb der Cache-Grenze liegt. Das Verschieben veränderlicher Inhalte unter die Grenze (oder deren Stabilisierung) behebt das Problem in der Regel.
OpenClaw-Schutzmechanismen für Cache-Stabilität
- Gebündelte MCP-Tool-Kataloge werden vor der Tool-Registrierung deterministisch sortiert (zuerst nach Servername, dann nach Tool-Name), sodass Änderungen an der Reihenfolge von
listTools()den Tool-Block nicht verändern und die Präfixe des Prompt-Caches nicht ungültig machen. - Bei älteren Sitzungen mit gespeicherten Bildblöcken bleiben die 3 neuesten abgeschlossenen Durchläufe vollständig erhalten (gezählt werden alle abgeschlossenen Durchläufe, nicht nur solche mit Bildern). Ältere, bereits verarbeitete Bildblöcke werden durch eine Textmarkierung ersetzt, damit bildintensive Folgeanfragen nicht wiederholt große, veraltete Nutzdaten senden.
Abstimmungsmuster
Gemischter Datenverkehr (empfohlener Standardwert)
Behalten Sie eine langlebige Basiskonfiguration für Ihren Haupt-Agent bei und deaktivieren Sie das Caching für Agents mit stoßweisem Benachrichtigungsverkehr:
agents: defaults: model: primary: "anthropic/claude-opus-4-6" models: "anthropic/claude-opus-4-6": params: cacheRetention: "long" list: - id: "research" default: true heartbeat: every: "55m" - id: "alerts" params: cacheRetention: "none"Kostenorientierte Basiskonfiguration
- Legen Sie
cacheRetention: "short"als Basiskonfiguration fest. - Aktivieren Sie
contextPruning.mode: "cache-ttl". - Halten Sie den Heartbeat nur bei Agents, die von warmen Caches profitieren, unterhalb Ihrer TTL.
Live-Regressionstests
OpenClaw führt ein kombiniertes Live-Regressionstor für Caches aus, das wiederholte Präfixe, Tool-Durchläufe, Bilddurchläufe, Tool-Transkripte im MCP-Stil und eine Anthropic-Kontrolle ohne Cache abdeckt.
src/agents/live-cache-regression.live.test.tssrc/agents/live-cache-regression-runner.tssrc/agents/live-cache-regression-baseline.ts
Führen Sie es wie folgt aus:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cacheDie Baseline-Datei speichert die zuletzt beobachteten Live-Werte sowie die providerspezifischen Regressionsuntergrenzen, gegen die der Test prüft. Jeder Durchlauf verwendet neue sitzungsspezifische IDs und Prompt-Namespaces, damit ein vorheriger Cache-Zustand die aktuelle Stichprobe nicht verfälscht. Anthropic und OpenAI verwenden unterschiedliche Durchsetzungsregeln: Wird eine Anthropic-Untergrenze unterschritten, gilt dies als harte Regression (der Test schlägt fehl), während das Unterschreiten einer OpenAI-Untergrenze nur überwacht wird (als Warnung protokolliert, ohne dass der Durchlauf fehlschlägt). Sie verwenden keinen gemeinsamen providerübergreifenden Schwellenwert.
Live-Erwartungen für Anthropic
- Explizite Warmup-Schreibvorgänge über
cacheWritewerden erwartet. - Bei wiederholten Durchläufen wird eine nahezu vollständige Wiederverwendung des Verlaufs erwartet, da die Cache-Steuerung von Anthropic den Cache-Haltepunkt im Verlauf der Unterhaltung verschiebt.
- Baseline-Untergrenzen für stabile, Tool-, Bild- und MCP-artige Abläufe sind harte Regressionsprüfungen.
Live-Erwartungen für OpenAI
- Es wird nur
cacheReaderwartet;cacheWritebleibt bei Chat Completions0. - Die Cache-Wiederverwendung bei wiederholten Durchläufen ist als providerspezifisches Plateau zu behandeln, nicht als Anthropic-artige fortschreitende Wiederverwendung des vollständigen Verlaufs.
- Untergrenzen dienen nur der Überwachung (eine Unterschreitung wird als Warnung protokolliert und führt nicht zum Fehlschlagen des Tests) und wurden aus dem beobachteten Live-Verhalten bei
gpt-5.4-miniabgeleitet:
| Szenario | Untergrenze für cacheRead |
Untergrenze für Trefferquote |
|---|---|---|
| Stabiles Präfix | 4,608 | 0.90 |
| Tool-Transkript | 4,096 | 0.85 |
| Bildtranskript | 3,840 | 0.82 |
| MCP-artiges Transkript | 4,096 | 0.85 |
Die zuletzt beobachteten Baseline-Werte (aus live-cache-regression-baseline.ts) lagen bei: stabiles Präfix cacheRead=4864, Trefferquote 0.966; Tool-Transkript cacheRead=4608, Trefferquote 0.896; Bildtranskript cacheRead=4864, Trefferquote 0.954; MCP-artiges Transkript cacheRead=4608, Trefferquote 0.891.
Warum sich die Prüfungen unterscheiden: Anthropic stellt explizite Cache-Haltepunkte und eine fortschreitende Wiederverwendung des Unterhaltungsverlaufs bereit, während das effektiv wiederverwendbare Präfix von OpenAI im Live-Datenverkehr bereits vor dem vollständigen Prompt ein Plateau erreichen kann. Der Vergleich beider Provider anhand eines einzigen providerübergreifenden prozentualen Schwellenwerts erzeugt falsche Regressionen.
diagnostics.cacheTrace-Konfiguration
diagnostics: cacheTrace: enabled: true filePath: "~/.openclaw/logs/cache-trace.jsonl" # optional includeMessages: false # standardmäßig true includePrompt: false # standardmäßig true includeSystem: false # standardmäßig trueStandardwerte:
| Schlüssel | Standardwert |
|---|---|
filePath |
$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl |
includeMessages |
true |
includePrompt |
true |
includeSystem |
true |
Umgebungsvariablen (einmalige Fehlerdiagnose)
| Variable | Wirkung |
|---|---|
OPENCLAW_CACHE_TRACE=1 |
Aktiviert die Cache-Ablaufverfolgung |
OPENCLAW_CACHE_TRACE_FILE=path |
Überschreibt den Ausgabepfad |
OPENCLAW_CACHE_TRACE_MESSAGES=0|1 |
Schaltet die Erfassung vollständiger Nachrichten-Payloads um |
OPENCLAW_CACHE_TRACE_PROMPT=0|1 |
Schaltet die Erfassung des Prompt-Texts um |
OPENCLAW_CACHE_TRACE_SYSTEM=0|1 |
Schaltet die Erfassung des System-Prompts um |
Zu prüfende Informationen
- Cache-Ablaufverfolgungsereignisse liegen im JSONL-Format mit stufenweisen Snapshots wie
session:loaded,prompt:before,stream:contextundsession:aftervor. - Die Auswirkung des Caches auf die Token pro Durchlauf ist in den normalen Nutzungsoberflächen sichtbar:
cacheReadundcacheWriteerscheinen in/usage tokens,/status, Sitzungsnutzungszusammenfassungen und benutzerdefiniertenmessages.usageTemplate-Layouts. - Bei Anthropic werden bei aktivem Caching sowohl
cacheReadals auchcacheWriteerwartet. - Bei OpenAI wird bei Cache-Treffern
cacheReaderwartet;cacheWritewird nur bei Payloads der Responses API ausgefüllt, die diesen Wert enthalten (siehe OpenAI weiter oben). - OpenAI gibt außerdem Header für Ablaufverfolgung und Ratenbegrenzung wie
x-request-id,openai-processing-msundx-ratelimit-*zurück; verwenden Sie diese zur Anfrageverfolgung. Die Erfassung von Cache-Treffern sollte jedoch weiterhin aus dem Nutzungs-Payload und nicht aus Headern stammen.
Schnelle Fehlerbehebung
- Hoher Wert für
cacheWritebei den meisten Durchläufen: Prüfen Sie auf veränderliche Eingaben im System-Prompt und stellen Sie sicher, dass das Modell beziehungsweise der Provider Ihre Cache-Einstellungen unterstützt. - Hoher Wert für
cacheWritebei Anthropic: Dies bedeutet häufig, dass der Cache-Haltepunkt auf Inhalten liegt, die sich bei jeder Anfrage ändern. - Niedriger OpenAI-Wert für
cacheRead: Stellen Sie sicher, dass das stabile Präfix am Anfang steht, das wiederholte Präfix mindestens 1024 Token umfasst und derselbe Wert fürprompt_cache_keybei Durchläufen wiederverwendet wird, die sich einen Cache teilen sollen. - Keine Wirkung von
cacheRetention: Stellen Sie sicher, dass der Modellschlüssel mitagents.defaults.models["provider/model"]übereinstimmt. - Bedrock-Nova-Anfragen mit Cache-Einstellungen: Erwartetes Verhalten – diese werden zur Laufzeit ohne Cache-Aufbewahrung aufgelöst.
Zugehörige Dokumentation: