Promptcaching betekent dat de modelprovider ongewijzigde promptprefixen (meestal systeem-/ontwikkelaarsinstructies en andere stabiele context) over beurten heen kan hergebruiken in plaats van ze elke keer opnieuw te verwerken. OpenClaw normaliseert providergebruik naarDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
cacheRead en cacheWrite wanneer de upstream-API die tellers rechtstreeks aanbiedt.
Statusweergaven kunnen cachetellers ook herstellen uit het meest recente transcript
gebruikerslog wanneer de live sessiesnapshot ze mist, zodat /status een cacheregel kan blijven
tonen na gedeeltelijk verlies van sessiemetadata. Bestaande niet-nul live
cachewaarden blijven voorrang houden op fallbackwaarden uit het transcript.
Waarom dit belangrijk is: lagere tokenkosten, snellere reacties en voorspelbaardere prestaties voor langlopende sessies. Zonder caching betalen herhaalde prompts bij elke beurt de volledige promptkosten, zelfs wanneer de meeste invoer niet is gewijzigd.
De onderstaande secties behandelen elke cachegerelateerde knop die invloed heeft op prompt-hergebruik en tokenkosten.
Providerreferenties:
- Anthropic-promptcaching: https://platform.claude.com/docs/en/build-with-claude/prompt-caching
- OpenAI-promptcaching: https://developers.openai.com/api/docs/guides/prompt-caching
- OpenAI API-headers en request-ID’s: https://developers.openai.com/api/reference/overview
- Anthropic request-ID’s en fouten: https://platform.claude.com/docs/en/api/errors
Primaire knoppen
cacheRetention (globale standaardwaarde, model en per agent)
Stel cachebewaring in als globale standaardwaarde voor alle modellen:
agents.defaults.params(globale standaardwaarde — geldt voor alle modellen)agents.defaults.models["provider/model"].params(overschrijving per model)agents.list[].params(overeenkomende agent-id; overschrijft per sleutel)
contextPruning.mode: "cache-ttl"
Snoeit oude toolresultaatcontext na cache-TTL-vensters, zodat aanvragen na inactiviteit geen te grote geschiedenis opnieuw cachen.
Heartbeat warm houden
Heartbeat kan cachevensters warm houden en herhaalde cachewrites na inactiviteitsperioden verminderen.agents.list[].heartbeat.
Providergedrag
Anthropic (directe API)
cacheRetentionwordt ondersteund.- Met Anthropic API-key-authprofielen vult OpenClaw
cacheRetention: "short"in voor Anthropic-modelverwijzingen wanneer dit niet is ingesteld. - Native Messages-responses van Anthropic geven zowel
cache_read_input_tokensalscache_creation_input_tokensdoor, zodat OpenClaw zowelcacheReadalscacheWritekan tonen. - Voor native Anthropic-aanvragen wordt
cacheRetention: "short"gekoppeld aan de standaard tijdelijke cache van 5 minuten, encacheRetention: "long"wordt alleen op directeapi.anthropic.com-hosts opgewaardeerd naar de TTL van 1 uur.
OpenAI (directe API)
- Promptcaching is automatisch op ondersteunde recente modellen. OpenClaw hoeft geen cachemarkeringen op blokniveau te injecteren.
- OpenClaw gebruikt
prompt_cache_keyom cacherouting stabiel te houden over beurten heen en gebruiktprompt_cache_retention: "24h"alleen wanneercacheRetention: "long"is geselecteerd op directe OpenAI-hosts. - OpenAI-compatibele Completions-providers ontvangen
prompt_cache_keyalleen wanneer hun modelconfiguratie explicietcompat.supportsPromptCacheKey: trueinstelt;cacheRetention: "none"onderdrukt dit nog steeds. - OpenAI-responses geven gecachte prompttokens door via
usage.prompt_tokens_details.cached_tokens(ofinput_tokens_details.cached_tokensbij Responses API-events). OpenClaw koppelt dat aancacheRead. - OpenAI geeft geen aparte token teller voor cachewrites door, dus
cacheWriteblijft0op OpenAI-paden, zelfs wanneer de provider een cache opwarmt. - OpenAI retourneert nuttige tracing- en rate-limitheaders zoals
x-request-id,openai-processing-msenx-ratelimit-*, maar cache-hitadministratie moet uit de usage-payload komen, niet uit headers. - In de praktijk gedraagt OpenAI zich vaak als een cache voor initiële prefixen in plaats van Anthropic-achtig hergebruik van volledige geschiedenis dat meebeweegt. Stabiele tekstbeurten met lange prefix kunnen in huidige liveprobes dicht bij een plateau van
4864gecachte tokens uitkomen, terwijl toolzware of MCP-achtige transcripts vaak rond4608gecachte tokens plateauën, zelfs bij exacte herhalingen.
Anthropic Vertex
- Anthropic-modellen op Vertex AI (
anthropic-vertex/*) ondersteunencacheRetentionop dezelfde manier als directe Anthropic. cacheRetention: "long"wordt gekoppeld aan de echte promptcache-TTL van 1 uur op Vertex AI-endpoints.- Standaard cachebewaring voor
anthropic-vertexkomt overeen met de standaardwaarden van directe Anthropic. - Vertex-aanvragen worden gerouteerd via grensbewuste cachevorming, zodat cachehergebruik afgestemd blijft op wat providers daadwerkelijk ontvangen.
Amazon Bedrock
- Anthropic Claude-modelverwijzingen (
amazon-bedrock/*anthropic.claude*) ondersteunen expliciete doorgifte vancacheRetention. - Niet-Anthropic Bedrock-modellen worden tijdens runtime gedwongen naar
cacheRetention: "none".
OpenRouter-modellen
Vooropenrouter/anthropic/*-modelverwijzingen injecteert OpenClaw Anthropic
cache_control op systeem-/ontwikkelaarspromptblokken om promptcache
hergebruik te verbeteren, alleen wanneer de aanvraag nog steeds gericht is op een geverifieerde OpenRouter-route
(openrouter op het standaardendpoint, of elke provider/basis-URL die resolveert
naar openrouter.ai).
Voor openrouter/deepseek/*, openrouter/moonshot*/* en openrouter/zai/*
modelverwijzingen is contextPruning.mode: "cache-ttl" toegestaan omdat OpenRouter
provider-side promptcaching automatisch afhandelt. OpenClaw injecteert geen
Anthropic cache_control-markeringen in die aanvragen.
DeepSeek-cacheconstructie is best-effort en kan enkele seconden duren. Een
direct vervolg kan nog steeds cached_tokens: 0 tonen; verifieer met een herhaalde
aanvraag met dezelfde prefix na een korte vertraging en gebruik usage.prompt_tokens_details.cached_tokens
als cache-hit-signaal.
Als je het model naar een willekeurige OpenAI-compatibele proxy-URL omleidt, stopt OpenClaw
met het injecteren van die OpenRouter-specifieke Anthropic-cachemarkeringen.
Andere providers
Als de provider deze cachemodus niet ondersteunt, heeftcacheRetention geen effect.
Google Gemini directe API
- Direct Gemini-transport (
api: "google-generative-ai") rapporteert cachehits via upstreamcachedContentTokenCount; OpenClaw koppelt dat aancacheRead. - Wanneer
cacheRetentionis ingesteld op een direct Gemini-model, maakt OpenClaw automatischcachedContents-resources aan, hergebruikt en vernieuwt ze voor systeemprompts bij Google AI Studio-runs. Dit betekent dat je niet langer vooraf handmatig een cached-content-handle hoeft aan te maken. - Je kunt nog steeds een bestaande Gemini cached-content-handle doorgeven als
params.cachedContent(of legacyparams.cached_content) op het geconfigureerde model. - Dit staat los van Anthropic/OpenAI promptprefixcaching. Voor Gemini
beheert OpenClaw een provider-native
cachedContents-resource in plaats van cachemarkeringen in de aanvraag te injecteren.
Gemini CLI JSON-gebruik
- Gemini CLI JSON-uitvoer kan cachehits ook tonen via
stats.cached; OpenClaw koppelt dat aancacheRead. - Als de CLI een directe
stats.input-waarde weglaat, leidt OpenClaw invoertokens af uitstats.input_tokens - stats.cached. - Dit is alleen gebruiksnormalisatie. Het betekent niet dat OpenClaw Anthropic/OpenAI-achtige promptcachemarkeringen voor Gemini CLI aanmaakt.
Systeemprompt-cachegrens
OpenClaw splitst de systeemprompt in een stabiele prefix en een vluchtig suffix, gescheiden door een interne cacheprefixgrens. Inhoud boven de grens (tooldefinities, Skills-metadata, workspacebestanden en andere relatief statische context) wordt zo geordend dat die byte-identiek blijft over beurten heen. Inhoud onder de grens (bijvoorbeeldHEARTBEAT.md, runtime-tijdstempels en
andere metadata per beurt) mag wijzigen zonder de gecachte
prefix ongeldig te maken.
Belangrijke ontwerpkeuzes:
- Stabiele projectcontextbestanden in de workspace worden vóór
HEARTBEAT.mdgeordend, zodat Heartbeat-wijzigingen de stabiele prefix niet verbreken. - De grens wordt toegepast op Anthropic-family, OpenAI-family, Google en CLI-transportvorming, zodat alle ondersteunde providers profiteren van dezelfde prefix stabiliteit.
- Codex Responses- en Anthropic Vertex-aanvragen worden gerouteerd via grensbewuste cachevorming, zodat cachehergebruik afgestemd blijft op wat providers daadwerkelijk ontvangen.
- Systeempromptvingerafdrukken worden genormaliseerd (witruimte, regeleinden, door hooks toegevoegde context, ordening van runtimecapaciteiten), zodat semantisch ongewijzigde prompts KV/cache delen over beurten heen.
cacheWrite-pieken ziet na een configuratie- of workspacewijziging,
controleer dan of de wijziging boven of onder de cachegrens terechtkomt. Vluchtige
inhoud onder de grens plaatsen (of stabiliseren) lost het probleem vaak op.
Cache-stabiliteitsguards van OpenClaw
OpenClaw houdt ook meerdere cachegevoelige payloadvormen deterministisch voordat de aanvraag de provider bereikt:- Bundle MCP-toolcatalogi worden deterministisch gesorteerd vóór tool
registratie, zodat wijzigingen in
listTools()-volgorde het toolsblok niet wijzigen en promptcacheprefixen verbreken. - Legacy-sessies met bewaarde afbeeldingsblokken houden de 3 meest recente voltooide beurten intact; oudere al verwerkte afbeeldingsblokken kunnen worden vervangen door een markering, zodat afbeeldingszware vervolgen niet steeds grote verouderde payloads opnieuw verzenden.
Afstempatronen
Gemengd verkeer (aanbevolen standaard)
Houd een langlevende baseline op je hoofdagent, schakel caching uit op bursty notifier-agents:Kosten-eerst baseline
- Stel baseline
cacheRetention: "short"in. - Schakel
contextPruning.mode: "cache-ttl"in. - Houd Heartbeat alleen onder je TTL voor agents die profiteren van warme caches.
Cache-diagnostiek
OpenClaw biedt speciale cache-trace-diagnostiek voor embedded agent-runs. Voor normale gebruikersgerichte diagnostiek kunnen/status en andere gebruikssamenvattingen
de nieuwste transcript-gebruiksentry gebruiken als fallbackbron voor cacheRead /
cacheWrite wanneer de live sessie-entry die tellers niet heeft.
Live-regressietests
OpenClaw onderhoudt één gecombineerde live cache-regressiegate voor herhaalde prefixen, toolbeurten, afbeeldingsbeurten, MCP-achtige tooltranscripts en een Anthropic no-cache-control.src/agents/live-cache-regression.live.test.tssrc/agents/live-cache-regression-baseline.ts
Anthropic live verwachtingen
- Verwacht expliciete warmup-writes via
cacheWrite. - Verwacht bijna volledig geschiedenishergebruik bij herhaalde beurten, omdat Anthropic-cachecontrole het cachebreakpoint door het gesprek heen opschuift.
- Huidige live-assertions gebruiken nog steeds hoge hitratiedrempels voor stabiele, tool- en afbeeldingspaden.
OpenAI live verwachtingen
- Verwacht alleen
cacheRead.cacheWriteblijft0. - Behandel cachehergebruik over herhaalde beurten als een providerspecifiek plateau, niet als Anthropic-achtig hergebruik van een bewegende volledige geschiedenis.
- Huidige live-asserties gebruiken conservatieve ondergrenscontroles, afgeleid van waargenomen livegedrag op
gpt-5.4-mini:- stabiel voorvoegsel:
cacheRead >= 4608, hitratio>= 0.90 - tooltranscript:
cacheRead >= 4096, hitratio>= 0.85 - afbeeldingstranscript:
cacheRead >= 3840, hitratio>= 0.82 - MCP-achtig transcript:
cacheRead >= 4096, hitratio>= 0.85
- stabiel voorvoegsel:
- stabiel voorvoegsel:
cacheRead=4864, hitratio0.966 - tooltranscript:
cacheRead=4608, hitratio0.896 - afbeeldingstranscript:
cacheRead=4864, hitratio0.954 - MCP-achtig transcript:
cacheRead=4608, hitratio0.891
88s.
Waarom de asserties verschillen:
- Anthropic stelt expliciete cachebreekpunten en hergebruik van bewegende gespreksgeschiedenis beschikbaar.
- OpenAI-promptcaching blijft gevoelig voor exacte voorvoegsels, maar het effectieve herbruikbare voorvoegsel in live Responses-verkeer kan eerder een plateau bereiken dan de volledige prompt.
- Daardoor veroorzaakt het vergelijken van Anthropic en OpenAI met één drempelpercentage voor meerdere providers valse regressies.
diagnostics.cacheTrace-configuratie
filePath:$OPENCLAW_STATE_DIR/logs/cache-trace.jsonlincludeMessages:trueincludePrompt:trueincludeSystem:true
Omgevingsschakelaars (eenmalige debugging)
OPENCLAW_CACHE_TRACE=1schakelt cachetracing in.OPENCLAW_CACHE_TRACE_FILE=/path/to/cache-trace.jsonloverschrijft het uitvoerpad.OPENCLAW_CACHE_TRACE_MESSAGES=0|1schakelt het vastleggen van de volledige berichtpayload in of uit.OPENCLAW_CACHE_TRACE_PROMPT=0|1schakelt het vastleggen van prompttekst in of uit.OPENCLAW_CACHE_TRACE_SYSTEM=0|1schakelt het vastleggen van de systeemprompt in of uit.
Wat te inspecteren
- Cachetracegebeurtenissen zijn JSONL en bevatten gefaseerde momentopnamen zoals
session:loaded,prompt:before,stream:contextensession:after. - De impact van cachetokens per beurt is zichtbaar in normale gebruiksweergaven via
cacheReadencacheWrite(bijvoorbeeld/usage fullen samenvattingen van sessiegebruik). - Verwacht bij Anthropic zowel
cacheReadalscacheWritewanneer caching actief is. - Verwacht bij OpenAI
cacheReadbij cachehits en datcacheWrite0blijft; OpenAI publiceert geen apart tokenveld voor cachewrites. - Als je aanvraagtracing nodig hebt, log dan aanvraag-ID’s en rate-limit-headers afzonderlijk van cachemetrieken. De huidige cachetrace-uitvoer van OpenClaw is gericht op prompt-/sessievorm en genormaliseerd tokengebruik in plaats van ruwe antwoordheaders van providers.
Snelle probleemoplossing
- Hoge
cacheWritebij de meeste beurten: controleer op vluchtige systeempromptinvoer en verifieer dat model/provider je cache-instellingen ondersteunt. - Hoge
cacheWritebij Anthropic: betekent vaak dat het cachebreekpunt terechtkomt op inhoud die bij elke aanvraag verandert. - Lage OpenAI
cacheRead: verifieer dat het stabiele voorvoegsel vooraan staat, dat het herhaalde voorvoegsel minstens 1024 tokens lang is en dat dezelfdeprompt_cache_keyopnieuw wordt gebruikt voor beurten die een cache zouden moeten delen. - Geen effect van
cacheRetention: bevestig dat de modelsleutel overeenkomt metagents.defaults.models["provider/model"]. - Bedrock Nova/Mistral-aanvragen met cache-instellingen: verwachte runtimeforcering naar
none.