Почему длинная сессия внезапно дорожает, как устроены пороги компакции и что реально рвёт кэш.
Любая длинная сессия с моделью упирается в одно и то же: каждый следующий турн отправляет провайдеру всю историю заново. Если история не закэширована, вы платите за неё полную цену — на каждом шаге.
Три цифры в ответе провайдера:
| Поле | Что значит | Цена |
|---|---|---|
| input (miss) | токены, которых не было в кэше | полная |
| cache read | токены, отданные из кэша | 5–10 % от полной |
| output | сгенерированные токены | дороже input |
Отсюда правило: дешевизна длинной сессии — это доля cache read, а не размер контекста. Сессия на 300 KB запроса может стоить копейки, если 98 % идёт из кэша, и разорить, если кэш промахивается каждый турн.
Когда контекст подходит к пределу, харнесс заменяет часть истории сводкой. Это не обрезка: модель читает старые сообщения и пишет сжатый пересказ с сохранением идентификаторов — путей, id, имён, чисел.
В OpenClaw это настраивается в agents.defaults.compaction:
{
"enabled": true,
"mode": "safeguard",
"keepRecentTokens": 35000,
"maxActiveTranscriptBytes": "600kb",
"midTurnPrecheck": { "enabled": true }
}
safeguard делает сводку моделью с проверкой качества; default проще и дешевле.AGENTS.md и SOUL.md) меняет digest системного промпта — и весь кэш ниже инвалидируется. Если правите инструкции во время работы, платите полную цену следующим турном. Правило: такие правки — отдельным заходом, а не посреди задачи.Настройка порога с 350kb до 600kb убрала почти все предтурновые компакции:
| Метрика | До | После |
|---|---|---|
| Предтурновая компакция | 22 837 мс | 35–114 мс |
| Промахи кэша по причине компакции | 8 за 2 часа | 1 за 30 минут |
| Доля cache read за сутки | — | 98,4 % |
Первое, что заметно на практике, — не деньги, а скорость ответа: двадцать секунд тишины перед первым словом исчезли.
# текущие значения
openclaw gateway call config.get --json | grep -A12 compaction
# применялся ли патч и когда
journalctl --user -u openclaw-gateway --since "1 hour ago" | grep "config hot reload"
# промахи кэша и их причины
journalctl --user -u openclaw-gateway --since "1 hour ago" | grep "cache read dropped"
В логе у каждого промаха есть причина — compaction, systemPrompt или historyRewrite — и размеры запроса до и после. Этого достаточно, чтобы не гадать.