Sessions and memory

Управление сеансами

OpenClaw организует разговоры в сеансы. Каждое сообщение направляется в сеанс в зависимости от того, откуда оно пришло: личные сообщения, групповые чаты, задания Cron и т. д.

Как маршрутизируются сообщения

Источник Поведение
Личные сообщения Общий сеанс по умолчанию
Групповые чаты Изоляция для каждой группы
Комнаты/каналы Изоляция для каждой комнаты
Задания Cron Новый сеанс для каждого запуска
Webhook-и Изоляция для каждого hook

Изоляция личных сообщений

По умолчанию все личные сообщения используют один сеанс для сохранения непрерывности. Это подходит для установок с одним пользователем.

Исправление:

json5
{  session: {    dmScope: "per-channel-peer", // isolate by channel + sender  },}

Другие варианты:

  • main (по умолчанию) -- все личные сообщения используют один сеанс.
  • per-peer -- изоляция по отправителю (между каналами).
  • per-channel-peer -- изоляция по каналу + отправителю (рекомендуется).
  • per-account-channel-peer -- изоляция по учетной записи + каналу + отправителю.

Стыковка связанных каналов

Команды стыковки позволяют пользователю перенести маршрут ответа текущего сеанса прямого чата в другой связанный канал без запуска нового сеанса. См. Стыковка каналов с примерами, конфигурацией и устранением неполадок.

Проверьте настройку с помощью openclaw security audit.

Жизненный цикл сеанса

Сеансы используются повторно, пока не истекут:

  • Ежедневный сброс (по умолчанию) -- новый сеанс в 4:00 утра по местному времени на хосте Gateway. Ежедневная свежесть основана на времени начала текущего sessionId, а не на более поздних записях метаданных.
  • Сброс по бездействию (необязательно) -- новый сеанс после периода бездействия. Задайте session.reset.idleMinutes. Свежесть по бездействию основана на последнем реальном взаимодействии пользователя/канала, поэтому события Heartbeat, Cron и системные события exec не поддерживают сеанс активным.
  • Ручной сброс -- введите /new или /reset в чате. /new <model> также переключает модель.

Когда настроены и ежедневный сброс, и сброс по бездействию, срабатывает тот, чей срок истекает первым. Heartbeat, Cron, exec и другие ходы системных событий могут записывать метаданные сеанса, но эти записи не продлевают свежесть ежедневного сброса или сброса по бездействию. Когда сброс переводит сеанс, уведомления системных событий в очереди для старого сеанса отбрасываются, чтобы устаревшие фоновые обновления не добавлялись в начало первого промпта в новом сеансе.

Сеансы с активным CLI-сеансом, принадлежащим провайдеру, не обрываются неявным ежедневным значением по умолчанию. Используйте /reset или явно настройте session.reset, когда такие сеансы должны истекать по таймеру.

Где хранится состояние

Все состояние сеансов принадлежит Gateway. UI-клиенты запрашивают данные сеансов у Gateway.

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

sessions.json хранит отдельные метки времени жизненного цикла:

  • sessionStartedAt: когда начался текущий sessionId; ежедневный сброс использует это значение.
  • lastInteractionAt: последнее взаимодействие пользователя/канала, продлевающее срок жизни по бездействию.
  • updatedAt: последняя мутация строки хранилища; полезно для списков и очистки, но не является авторитетным источником свежести для ежедневного сброса/сброса по бездействию.

Старые строки без sessionStartedAt при наличии берутся из заголовка сеанса JSONL-транскрипта. Если в старой строке также нет lastInteractionAt, свежесть по бездействию откатывается к времени начала этого сеанса, а не к более поздним служебным записям.

Обслуживание сеансов

OpenClaw автоматически ограничивает объем хранилища сеансов со временем. По умолчанию он работает в режиме enforce и выполняет очистку во время обслуживания. Задайте session.maintenance.mode как "warn", чтобы сообщать, что было бы очищено, без изменения хранилища/файлов:

json5
{  session: {    maintenance: {      mode: "enforce",      pruneAfter: "30d",      maxEntries: 500,    },  },}

Для производственных лимитов maxEntries записи среды выполнения Gateway используют небольшой буфер верхней отметки и пакетно очищают обратно до настроенного предела. Чтения хранилища сеансов не сокращают и не ограничивают записи во время запуска Gateway. Это позволяет избежать полной очистки хранилища при каждом запуске или изолированном сеансе Cron. openclaw sessions cleanup --enforce применяет предел немедленно.

Пробные сеансы запуска моделей Gateway по умолчанию недолговечны. Совпадающие строки со строгими явными ключами, такими как agent:*:explicit:model-run-<uuid>, используют фиксированное хранение 24h, но очистка ограничена давлением: она удаляет устаревшие пробные строки только тогда, когда достигнуто давление обслуживания/лимита записей сеансов. Когда выполняется очистка model-run, она запускается до более широкого отсечения устаревших записей по возрасту и до лимита записей. Обычные прямые, групповые, потоковые, Cron, hook, Heartbeat, ACP и сеансы субагентов не наследуют это 24-часовое хранение.

Обслуживание сохраняет долговечные внешние указатели разговоров, включая групповые сеансы и чат-сеансы в рамках потоков, при этом позволяя синтетическим записям Cron, hook, Heartbeat, ACP и субагентов устаревать и удаляться.

Если вы ранее использовали изоляцию личных сообщений, а затем вернули session.dmScope к main, предварительно просмотрите устаревшие строки личных сообщений с ключами peer с помощью openclaw sessions cleanup --dry-run --fix-dm-scope. Применение того же флага выводит из обращения эти старые строки прямых личных сообщений и сохраняет их транскрипты как удаленные архивы.

Предварительный просмотр: openclaw sessions cleanup --dry-run.

Проверка сеансов

  • openclaw status -- путь к хранилищу сеансов и недавняя активность.
  • openclaw sessions --json -- все сеансы (фильтр через --active <minutes>).
  • /status в чате -- использование контекста, модель и переключатели.
  • /context list -- что находится в системном промпте.

Дополнительное чтение

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

Was this useful?
On this page

On this page