Technical reference

Подробный разбор управления сеансами

OpenClaw управляет сессиями от начала до конца в этих областях:

  • Маршрутизация сессий (как входящие сообщения сопоставляются с sessionKey)
  • Хранилище сессий (sessions.json) и то, что оно отслеживает
  • Сохранение транскрипта (*.jsonl) и его структура
  • Гигиена транскрипта (исправления, специфичные для провайдера, перед запусками)
  • Ограничения контекста (окно контекста и отслеживаемые токены)
  • Compaction (ручная и автоматическая Compaction) и где подключать работу перед Compaction
  • Тихое обслуживание (записи памяти, которые не должны создавать видимый пользователю вывод)

Если сначала нужен обзор более высокого уровня, начните с:


Источник истины: Gateway

OpenClaw спроектирован вокруг единого процесса Gateway, который владеет состоянием сессий.

  • Интерфейсы UI (приложение macOS, веб Control UI, TUI) должны запрашивать у Gateway списки сессий и количество токенов.
  • В удаленном режиме файлы сессий находятся на удаленном хосте; «проверка локальных файлов Mac» не отразит то, что использует Gateway.

Два уровня сохранения

OpenClaw сохраняет сессии на двух уровнях:

  1. Хранилище сессий (sessions.json)

    • Карта ключ/значение: sessionKey -> SessionEntry
    • Небольшое, изменяемое, безопасное для редактирования (или удаления записей)
    • Отслеживает метаданные сессии (текущий идентификатор сессии, последняя активность, переключатели, счетчики токенов и т. д.)
  2. Транскрипт (<sessionId>.jsonl)

    • Транскрипт только для добавления с древовидной структурой (записи имеют id + parentId)
    • Хранит фактическую беседу + вызовы инструментов + сводки Compaction
    • Используется для восстановления контекста модели в будущих ходах
    • Контрольные точки Compaction являются метаданными над последующим компактированным транскриптом. Новые Compaction не записывают вторую копию .checkpoint.*.jsonl.

Читателям истории Gateway следует избегать материализации всего транскрипта, если поверхности явно не нужен произвольный исторический доступ. История первой страницы, встроенная история чата, восстановление после перезапуска и проверки токенов/использования используют ограниченное чтение хвоста. Полные сканирования транскрипта проходят через асинхронный индекс транскриптов, который кэшируется по пути файла плюс mtimeMs/size и используется совместно параллельными читателями.


Расположения на диске

Для каждого агента на хосте Gateway:

  • Хранилище: ~/.openclaw/agents/<agentId>/sessions/sessions.json
  • Транскрипты: ~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl
    • Сессии тем Telegram: .../<sessionId>-topic-<threadId>.jsonl

OpenClaw разрешает эти пути через src/config/sessions.ts.


Обслуживание хранилища и управление диском

Сохранение сессий имеет автоматические элементы управления обслуживанием (session.maintenance) для sessions.json, артефактов транскриптов и побочных файлов траекторий:

  • mode: enforce (по умолчанию) или warn
  • pruneAfter: порог возраста устаревших записей (по умолчанию 30d)
  • maxEntries: ограничение количества записей в sessions.json (по умолчанию 500)
  • Удержание краткоживущих пробных запусков модели Gateway фиксировано на 24h, но срабатывает только под давлением: оно удаляет устаревшие строгие строки проб только при достижении давления обслуживания/лимита записей сессий. Это применяется только к строгим явным ключам проб, соответствующим agent:*:explicit:model-run-<uuid>, и выполняется перед глобальной очисткой/ограничением устаревших записей, когда запускается.
  • resetArchiveRetention: удержание архивов транскриптов *.reset.<timestamp> (по умолчанию: то же, что pruneAfter; false отключает очистку)
  • maxDiskBytes: необязательный бюджет каталога сессий
  • highWaterBytes: необязательная цель после очистки (по умолчанию 80% от maxDiskBytes)

Обычные записи Gateway проходят через писатель сессий для каждого хранилища, который сериализует внутрипроцессные мутации без взятия runtime-блокировки файла. Помощники исправлений на горячем пути заимствуют проверенный изменяемый кэш, пока удерживают этот слот писателя, поэтому большие файлы sessions.json не клонируются и не перечитываются при каждом обновлении метаданных. Runtime-код должен предпочитать updateSessionStore(...) или updateSessionStoreEntry(...); прямые сохранения всего хранилища являются инструментами совместимости и офлайн-обслуживания. Когда Gateway доступен, недемонстрационные openclaw sessions cleanup и openclaw agents delete делегируют мутации хранилища Gateway, чтобы очистка подключалась к той же очереди писателя; --store <path> — это явный путь офлайн-исправления для прямого обслуживания файлов. Очистка maxEntries по-прежнему выполняется пакетами для производственных лимитов, поэтому хранилище может недолго превышать настроенный лимит, прежде чем следующая очистка до верхнего порога перепишет его обратно вниз. Чтения хранилища сессий не обрезают и не ограничивают записи во время запуска Gateway; для очистки используйте записи или openclaw sessions cleanup --enforce. openclaw sessions cleanup --enforce по-прежнему немедленно применяет настроенный лимит и удаляет старые неиспользуемые артефакты транскриптов, контрольных точек и траекторий, даже когда дисковый бюджет не настроен.

Обслуживание сохраняет долговечные внешние указатели бесед, такие как групповые сессии и сессии чатов, ограниченные потоками, но синтетические runtime-записи для cron, hooks, heartbeat, ACP и субагентов все равно могут быть удалены, когда они превышают настроенный возраст, количество или дисковый бюджет. Сессии пробных запусков модели Gateway используют отдельное удержание модельных запусков 24h только когда их ключ точно соответствует agent:*:explicit:model-run-<uuid>; другие явные сессии не входят в это удержание. Очистка модельных запусков применяется только под давлением лимита записей сессий. Изолированные cron-запуски сохраняют собственный элемент управления cron.sessionRetention, независимый от удержания пробных модельных запусков.

OpenClaw больше не создает автоматические ротационные резервные копии sessions.json.bak.* во время записей Gateway. Устаревший ключ session.maintenance.rotateBytes игнорируется, а openclaw doctor --fix удаляет его из старых конфигураций.

Мутации транскриптов используют блокировку записи сессии на файле транскрипта. Получение блокировки ожидает до session.writeLock.acquireTimeoutMs, прежде чем вывести ошибку занятой сессии; значение по умолчанию — 60000 мс. Повышайте его только когда легитимная подготовка, очистка, Compaction или работа зеркала транскрипта конкурируют дольше на медленных машинах. session.writeLock.staleMs управляет тем, когда существующая блокировка может быть перехвачена как устаревшая; значение по умолчанию — 1800000 мс. session.writeLock.maxHoldMs управляет порогом освобождения внутрипроцессным сторожем; значение по умолчанию — 300000 мс. Экстренные переопределения env: OPENCLAW_SESSION_WRITE_LOCK_ACQUIRE_TIMEOUT_MS, OPENCLAW_SESSION_WRITE_LOCK_STALE_MS и OPENCLAW_SESSION_WRITE_LOCK_MAX_HOLD_MS.

Порядок принудительного применения для очистки дискового бюджета (mode: "enforce"):

  1. Сначала удалить самые старые архивные, бесхозные транскриптовые или бесхозные артефакты траекторий.
  2. Если объем все еще выше цели, вытеснить самые старые записи сессий и их файлы транскриптов/траекторий.
  3. Продолжать, пока использование не станет на уровне или ниже highWaterBytes.

В mode: "warn" OpenClaw сообщает о потенциальных вытеснениях, но не изменяет хранилище/файлы.

Запустить обслуживание по требованию:

bash
openclaw sessions cleanup --dry-runopenclaw sessions cleanup --enforce

Сессии Cron и журналы запусков

Изолированные cron-запуски также создают записи сессий/транскрипты и имеют выделенные элементы управления удержанием:

  • cron.sessionRetention (по умолчанию 24h) удаляет старые изолированные сессии cron-запусков из хранилища сессий (false отключает).
  • cron.runLog.keepLines удаляет удерживаемые строки истории запусков SQLite для каждой cron-задачи (по умолчанию: 2000). cron.runLog.maxBytes остается принимаемым для старых файловых журналов запусков.

Когда cron принудительно создает новую изолированную сессию запуска, он очищает предыдущую запись сессии cron:<jobId> перед записью новой строки. Он переносит безопасные предпочтения, такие как настройки thinking/fast/verbose, метки и явные выбранные пользователем переопределения модели/auth. Он отбрасывает окружающий контекст беседы, такой как маршрутизация канала/группы, политика отправки или очереди, повышение прав, источник и runtime-привязка ACP, чтобы свежий изолированный запуск не мог унаследовать устаревшую доставку или runtime-полномочия от более старого запуска.


Ключи сессий (sessionKey)

sessionKey определяет, в каком контейнере беседы вы находитесь (маршрутизация + изоляция).

Распространенные шаблоны:

  • Основной/прямой чат (для каждого агента): agent:<agentId>:<mainKey> (по умолчанию main)
  • Группа: agent:<agentId>:<channel>:group:<id>
  • Комната/канал (Discord/Slack): agent:<agentId>:<channel>:channel:<id> или ...:room:<id>
  • Cron: cron:<job.id>
  • Webhook: hook:<uuid> (если не переопределен)

Канонические правила задокументированы в /concepts/session.


Идентификаторы сессий (sessionId)

Каждый sessionKey указывает на текущий sessionId (файл транскрипта, который продолжает беседу).

Практические правила:

  • Сброс (/new, /reset) создает новый sessionId для этого sessionKey.
  • Ежедневный сброс (по умолчанию 4:00 AM по локальному времени на хосте Gateway) создает новый sessionId при следующем сообщении после границы сброса.
  • Истечение простоя (session.reset.idleMinutes или устаревший session.idleMinutes) создает новый sessionId, когда сообщение приходит после окна простоя. Когда настроены и ежедневный сброс, и простой, побеждает то, что истекает первым.
  • Возобновление при переподключении Control UI может сохранить текущую видимую сессию для одной отправки после переподключения, когда Gateway получает соответствующий sessionId от клиентского UI оператора. Обычные устаревшие отправки все равно создают новый sessionId.
  • Системные события (heartbeat, пробуждения cron, уведомления exec, служебный учет Gateway) могут изменять строку сессии, но не продлевают свежесть ежедневного/idle-сброса. Перекат сброса отбрасывает поставленные в очередь уведомления системных событий для предыдущей сессии до построения свежего промпта.
  • Политика родительского форка использует активную ветку OpenClaw при создании потока или форка субагента. Если эта ветка слишком велика, OpenClaw запускает дочерний объект с изолированным контекстом вместо сбоя или наследования непригодной истории. Политика размера автоматическая; устаревшая конфигурация session.parentForkMaxTokens удаляется openclaw doctor --fix.

Деталь реализации: решение принимается в initSessionState() в src/auto-reply/reply/session.ts.


Схема хранилища сессий (sessions.json)

Тип значения хранилища — SessionEntry в src/config/sessions.ts.

Ключевые поля (не исчерпывающий список):

  • sessionId: идентификатор текущей расшифровки (имя файла выводится из него, если не задан sessionFile)
  • sessionStartedAt: метка времени начала для текущего sessionId; она используется для свежести ежедневного сброса. Устаревшие строки могут выводить ее из заголовка JSONL-сессии.
  • lastInteractionAt: метка времени последнего реального взаимодействия пользователя/канала; она используется для свежести сброса по бездействию, чтобы события Heartbeat, Cron и exec не поддерживали сессии активными. Устаревшие строки без этого поля для свежести по бездействию откатываются к восстановленному времени начала сессии.
  • updatedAt: метка времени последней мутации строки хранилища, используется для списков, очистки и учета. Она не является источником истины для свежести ежедневного/idle-сброса.
  • archivedAt: необязательная метка времени архивации. Архивированные сессии остаются в хранилище с нетронутой расшифровкой и исключаются из обычных списков активных сессий.
  • pinnedAt: необязательная метка времени закрепления. Активные закрепленные сессии сортируются перед незакрепленными; архивация сессии сбрасывает ее закрепление.
  • Взаимодействие с потоками Codex: оба поля следуют форме управления потоками Codex — булевы значения archived/pinned на проводе всегда выводятся из метки времени и проставляются на стороне сервера, совпадая с семантикой Codex threads.archived_at и сериализацией camelCase. Метки времени OpenClaw — это миллисекунды эпохи, а Codex использует секунды эпохи, поэтому мосты конвертируют их на границе codex plugin. В Codex пока нет API для закрепления (только thread/archive/thread/unarchive); закрепленное состояние остается на стороне OpenClaw, пока такой API не появится, после чего совпадающая форма позволит связанным сессиям механически выполнять круговую передачу состояния закрепления.
  • sessionFile: необязательное явное переопределение пути расшифровки
  • chatType: direct | group | room (помогает UI и политике отправки)
  • provider, subject, room, space, displayName: метаданные для маркировки группы/канала
  • Переключатели:
    • thinkingLevel, verboseLevel, reasoningLevel, elevatedLevel
    • sendPolicy (переопределение для отдельной сессии)
  • Выбор модели:
    • providerOverride, modelOverride, authProfileOverride
  • Счетчики токенов (best-effort / зависят от провайдера):
    • inputTokens, outputTokens, totalTokens, contextTokens
  • compactionCount: сколько раз авто-Compaction завершался для этого ключа сессии
  • memoryFlushAt: метка времени последней выгрузки памяти перед Compaction
  • memoryFlushCompactionCount: счетчик Compaction на момент последней выгрузки

Хранилище можно редактировать безопасно, но источником истины является Gateway: он может перезаписывать или регидратировать записи во время выполнения сессий.


Структура расшифровки (*.jsonl)

Расшифровками управляет SessionManager из openclaw/plugin-sdk/agent-sessions.

Файл имеет формат JSONL:

  • Первая строка: заголовок сессии (type: "session", включает id, cwd, timestamp, необязательный parentSession)
  • Затем: записи сессии с id + parentId (дерево)

Важные типы записей:

  • message: сообщения пользователя/ассистента/toolResult
  • custom_message: сообщения, внедренные extension, которые входят в контекст модели (могут быть скрыты от UI)
  • custom: состояние extension, которое не входит в контекст модели
  • compaction: сохраненная сводка Compaction с firstKeptEntryId и tokensBefore
  • branch_summary: сохраненная сводка при навигации по ветке дерева

OpenClaw намеренно не "исправляет" расшифровки; Gateway использует SessionManager для их чтения/записи.


Контекстные окна и отслеживаемые токены

Важны две разные концепции:

  1. Контекстное окно модели: жесткий лимит для каждой модели (токены, видимые модели)
  2. Счетчики хранилища сессий: скользящая статистика, записываемая в sessions.json (используется для /status и панелей мониторинга)

Если вы настраиваете лимиты:

  • Контекстное окно берется из каталога моделей (и может быть переопределено через конфигурацию).
  • contextTokens в хранилище — это runtime-оценка/отчетное значение; не считайте его строгой гарантией.

Подробнее см. /token-use.


Compaction: что это

Compaction суммирует более старый разговор в сохраненную запись compaction в расшифровке и оставляет недавние сообщения без изменений.

После Compaction будущие ходы видят:

  • Сводку Compaction
  • Сообщения после firstKeptEntryId

Повторная вставка разделов AGENTS.md после Compaction включается явно через agents.defaults.compaction.postCompactionSections; когда значение не задано или равно [], OpenClaw не добавляет выдержки AGENTS.md поверх сводки Compaction.

Compaction сохраняется постоянно (в отличие от очистки сессий). См. /concepts/session-pruning.

Границы фрагментов Compaction и парность инструментов

Когда OpenClaw разбивает длинную расшифровку на фрагменты Compaction, он сохраняет вызовы инструментов ассистента в паре с соответствующими записями toolResult.

  • Если разделение по доле токенов попадает между вызовом инструмента и его результатом, OpenClaw сдвигает границу к сообщению ассистента с вызовом инструмента вместо разделения пары.
  • Если завершающий блок результатов инструмента иначе вывел бы фрагмент за целевой размер, OpenClaw сохраняет этот ожидающий блок инструмента и оставляет несуммированный хвост нетронутым.
  • Прерванные/ошибочные блоки вызовов инструментов не удерживают ожидающее разделение открытым.

Когда происходит авто-Compaction (runtime OpenClaw)

Во встроенном агенте OpenClaw авто-Compaction срабатывает в двух случаях:

  1. Восстановление после переполнения: модель возвращает ошибку переполнения контекста (request_too_large, context length exceeded, input exceeds the maximum number of tokens, input token count exceeds the maximum number of input tokens, input is too long for the model, ollama error: context length exceeded и похожие варианты в форме провайдера) → compact → retry. Когда провайдер сообщает предпринятое количество токенов, OpenClaw передает это наблюдаемое число в Compaction восстановления после переполнения. Если провайдер подтверждает переполнение, но не раскрывает разбираемое число, OpenClaw передает минимально превышающее бюджет синтетическое число движкам Compaction и диагностике. Если восстановление после переполнения все равно завершается неудачно, OpenClaw показывает явные инструкции пользователю и сохраняет текущее сопоставление сессии вместо тихой ротации ключа сессии на свежий идентификатор сессии. Следующий шаг контролирует оператор: повторить сообщение, выполнить /compact или выполнить /new, когда предпочтительна свежая сессия.
  2. Поддержание порога: после успешного хода, когда:

contextTokens > contextWindow - reserveTokens

Где:

  • contextWindow — контекстное окно модели
  • reserveTokens — запас, зарезервированный для промптов + следующего вывода модели

Это семантика runtime OpenClaw.

OpenClaw также может запускать предварительный local Compaction перед открытием следующего запуска, когда задан agents.defaults.compaction.maxActiveTranscriptBytes и активный файл расшифровки достигает этого размера. Это защитный лимит размера файла для стоимости локального повторного открытия, а не сырая архивация: OpenClaw все равно запускает обычный семантический Compaction, и ему требуется truncateAfterCompaction, чтобы сжатая сводка могла стать новой последующей расшифровкой.

Для встроенных запусков OpenClaw agents.defaults.compaction.midTurnPrecheck.enabled: true добавляет явно включаемую защиту цикла инструментов. После добавления результата инструмента и перед следующим вызовом модели OpenClaw оценивает давление на промпт, используя ту же предварительную логику бюджета, что и в начале хода. Если контекст больше не помещается, защита не выполняет Compaction внутри хука transformContext runtime OpenClaw. Она поднимает структурированный сигнал промежуточной проверки внутри хода, останавливает текущую отправку промпта и позволяет внешнему циклу запуска использовать существующий путь восстановления: усечь чрезмерно большие результаты инструментов, когда этого достаточно, или запустить настроенный режим Compaction и повторить. Параметр по умолчанию отключен и работает с режимами Compaction default и safeguard, включая safeguard Compaction на базе провайдера. Это не зависит от maxActiveTranscriptBytes: защитный лимит размера в байтах запускается до открытия хода, а промежуточная проверка внутри хода запускается позже во встроенном цикле инструментов OpenClaw после добавления новых результатов инструментов.


Настройки Compaction (reserveTokens, keepRecentTokens)

Настройки Compaction runtime OpenClaw находятся в настройках агента:

json5
{  compaction: {    enabled: true,    reserveTokens: 16384,    keepRecentTokens: 20000,  },}

OpenClaw также применяет нижний порог безопасности для встроенных запусков:

  • Если compaction.reserveTokens < reserveTokensFloor, OpenClaw повышает его.
  • Порог по умолчанию — 20000 токенов.
  • Установите agents.defaults.compaction.reserveTokensFloor: 0, чтобы отключить порог.
  • Если значение уже выше, OpenClaw оставляет его без изменений.
  • Ручной /compact учитывает явный agents.defaults.compaction.keepRecentTokens и сохраняет точку отсечения недавнего хвоста runtime OpenClaw. Без явного бюджета сохранения ручной Compaction остается жесткой контрольной точкой, а восстановленный контекст начинается с новой сводки.
  • Установите agents.defaults.compaction.midTurnPrecheck.enabled: true, чтобы запускать необязательную предварительную проверку цикла инструментов после новых результатов инструментов и перед следующим вызовом модели. Это только триггер; генерация сводки все равно использует настроенный путь Compaction. Она не зависит от maxActiveTranscriptBytes, который является защитным лимитом размера активной расшифровки в байтах в начале хода.
  • Установите agents.defaults.compaction.maxActiveTranscriptBytes в байтовое значение или строку, например "20mb", чтобы запускать local Compaction перед ходом, когда активная расшифровка становится большой. Эта защита активна только когда truncateAfterCompaction также включен. Оставьте параметр незаданным или установите 0, чтобы отключить.
  • Когда agents.defaults.compaction.truncateAfterCompaction включен, OpenClaw ротирует активную расшифровку в сжатую последующую JSONL после Compaction. Действия checkpoint ветвления/восстановления используют эту сжатую последующую расшифровку; устаревшие файлы checkpoint до Compaction остаются читаемыми, пока на них есть ссылки.

Зачем: оставить достаточно запаса для многоходового "служебного обслуживания" (например, записей памяти), прежде чем Compaction станет неизбежным.

Реализация: applyAgentCompactionSettingsFromConfig() в src/agents/agent-settings.ts (вызывается из путей хода embedded-runner и настройки Compaction).


Подключаемые провайдеры Compaction

Plugins могут регистрировать провайдера Compaction через registerCompactionProvider() в API plugin. Когда agents.defaults.compaction.provider задан как зарегистрированный идентификатор провайдера, расширение safeguard делегирует суммаризацию этому провайдеру вместо встроенного конвейера summarizeInStages.

  • provider: идентификатор зарегистрированного plugin провайдера Compaction. Оставьте незаданным для стандартной LLM-суммаризации.
  • Установка provider принудительно включает mode: "safeguard".
  • Провайдеры получают те же инструкции Compaction и политику сохранения идентификаторов, что и встроенный путь.
  • Safeguard по-прежнему сохраняет контекст суффикса недавнего хода и разделенного хода после вывода провайдера.
  • Встроенная safeguard-суммаризация повторно дистиллирует предыдущие сводки с новыми сообщениями вместо сохранения полной предыдущей сводки дословно.
  • Режим safeguard по умолчанию включает аудиты качества сводки; установите qualityGuard.enabled: false, чтобы пропустить поведение повторной попытки при некорректном выводе.
  • Если провайдер завершается неудачно или возвращает пустой результат, OpenClaw автоматически откатывается к встроенной LLM-суммаризации.
  • Сигналы прерывания/тайм-аута пробрасываются повторно (не подавляются), чтобы уважать отмену вызывающей стороны.

Источник: src/plugins/compaction-provider.ts, src/agents/agent-hooks/compaction-safeguard.ts.


Поверхности, видимые пользователю

Вы можете наблюдать Compaction и состояние сессии через:

  • /status (в любой чат-сессии)
  • openclaw status (CLI)
  • openclaw sessions / sessions --json
  • Логи Gateway (pnpm gateway:watch или openclaw logs --follow): embedded run auto-compaction start + complete
  • Подробный режим: 🧹 Auto-compaction complete + счетчик Compaction

Тихое служебное обслуживание (NO_REPLY)

OpenClaw поддерживает "тихие" ходы для фоновых задач, где пользователь не должен видеть промежуточный вывод.

Соглашение:

  • Ассистент начинает свой вывод с точного молчаливого токена NO_REPLY / no_reply, чтобы указать: «не доставлять ответ пользователю».
  • OpenClaw удаляет/подавляет это на уровне доставки.
  • Точное подавление молчаливого токена не зависит от регистра, поэтому NO_REPLY и no_reply учитываются, когда вся полезная нагрузка состоит только из молчаливого токена.
  • Это предназначено только для настоящих фоновых ходов без доставки; это не сокращение для обычных пользовательских запросов, требующих действий.

Начиная с 2026.1.10, OpenClaw также подавляет потоковую передачу черновика/набора текста, когда частичный фрагмент начинается с NO_REPLY, чтобы молчаливые операции не раскрывали частичный вывод в середине хода.


«Сброс памяти» перед Compaction (реализовано)

Цель: перед тем как произойдет автоматическая Compaction, запустить молчаливый агентный ход, который записывает долговременное состояние на диск (например, memory/YYYY-MM-DD.md в рабочей области агента), чтобы Compaction не могла стереть критически важный контекст.

OpenClaw использует подход сброса перед порогом:

  1. Отслеживать использование контекста сеанса.
  2. Когда оно пересекает «мягкий порог» (ниже порога Compaction среды выполнения OpenClaw), запустить молчаливую директиву «запиши память сейчас» для агента.
  3. Использовать точный молчаливый токен NO_REPLY / no_reply, чтобы пользователь ничего не видел.

Конфигурация (agents.defaults.compaction.memoryFlush):

  • enabled (по умолчанию: true)
  • model (необязательное точное переопределение провайдера/модели для хода сброса, например ollama/qwen3:8b)
  • softThresholdTokens (по умолчанию: 4000)
  • prompt (пользовательское сообщение для хода сброса)
  • systemPrompt (дополнительный системный промпт, добавляемый для хода сброса)

Примечания:

  • Промпт/системный промпт по умолчанию включают подсказку NO_REPLY для подавления доставки.
  • Когда задан model, ход сброса использует эту модель без наследования активной цепочки резервных моделей сеанса, поэтому локальное служебное обслуживание не будет молча переключаться на платную модель разговора.
  • Сброс выполняется один раз за цикл Compaction (отслеживается в sessions.json).
  • Сброс выполняется только для встроенных сеансов OpenClaw (бэкенды CLI пропускают его).
  • Сброс пропускается, когда рабочая область сеанса доступна только для чтения (workspaceAccess: "ro" или "none").
  • См. Память для структуры файлов рабочей области и шаблонов записи.

OpenClaw также предоставляет хук session_before_compact в API расширений, но логика сброса OpenClaw сейчас находится на стороне Gateway.


Контрольный список устранения неполадок

  • Неверный ключ сеанса? Начните с /concepts/session и проверьте sessionKey в /status.
  • Несоответствие хранилища и транскрипта? Проверьте хост Gateway и путь хранилища из openclaw status.
  • Спам Compaction? Проверьте:
    • окно контекста модели (слишком маленькое)
    • настройки Compaction (reserveTokens слишком высоко для окна модели может вызывать более раннюю Compaction)
    • раздувание результатов инструментов: включите/настройте отсечение сеанса
  • Молчаливые ходы протекают? Убедитесь, что ответ начинается с NO_REPLY (точный токен без учета регистра) и что вы используете сборку, включающую исправление подавления потоковой передачи.

Связанные материалы

Was this useful?
On this page

On this page