Technical reference
Кешування prompt
Кешування prompt означає, що provider моделі може повторно використовувати незмінні префікси prompt (зазвичай інструкції system/developer та інший стабільний контекст) між ходами замість повторної обробки щоразу. OpenClaw нормалізує використання provider до cacheRead і cacheWrite, коли upstream API напряму надає ці лічильники.
Поверхні статусу також можуть відновлювати лічильники кешу з останнього журналу
використання транскрипту, коли в живому знімку сесії їх бракує, тож /status може й далі
показувати рядок кешу після часткової втрати метаданих сесії. Наявні ненульові живі
значення кешу все одно мають пріоритет над резервними значеннями з транскрипту.
Чому це важливо: менша вартість токенів, швидші відповіді та передбачуваніша продуктивність для довготривалих сесій. Без кешування повторювані prompt щоразу оплачують повну вартість prompt, навіть якщо більшість вхідних даних не змінилася.
У розділах нижче описано всі параметри, пов’язані з кешем, які впливають на повторне використання prompt і вартість токенів.
Посилання на provider:
- Кешування prompt Anthropic: https://platform.claude.com/docs/en/build-with-claude/prompt-caching
- Кешування prompt OpenAI: https://developers.openai.com/api/docs/guides/prompt-caching
- Заголовки API та request ID OpenAI: https://developers.openai.com/api/reference/overview
- Request ID та помилки Anthropic: https://platform.claude.com/docs/en/api/errors
Основні параметри
cacheRetention (глобальне значення за замовчуванням, модель і для кожного агента)
Задайте збереження кешу як глобальне значення за замовчуванням для всіх моделей:
agents:
defaults:
params:
cacheRetention: "long" # none | short | long
Перевизначення для кожної моделі:
agents:
defaults:
models:
"anthropic/claude-opus-4-6":
params:
cacheRetention: "short" # none | short | long
Перевизначення для кожного агента:
agents:
list:
- id: "alerts"
params:
cacheRetention: "none"
Порядок злиття config:
agents.defaults.params(глобальне значення за замовчуванням — застосовується до всіх моделей)agents.defaults.models["provider/model"].params(перевизначення для моделі)agents.list[].params(відповідний id агента; перевизначає за ключем)
contextPruning.mode: "cache-ttl"
Обрізає старий контекст результатів tool після вікон TTL кешу, щоб запити після простою не кешували повторно надмірно велику історію.
agents:
defaults:
contextPruning:
mode: "cache-ttl"
ttl: "1h"
Повну поведінку див. у Обрізанні сесій.
Підігрів кешу через Heartbeat
Heartbeat може підтримувати вікна кешу теплими та зменшувати повторні записи кешу після пауз без активності.
agents:
defaults:
heartbeat:
every: "55m"
Heartbeat для кожного агента підтримується в agents.list[].heartbeat.
Поведінка provider
Anthropic (прямий API)
cacheRetentionпідтримується.- Для профілів автентифікації Anthropic API-key OpenClaw задає
cacheRetention: "short"для посилань на моделі Anthropic, якщо значення не задано. - Відповіді native Messages Anthropic надають і
cache_read_input_tokens, іcache_creation_input_tokens, тож OpenClaw може показувати іcacheRead, іcacheWrite. - Для native-запитів Anthropic
cacheRetention: "short"відповідає типовому ефемерному кешу на 5 хвилин, аcacheRetention: "long"підвищує TTL до 1 години лише на прямих хостахapi.anthropic.com.
OpenAI (прямий API)
- Кешування prompt автоматичне на підтримуваних нових моделях. OpenClaw не потрібно інжектувати маркери кешу на рівні блоків.
- OpenClaw використовує
prompt_cache_key, щоб маршрутизація кешу залишалася стабільною між ходами, і використовуєprompt_cache_retention: "24h"лише колиcacheRetention: "long"вибрано на прямих хостах OpenAI. - OpenAI-сумісні provider Completions отримують
prompt_cache_keyлише тоді, коли їхній config моделі явно задаєcompat.supportsPromptCacheKey: true;cacheRetention: "none"усе одно його пригнічує. - Відповіді OpenAI показують кешовані токени prompt через
usage.prompt_tokens_details.cached_tokens(абоinput_tokens_details.cached_tokensу подіях Responses API). OpenClaw зіставляє це зcacheRead. - OpenAI не надає окремого лічильника токенів запису в кеш, тому
cacheWriteзалишається0на шляхах OpenAI, навіть коли provider прогріває кеш. - OpenAI повертає корисні заголовки трасування та обмеження частоти, такі як
x-request-id,openai-processing-msіx-ratelimit-*, але облік влучань у кеш слід брати з payload використання, а не із заголовків. - На практиці OpenAI часто поводиться як кеш початкового префікса, а не як Anthropic-подібне рухоме повторне використання повної історії. Стабільні ходи з довгим префіксом тексту в поточних live-перевірках можуть виходити на плато близько
4864кешованих токенів, тоді як транскрипти з великою кількістю tool або в стилі MCP часто виходять на плато близько4608кешованих токенів навіть при точних повторах.
Anthropic Vertex
- Моделі Anthropic на Vertex AI (
anthropic-vertex/*) підтримуютьcacheRetentionтак само, як і прямий Anthropic. cacheRetention: "long"відповідає реальному TTL prompt-кешу на 1 годину на endpoint Vertex AI.- Значення кешу за замовчуванням для
anthropic-vertexзбігається зі значенням прямого Anthropic. - Запити Vertex маршрутизуються через формування кешу з урахуванням меж, щоб повторне використання кешу залишалося узгодженим із тим, що фактично отримують provider.
Amazon Bedrock
- Посилання на моделі Anthropic Claude (
amazon-bedrock/*anthropic.claude*) підтримують явну передачуcacheRetention. - Для не-Anthropic моделей Bedrock у runtime примусово задається
cacheRetention: "none".
Моделі OpenRouter
Для посилань на моделі openrouter/anthropic/* OpenClaw інжектує Anthropic
cache_control у блоки prompt system/developer, щоб покращити повторне
використання prompt-кешу лише тоді, коли запит і далі націлений на перевірений маршрут OpenRouter
(openrouter на endpoint за замовчуванням або будь-який provider/base URL, що вказує
на openrouter.ai).
Для посилань на моделі openrouter/deepseek/*, openrouter/moonshot*/* і openrouter/zai/*
дозволено contextPruning.mode: "cache-ttl", оскільки OpenRouter
автоматично обробляє prompt-кешування на боці provider. OpenClaw не інжектує
маркери Anthropic cache_control у ці запити.
Побудова кешу DeepSeek виконується в режимі best-effort і може тривати кілька секунд. У
негайному повторному запиті все ще може бути cached_tokens: 0; перевіряйте це
повторним запитом з тим самим префіксом після короткої затримки та використовуйте usage.prompt_tokens_details.cached_tokens
як сигнал влучання в кеш.
Якщо ви перенаправите модель на довільний проксі-URL, сумісний з OpenAI, OpenClaw припиняє інжектувати ці специфічні для OpenRouter маркери кешу Anthropic.
Інші provider
Якщо provider не підтримує цей режим кешу, cacheRetention не має ефекту.
Прямий API Google Gemini
- Прямий транспорт Gemini (
api: "google-generative-ai") повідомляє про влучання в кеш через upstreamcachedContentTokenCount; OpenClaw зіставляє це зcacheRead. - Коли
cacheRetentionзадано для прямої моделі Gemini, OpenClaw автоматично створює, повторно використовує та оновлює ресурсиcachedContentsдля system prompt у запусках Google AI Studio. Це означає, що вам більше не потрібно попередньо створювати handle cached-content вручну. - Ви все ще можете передати наявний handle Gemini cached-content через
params.cachedContent(або застарілийparams.cached_content) у налаштованій моделі. - Це окремо від кешування префіксів prompt Anthropic/OpenAI. Для Gemini
OpenClaw керує native-ресурсом provider
cachedContents, а не інжектує маркери кешу в запит.
Використання JSON Gemini CLI
- Вивід JSON Gemini CLI також може показувати влучання в кеш через
stats.cached; OpenClaw зіставляє це зcacheRead. - Якщо CLI не надає прямого значення
stats.input, OpenClaw виводить вхідні токени зstats.input_tokens - stats.cached. - Це лише нормалізація використання. Це не означає, що OpenClaw створює Anthropic/OpenAI-подібні маркери prompt-кешу для Gemini CLI.
Межа кешу system-prompt
OpenClaw розділяє system prompt на стабільний префікс і мінливий
суфікс, розділені внутрішньою межею cache-prefix. Вміст над
межею (визначення tool, метадані Skills, файли робочого простору та інший
відносно статичний контекст) упорядковується так, щоб залишатися
байт-ідентичним між ходами. Вміст під межею (наприклад HEARTBEAT.md, часові мітки runtime та
інші метадані для кожного ходу) може змінюватися без інвалідації кешованого
префікса.
Ключові рішення дизайну:
- Стабільні файли контексту проєкту робочого простору впорядковуються перед
HEARTBEAT.md, щоб зміни Heartbeat не ламали стабільний префікс. - Межа застосовується до формування запитів Anthropic-family, OpenAI-family, Google і CLI, тож усі підтримувані provider отримують перевагу від однакової стабільності префікса.
- Запити Codex Responses і Anthropic Vertex маршрутизуються через формування кешу з урахуванням меж, щоб повторне використання кешу залишалося узгодженим із тим, що фактично отримують provider.
- Відбитки system-prompt нормалізуються (пробіли, закінчення рядків, контекст, доданий hook, порядок можливостей runtime), щоб семантично незмінні prompt спільно використовували KV/cache між ходами.
Якщо ви бачите неочікувані стрибки cacheWrite після зміни config або робочого простору,
перевірте, чи потрапляє зміна вище чи нижче межі кешу. Переміщення
мінливого вмісту нижче межі (або його стабілізація) часто вирішує
проблему.
Захист стабільності кешу в OpenClaw
OpenClaw також підтримує детермінованість кількох чутливих до кешу форм payload до того, як запит досягне provider:
- Каталоги tool bundle MCP сортуються детерміновано перед реєстрацією
tool, тож зміни порядку
listTools()не змінюють блок tools і не ламають префікси prompt-кешу. - У застарілих сесіях зі збереженими блоками зображень 3 найновіші завершені ходи залишаються недоторканими; старіші вже оброблені блоки зображень можуть замінюватися маркером, щоб подальші запити з великою кількістю зображень не надсилали знову великі застарілі payload.
Шаблони налаштування
Змішаний трафік (рекомендоване значення за замовчуванням)
Зберігайте довгоживучу базову конфігурацію на основному агенті, а кешування вимикайте для агентів-сповіщувачів із рваним навантаженням:
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"
Базова конфігурація з пріоритетом вартості
- Задайте базове
cacheRetention: "short". - Увімкніть
contextPruning.mode: "cache-ttl". - Тримайте Heartbeat нижче за ваш TTL лише для тих агентів, яким корисний теплий кеш.
Діагностика кешу
OpenClaw надає окремі засоби діагностики cache-trace для вбудованих запусків агента.
Для звичайної діагностики, видимої користувачу, /status та інші підсумки використання можуть використовувати
останній запис використання в транскрипті як резервне джерело для cacheRead /
cacheWrite, коли живий запис сесії не має цих лічильників.
Live regression tests
OpenClaw підтримує один комбінований live regression gate кешу для повторюваних префіксів, ходів tool, ходів із зображеннями, транскриптів tool у стилі MCP і контрольного сценарію Anthropic без кешу.
src/agents/live-cache-regression.live.test.tssrc/agents/live-cache-regression-baseline.ts
Запустіть вузький live gate так:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cache
Базовий файл зберігає останні спостережені live-значення разом зі специфічними для provider порогами регресії, які використовує test. Runner також використовує нові session ID і простори імен prompt для кожного запуску, щоб попередній стан кешу не спотворював поточну regression-вибірку.
Ці tests навмисно не використовують однакові критерії успіху для всіх provider.
Очікування live для Anthropic
- Очікуються явні прогрівальні записи через
cacheWrite. - Очікується майже повне повторне використання історії на повторних ходах, оскільки керування кешем Anthropic просуває точку розриву кешу через усю розмову.
- Поточні live-assertions і далі використовують високі пороги частоти влучань для стабільних шляхів, шляхів tool і зображень.
Очікування live для OpenAI
- Очікуйте лише
cacheRead.cacheWriteзалишається0. - Розглядайте повторне використання кешу на повторних ходах як специфічне для provider плато, а не як Anthropic-подібне рухоме повторне використання повної історії.
- Поточні live-assertions використовують консервативні порогові перевірки, виведені зі спостережуваної live-поведінки на
gpt-5.4-mini:- стабільний префікс:
cacheRead >= 4608, частота влучань>= 0.90 - транскрипт tool:
cacheRead >= 4096, частота влучань>= 0.85 - транскрипт із зображенням:
cacheRead >= 3840, частота влучань>= 0.82 - транскрипт у стилі MCP:
cacheRead >= 4096, частота влучань>= 0.85
- стабільний префікс:
Свіжа комбінована live-перевірка від 2026-04-04 дала такі результати:
- стабільний префікс:
cacheRead=4864, частота влучань0.966 - транскрипт tool:
cacheRead=4608, частота влучань0.896 - транскрипт із зображенням:
cacheRead=4864, частота влучань0.954 - транскрипт у стилі MCP:
cacheRead=4608, частота влучань0.891
Нещодавній локальний wall-clock час для комбінованого gate становив приблизно 88s.
Чому assert-умови відрізняються:
- Anthropic надає явні точки розриву кешу та рухоме повторне використання історії розмови.
- Кешування prompt OpenAI все ще чутливе до точного префікса, але ефективний префікс, який можна повторно використати в live-трафіку Responses, може досягати плато раніше за повний prompt.
- Через це порівняння Anthropic і OpenAI за єдиним міжprovider-ним порогом у відсотках створює хибні регресії.
Config diagnostics.cacheTrace
diagnostics:
cacheTrace:
enabled: true
filePath: "~/.openclaw/logs/cache-trace.jsonl" # optional
includeMessages: false # default true
includePrompt: false # default true
includeSystem: false # default true
Значення за замовчуванням:
filePath:$OPENCLAW_STATE_DIR/logs/cache-trace.jsonlincludeMessages:trueincludePrompt:trueincludeSystem:true
Перемикачі env (одноразове налагодження)
OPENCLAW_CACHE_TRACE=1вмикає трасування кешу.OPENCLAW_CACHE_TRACE_FILE=/path/to/cache-trace.jsonlперевизначає шлях виводу.OPENCLAW_CACHE_TRACE_MESSAGES=0|1перемикає захоплення повного payload повідомлень.OPENCLAW_CACHE_TRACE_PROMPT=0|1перемикає захоплення тексту prompt.OPENCLAW_CACHE_TRACE_SYSTEM=0|1перемикає захоплення system prompt.
Що перевіряти
- Події трасування кешу мають формат JSONL і включають поетапні знімки, як-от
session:loaded,prompt:before,stream:contextіsession:after. - Вплив токенів кешу для кожного ходу видно у звичайних поверхнях використання через
cacheReadіcacheWrite(наприклад/usage fullі підсумки використання сесії). - Для Anthropic очікуйте і
cacheRead, іcacheWrite, коли кешування активне. - Для OpenAI очікуйте
cacheReadпри влучаннях у кеш, аcacheWriteмає залишатися0; OpenAI не публікує окреме поле токенів запису в кеш. - Якщо вам потрібне трасування запитів, журналюйте request ID і заголовки обмеження частоти окремо від метрик кешу. Поточний вивід cache-trace в OpenClaw зосереджений на формі prompt/сесії та нормалізованому використанні токенів, а не на сирих заголовках відповідей provider.
Швидке усунення несправностей
- Високий
cacheWriteна більшості ходів: перевірте мінливі вхідні дані system prompt і підтвердьте, що model/provider підтримує ваші налаштування кешу. - Високий
cacheWriteна Anthropic: часто означає, що точка розриву кешу потрапляє на вміст, який змінюється в кожному запиті. - Низький
cacheReadв OpenAI: перевірте, що стабільний префікс розміщено на початку, повторюваний префікс має щонайменше 1024 токени, і для ходів, які мають спільно використовувати кеш, повторно використовується той самийprompt_cache_key. - Немає ефекту від
cacheRetention: підтвердьте, що ключ моделі збігається зagents.defaults.models["provider/model"]. - Запити Bedrock Nova/Mistral з налаштуваннями кешу: очікуване примусове значення runtime
none.
Пов’язані docs: