Перейти к основному содержанию

Прореживание сеанса

Прореживание сеанса обрезает старые результаты инструментов из контекста в памяти непосредственно перед каждым вызовом LLM. Оно не переписывает историю сеанса на диске (*.jsonl).

Когда оно выполняется

  • Когда mode: "cache-ttl" включено и последний вызов Anthropic для сеанса старше, чем ttl.
  • Влияет только на сообщения, отправляемые модели для данного запроса.
  • Активно только для вызовов Anthropic API (и моделей Anthropic через OpenRouter).
  • Для наилучших результатов сопоставляйте ttl с вашим cacheControlTtl модели.
  • После прореживания окно TTL сбрасывается, поэтому последующие запросы сохраняют кэш до повторного истечения ttl.

Умные значения по умолчанию (Anthropic)

  • Профили OAuth или setup-token: включить прореживание cache-ttl и установить heartbeat на 1h.
  • Профили API key: включить прореживание cache-ttl, установить heartbeat на 30m и значение по умолчанию cacheControlTtl на 1h для моделей Anthropic.
  • Если вы явно задаёте любое из этих значений, OpenClaw не переопределяет их.

Что это улучшает (стоимость + поведение кэша)

  • Зачем прореживать: кэширование промпта Anthropic применяется только в пределах TTL. Если сеанс простаивает дольше TTL, следующий запрос повторно кэширует полный промпт, если вы не обрежете его заранее.
  • Что становится дешевле: прореживание уменьшает размер cacheWrite для первого запроса после истечения TTL.
  • Почему важен сброс TTL: после выполнения прореживания окно кэша сбрасывается, поэтому последующие запросы могут повторно использовать свежекэшированный промпт вместо повторного кэширования всей истории.
  • Чего это не делает: прореживание не добавляет токены и не «удваивает» стоимость; оно лишь изменяет то, что кэшируется в первом запросе после TTL.

Что может быть прорежено

  • Только сообщения toolResult.
  • Сообщения пользователя и ассистента никогда не изменяются.
  • Последние keepLastAssistants сообщений ассистента защищены; результаты инструментов после этой границы не прореживаются.
  • Если сообщений ассистента недостаточно для определения границы, прореживание пропускается.
  • Результаты инструментов, содержащие блоки изображений, пропускаются (никогда не обрезаются/не очищаются).

Оценка окна контекста

Прореживание использует оценочное окно контекста (символы ≈ токены × 4). Базовое окно определяется в следующем порядке:
  1. Переопределение models.providers.*.models[].contextWindow.
  2. Определение модели contextWindow (из реестра моделей).
  3. Значение по умолчанию 200000 токенов.
Если задано agents.defaults.contextTokens, оно рассматривается как ограничение (min) для вычисленного окна.

Режим

cache-ttl

  • Прореживание выполняется только если последний вызов Anthropic старше, чем ttl (по умолчанию 5m).
  • При выполнении: то же поведение мягкой обрезки + жёсткой очистки, что и ранее.

Мягкое и жёсткое прореживание

  • Мягкая обрезка: только для слишком больших результатов инструментов.
    • Сохраняет начало и конец, вставляет ... и добавляет примечание с исходным размером.
    • Пропускает результаты с блоками изображений.
  • Жёсткая очистка: заменяет весь результат инструмента на hardClear.placeholder.

Выбор инструментов

  • tools.allow / tools.deny поддерживают подстановки *.
  • Отрицать победы.
  • Сопоставление не чувствительно к регистру.
  • Пустой список разрешений ⇒ разрешены все инструменты.

Взаимодействие с другими ограничениями

  • Встроенные инструменты уже усекaют собственный вывод; прореживание сеанса — дополнительный слой, предотвращающий накопление чрезмерного объёма вывода инструментов в контексте модели при длительных чатах.
  • Уплотнение — отдельно: уплотнение суммирует и сохраняет, прореживание — временно для каждого запроса. См. /concepts/compaction.

Значения по умолчанию (когда включено)

  • ttl: "5m"
  • keepLastAssistants: 3
  • softTrimRatio: 0.3
  • hardClearRatio: 0.5
  • minPrunableToolChars: 50000
  • softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 }
  • hardClear: { enabled: true, placeholder: "[Old tool result content cleared]" }

Примеры

По умолчанию (выключено):
{
  agent: {
    contextPruning: { mode: "off" },
  },
}
Включить прореживание с учётом TTL:
{
  agent: {
    contextPruning: { mode: "cache-ttl", ttl: "5m" },
  },
}
Ограничить прореживание конкретными инструментами:
{
  agent: {
    contextPruning: {
      mode: "cache-ttl",
      tools: { allow: ["exec", "read"], deny: ["*image*"] },
    },
  },
}
См. справочник по конфигурации: Gateway Configuration