Technical reference
Кешування промптів
Кешування промптів дає змогу постачальнику моделі повторно використовувати незмінний префікс промпту (системні інструкції та інструкції розробника, визначення інструментів, інший стабільний контекст) між запитами замість повторного оброблення з кожним запитом. Це зменшує витрати токенів і затримку в тривалих сеансах із повторюваним контекстом.
OpenClaw нормалізує дані про використання від постачальника у cacheRead і cacheWrite скрізь, де зовнішній API надає ці лічильники. Зведення використання (/status і подібні) використовують останній запис про використання з транскрипту як резервний, якщо поточний знімок сеансу не містить лічильників кешу; ненульове поточне значення завжди має пріоритет над резервним.
Довідкові матеріали постачальників:
Основні параметри
cacheRetention
Значення: "none" | "short" | "long". Можна налаштувати як глобальне типове значення, окремо для моделі та окремо для агента.
agents: defaults: params: cacheRetention: "long" # none | short | long models: "anthropic/claude-opus-4-6": params: cacheRetention: "short" # перевизначає глобальне типове значення для цієї моделі list: - id: "alerts" params: cacheRetention: "none" # перевизначає обидва типові значення для цього агентаПорядок об’єднання (пізніше значення має пріоритет):
agents.defaults.params— глобальне типове значення для всіх моделейagents.defaults.models["provider/model"].params— перевизначення для окремої моделіagents.list[].params— перевизначення для окремого агента, зіставленого за ідентифікатором агента
Джерело: src/agents/embedded-agent-runner/extra-params.ts (resolveExtraParams).
contextPruning.mode: "cache-ttl"
Видаляє старий контекст результатів інструментів після завершення вікна TTL кешу, щоб запит після періоду бездіяльності не кешував повторно надмірно велику історію.
agents: defaults: contextPruning: mode: "cache-ttl" ttl: "1h"Повний опис поведінки див. у розділі Очищення сеансів.
Підтримання кешу активним за допомогою Heartbeat
Heartbeat може підтримувати вікна кешу активними та зменшувати кількість повторних записів у кеш після періодів бездіяльності. Налаштовується глобально (agents.defaults.heartbeat) або окремо для агента (agents.list[].heartbeat).
agents: defaults: heartbeat: every: "55m"Поведінка постачальників
Anthropic (прямий API та Vertex AI)
cacheRetentionпідтримується для постачальниківanthropicіanthropic-vertex, а також для моделей Claude вamazon-bedrockі спеціальних кінцевих точках, сумісних зanthropic-messages, колиcacheRetentionзадано явно.- Якщо значення не задано, OpenClaw встановлює
cacheRetention: "short"для прямого Anthropic (лише для постачальниківanthropicіanthropic-vertex; інші маршрути сімейства Anthropic потребують явного значення). - Власні відповіді Anthropic Messages надають
cache_read_input_tokensіcache_creation_input_tokens, зіставлені зcacheReadіcacheWrite. cacheRetention: "short"відповідає типовому тимчасовому кешу на 5 хвилин. ЯкщоcacheRetention: "long"задано явно, запитується TTL на 1 годину (cache_control: { type: "ephemeral", ttl: "1h" }). Неявне або задане через змінну середовища тривале зберігання (OPENCLAW_CACHE_RETENTION=longбез явногоcacheRetention) переходить на TTL в 1 годину лише на хостахapi.anthropic.comабо Vertex AI (aiplatform.googleapis.com/*-aiplatform.googleapis.com); інші хости зберігають 5-хвилинний кеш.
Джерело: src/agents/anthropic-payload-policy.ts (resolveAnthropicEphemeralCacheControl, isLongTtlEligibleEndpoint).
OpenAI (прямий API)
- Кешування промптів відбувається автоматично в підтримуваних нових моделях; OpenClaw не додає маркери кешу на рівні блоків.
- OpenClaw надсилає
prompt_cache_key, щоб маршрутизація кешу залишалася стабільною між запитами. Прямі хостиapi.openai.comотримують його автоматично. Для проксі-серверів, сумісних з OpenAI (oMLX, llama.cpp, спеціальні кінцеві точки), потрібно явно ввімкнутиcompat.supportsPromptCacheKey: trueу конфігурації моделі — для проксі це ніколи не визначається автоматично. prompt_cache_retention: "24h"додається лише тоді, коли вибраноcacheRetention: "long"і визначена кінцева точка підтримує як ключ кешу, так і тривале зберігання (compat.supportsLongCacheRetention, типовоtrue; профілі сумісності Together AI та Cloudflare вимикають його).cacheRetention: "none"прибирає обидва поля.- Влучання в кеш відображаються через
usage.prompt_tokens_details.cached_tokens(Chat Completions) абоinput_tokens_details.cached_tokens(Responses API) і зіставляються зcacheRead. - Корисні навантаження Responses API також можуть надавати
input_tokens_details.cache_write_tokens, що зіставляється зcacheWriteй оплачується за тарифом запису в кеш для моделі; якщо поле відсутнє в корисному навантаженні Responses, значенняcacheWriteзалишається0. API Chat Completions від OpenAI не документує і не повертає лічильникcache_write_tokens, але OpenClaw усе одно читає тамprompt_tokens_details.cache_write_tokensдля сумісних з OpenRouter і подібних до DeepSeek проксі, які повідомляють окрему кількість записів. - На практиці OpenAI працює радше як кеш початкового префікса, ніж як повторне використання всієї рухомої історії в Anthropic — див. нижче Очікування від OpenAI у реальному середовищі.
Amazon Bedrock
- Посилання на моделі Anthropic Claude (
amazon-bedrock/*anthropic.claude*, а також префікси системних профілів виведення AWSus./eu./global.anthropic.claude*) підтримують явну наскрізну передачуcacheRetention. - Моделі Bedrock, що не належать до Anthropic (наприклад,
amazon.nova-*), під час виконання не використовують зберігання кешу незалежно від налаштованого значенняcacheRetention. - Непрозорі ARN профілів виведення застосунків Bedrock (ідентифікатори профілів, які не містять
claude) також не використовують зберігання кешу, якщоcacheRetentionне задано явно, оскільки сімейство моделі неможливо визначити лише з ARN.
OpenRouter
Для посилань на моделі openrouter/anthropic/* OpenClaw додає маркери Anthropic cache_control до блоків системного промпту та промпту розробника, але лише коли запит усе ще спрямовано через перевірений маршрут OpenRouter (openrouter із типовою кінцевою точкою або будь-який постачальник чи базова URL-адреса, що дозволяється в openrouter.ai). Переспрямування моделі на довільну URL-адресу проксі, сумісного з OpenAI, припиняє це додавання.
contextPruning.mode: "cache-ttl" дозволено для посилань на моделі openrouter/anthropic/*, openrouter/deepseek/*, openrouter/moonshot/*, openrouter/moonshotai/* і openrouter/zai/*, оскільки ці маршрути обробляють кешування промптів на стороні постачальника без потреби в маркерах, доданих OpenClaw.
Джерело: extensions/openrouter/index.ts (OPENROUTER_CACHE_TTL_MODEL_PREFIXES).
Створення кешу DeepSeek в OpenRouter виконується за можливості й може тривати кілька секунд; негайний наступний запит усе ще може показати cached_tokens: 0. Перевірте це повторним запитом із тим самим префіксом після короткої затримки, використовуючи usage.prompt_tokens_details.cached_tokens як сигнал влучання в кеш.
Google Gemini (прямий API)
- Прямий транспорт Gemini (
api: "google-generative-ai") повідомляє про влучання в кеш через зовнішнє полеcachedContentTokenCount, зіставлене зcacheRead. - Відповідні сімейства моделей:
gemini-2.5*іgemini-3*(варіанти Live/preview, що не відповідають цим префіксам, виключено, наприкладgemini-live-2.5-flash-preview). - Коли
cacheRetentionзадано для відповідної моделі, OpenClaw автоматично створює, повторно використовує та оновлює ресурсcachedContentsдля системного промпту — вручну передавати дескриптор кешованого вмісту не потрібно. TTL становить300sдляcacheRetention: "short"і3600sдля"long". - Ви все ще можете передати наявний дескриптор кешованого вмісту Gemini через
params.cachedContent(або застарілийparams.cached_content); явний дескриптор повністю оминає шлях автоматичного керування кешем. - Це відрізняється від кешування префікса промпту Anthropic/OpenAI: замість додавання вбудованих маркерів кешу OpenClaw керує власним для постачальника ресурсом
cachedContentsу Gemini.
Джерело: src/agents/embedded-agent-runner/google-prompt-cache.ts.
Постачальники на основі CLI-обв’язки (Claude Code, Gemini CLI)
Серверні частини CLI, які видають події використання JSONL (jsonlDialect: "claude-stream-json" або "gemini-stream-json"), проходять через спільний аналізатор використання, що розпізнає кілька варіантів назв полів, зокрема простий лічильник cached, зіставлений з cacheRead. Якщо корисне навантаження JSON від CLI не містить безпосереднього поля вхідних токенів, OpenClaw обчислює його як input_tokens - cached. Це лише нормалізація використання — вона не створює маркери кешу промпту в стилі Anthropic/OpenAI для моделей, керованих через CLI.
Джерело: src/agents/cli-output.ts (toCliUsage).
Інші постачальники
Якщо постачальник не підтримує жодного із зазначених вище режимів кешування, cacheRetention не має ефекту.
Межа кешування системного промпту
OpenClaw розділяє системний промпт на стабільний префікс і мінливий суфікс за внутрішньою межею префікса кешу. Вміст над межею (визначення інструментів, метадані Skills, файли робочого простору) впорядковується так, щоб залишатися побайтово ідентичним між запитами. Вміст під межею (наприклад, HEARTBEAT.md, часові позначки виконання, інші метадані окремого запиту) може змінюватися без анулювання кешованого префікса.
Основні проєктні рішення:
- Стабільні файли контексту проєкту в робочому просторі розташовуються перед
HEARTBEAT.md, щоб зміни Heartbeat не порушували стабільний префікс. - Межа застосовується під час формування транспорту для сімейств Anthropic і OpenAI, Google та CLI, тому всі підтримувані постачальники отримують переваги однакової стабільності префікса.
- Запити Codex Responses і Anthropic Vertex спрямовуються через формування кешу з урахуванням межі, щоб повторне використання кешу відповідало тому, що фактично отримують постачальники.
- Відбитки системних промптів нормалізуються (пробіли, завершення рядків, доданий хуками контекст, порядок можливостей середовища виконання), тому семантично незмінні промпти використовують спільний кеш між запитами.
Якщо після зміни конфігурації або робочого простору ви бачите неочікувані стрибки cacheWrite, перевірте, чи потрапляє зміна вище або нижче межі кешу. Переміщення мінливого вмісту нижче межі (або його стабілізація) зазвичай усуває проблему.
Запобіжники стабільності кешу OpenClaw
- Вбудовані каталоги інструментів MCP детерміновано сортуються (спочатку за назвою сервера, потім за назвою інструмента) перед реєстрацією інструментів, тому зміни порядку
listTools()не спричиняють змін у блоці інструментів і не порушують префікси кешу промптів. - У застарілих сеансах зі збереженими блоками зображень 3 останні завершені обміни залишаються без змін (враховуються всі завершені обміни, а не лише ті, що містять зображення). Старіші вже оброблені блоки зображень замінюються текстовим маркером, щоб наступні запити з великою кількістю зображень не надсилали повторно великі застарілі корисні навантаження.
Схеми налаштування
Змішаний трафік (рекомендоване типове налаштування)
Зберігайте довготривалу базову конфігурацію для основного агента та вимкніть кешування для агентів сповіщень із нерівномірним навантаженням:
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 виконує одну об’єднану перевірку регресій кешу в реальному середовищі, що охоплює повторювані префікси, обміни з інструментами, обміни із зображеннями, транскрипти інструментів у стилі MCP і контрольний сценарій Anthropic без кешу.
src/agents/live-cache-regression.live.test.tssrc/agents/live-cache-regression-runner.tssrc/agents/live-cache-regression-baseline.ts
Запустіть її командою:
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cacheФайл базових показників зберігає останні спостережені значення в реальному середовищі, а також специфічні для постачальника нижні межі регресії, з якими порівнює тест. Кожен запуск використовує нові ідентифікатори сеансів і простори назв промптів, тому попередній стан кешу не забруднює поточну вибірку. Для Anthropic і OpenAI застосовуються різні правила: недосягнення нижньої межі Anthropic є критичною регресією (тест завершується невдало), тоді як недосягнення нижньої межі OpenAI лише відстежується (записується як попередження й не призводить до невдалого запуску). Вони не використовують спільний міжпостачальницький поріг.
Очікування від Anthropic у реальному середовищі
- Очікуйте явних записів прогрівання через
cacheWrite. - Очікуйте повторного використання майже всієї історії під час повторних ходів, оскільки керування кешем Anthropic переміщує точку розриву кешу вперед упродовж розмови.
- Базові нижні межі для стабільних сценаріїв, сценаріїв з інструментами, зображеннями та сценаріїв у стилі MCP є жорсткими бар’єрами захисту від регресій.
Очікування від OpenAI у реальному середовищі
- Очікуйте лише
cacheRead; у Chat Completions значенняcacheWriteзалишається0. - Розглядайте повторне використання кешу під час повторних ходів як специфічне для постачальника плато, а не як характерне для Anthropic рухоме повторне використання всієї історії.
- Нижні межі використовуються лише для спостереження (промах реєструється як попередження, а не як помилка тесту) і визначені на основі поведінки
gpt-5.4-mini, спостереженої в реальному середовищі:
| Сценарій | Нижня межа cacheRead |
Нижня межа частки влучень |
|---|---|---|
| Стабільний префікс | 4,608 | 0.90 |
| Транскрипт інструментів | 4,096 | 0.85 |
| Транскрипт із зображеннями | 3,840 | 0.82 |
| Транскрипт у стилі MCP | 4,096 | 0.85 |
Останні спостережені базові значення (з live-cache-regression-baseline.ts) становили: стабільний префікс — cacheRead=4864, частка влучень — 0.966; транскрипт інструментів — cacheRead=4608, частка влучень — 0.896; транскрипт із зображеннями — cacheRead=4864, частка влучень — 0.954; транскрипт у стилі MCP — cacheRead=4608, частка влучень — 0.891.
Чому перевірки відрізняються: Anthropic надає явні точки розриву кешу та рухоме повторне використання історії розмови, тоді як ефективний придатний до повторного використання префікс OpenAI у реальному трафіку може досягати плато раніше, ніж буде охоплено весь запит. Порівняння двох постачальників за єдиним міжпостачальницьким пороговим відсотком спричиняє хибні регресії.
Конфігурація diagnostics.cacheTrace
diagnostics: cacheTrace: enabled: true filePath: "~/.openclaw/logs/cache-trace.jsonl" # необов’язково includeMessages: false # типово true includePrompt: false # типово true includeSystem: false # типово trueТипові значення:
| Ключ | Типове значення |
|---|---|
filePath |
$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl |
includeMessages |
true |
includePrompt |
true |
includeSystem |
true |
Перемикачі середовища (для разового налагодження)
| Змінна | Дія |
|---|---|
OPENCLAW_CACHE_TRACE=1 |
Вмикає трасування кешу |
OPENCLAW_CACHE_TRACE_FILE=path |
Перевизначає шлях виведення |
OPENCLAW_CACHE_TRACE_MESSAGES=0|1 |
Перемикає захоплення повного вмісту повідомлень |
OPENCLAW_CACHE_TRACE_PROMPT=0|1 |
Перемикає захоплення тексту запиту |
OPENCLAW_CACHE_TRACE_SYSTEM=0|1 |
Перемикає захоплення системного запиту |
Що перевіряти
- Події трасування кешу записуються у форматі JSONL із поетапними знімками, як-от
session:loaded,prompt:before,stream:contextіsession:after. - Вплив кешованих токенів для кожного ходу видно у звичайних інтерфейсах використання:
cacheReadіcacheWriteвідображаються в/usage tokens,/status, зведеннях використання сеансу та власних макетахmessages.usageTemplate. - Для Anthropic за активного кешування очікуйте як
cacheRead, так іcacheWrite. - Для OpenAI очікуйте
cacheReadу разі влучення в кеш;cacheWriteзаповнюється лише у вмісті Responses API, який містить це поле (див. OpenAI вище). - OpenAI також повертає заголовки трасування та обмеження частоти запитів, як-от
x-request-id,openai-processing-msіx-ratelimit-*; використовуйте їх для трасування запитів, але облік влучень у кеш усе одно має походити з даних про використання, а не із заголовків.
Швидке усунення несправностей
- Високе значення
cacheWriteна більшості ходів: перевірте наявність мінливих вхідних даних системного запиту; переконайтеся, що модель або постачальник підтримує ваші параметри кешу. - Високе значення
cacheWriteв Anthropic: часто означає, що точка розриву кешу припадає на вміст, який змінюється з кожним запитом. - Низьке значення
cacheReadв OpenAI: переконайтеся, що стабільний префікс розташований на початку, повторюваний префікс містить щонайменше 1024 токени, а те саме значенняprompt_cache_keyповторно використовується для ходів, які мають спільно використовувати кеш. - Відсутній ефект від
cacheRetention: переконайтеся, що ключ моделі відповідаєagents.defaults.models["provider/model"]. - Запити Bedrock Nova з параметрами кешу: це очікувана поведінка — під час виконання для них не застосовується утримання кешу.
Пов’язана документація: