Перейти к основному содержанию
У каждой модели есть контекстное окно: максимальное количество токенов, которое она может обработать. Когда разговор приближается к этому пределу, OpenClaw выполняет Compaction старых сообщений в сводку, чтобы чат мог продолжаться.

Как это работает

  1. Более старые ходы разговора суммируются в компактную запись.
  2. Сводка сохраняется в транскрипте сеанса.
  3. Недавние сообщения остаются без изменений.
Когда OpenClaw разделяет историю на фрагменты Compaction, он сохраняет вызовы инструментов ассистента вместе с соответствующими записями toolResult. Если точка разделения попадает внутрь блока инструмента, OpenClaw сдвигает границу, чтобы пара оставалась вместе, а текущий несуммированный хвост был сохранен. Полная история разговора остается на диске. Compaction меняет только то, что модель видит на следующем ходе.

Авто-Compaction

Авто-Compaction включен по умолчанию. Он запускается, когда сеанс приближается к пределу контекста или когда модель возвращает ошибку переполнения контекста (в этом случае OpenClaw выполняет Compaction и повторяет попытку). Вы увидите:
  • embedded run auto-compaction start / complete в обычных журналах Gateway.
  • 🧹 Auto-compaction complete в подробном режиме.
  • /status, показывающий 🧹 Compactions: <count>.
Перед выполнением Compaction OpenClaw автоматически напоминает агенту сохранить важные заметки в файлы памяти. Это предотвращает потерю контекста.
OpenClaw обнаруживает переполнение контекста по следующим шаблонам ошибок провайдера:
  • 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

Ручной Compaction

Введите /compact в любом чате, чтобы принудительно выполнить Compaction. Добавьте инструкции, чтобы направить сводку:
/compact Focus on the API design decisions
Когда задано значение agents.defaults.compaction.keepRecentTokens, ручной Compaction учитывает эту точку отсечения OpenClaw и сохраняет недавний хвост в перестроенном контексте. Без явного бюджета сохранения ручной Compaction работает как жесткая контрольная точка и продолжает только с новой сводки.

Конфигурация

Настройте Compaction в agents.defaults.compaction в вашем openclaw.json. Самые распространенные параметры перечислены ниже; полный справочник см. в разделе Подробное руководство по управлению сеансами.

Использование другой модели

По умолчанию Compaction использует основную модель агента. Задайте agents.defaults.compaction.model, чтобы делегировать суммирование более мощной или специализированной модели. Переопределение принимает строку provider/model-id или простой псевдоним, настроенный в agents.defaults.models:
{
  "agents": {
    "defaults": {
      "compaction": {
        "model": "openrouter/anthropic/claude-sonnet-4-6"
      }
    }
  }
}
Простые настроенные псевдонимы разрешаются в их канонического провайдера и модель до запуска Compaction. Если простое значение совпадает и с псевдонимом, и с настроенным буквальным идентификатором модели, побеждает буквальный идентификатор модели. Несовпавшее простое значение остается идентификатором модели у активного провайдера. Это работает и с локальными моделями, например со второй моделью Ollama, выделенной для суммирования:
{
  "agents": {
    "defaults": {
      "compaction": {
        "model": "ollama/llama3.1:8b"
      }
    }
  }
}
Если параметр не задан, Compaction начинается с активной модели сеанса. Если суммирование завершается сбоем из-за ошибки провайдера, подходящей для резервного выбора модели, OpenClaw повторяет эту попытку Compaction через существующую цепочку резервных моделей сеанса. Резервный выбор временный и не записывается обратно в состояние сеанса. Явное переопределение agents.defaults.compaction.model остается точным и не наследует цепочку резервных моделей сеанса.

Сохранение идентификаторов

Суммирование Compaction по умолчанию сохраняет непрозрачные идентификаторы (identifierPolicy: "strict"). Переопределите на identifierPolicy: "off", чтобы отключить это, или используйте identifierPolicy: "custom" вместе с identifierInstructions для пользовательских указаний.

Ограничитель байтов активного транскрипта

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

Последующие транскрипты

Когда включено agents.defaults.compaction.truncateAfterCompaction, OpenClaw не переписывает существующий транскрипт на месте. Он создает новый активный последующий транскрипт из сводки Compaction, сохраненного состояния и несуммированного хвоста, а затем записывает метаданные контрольной точки, которые направляют потоки ветвления и восстановления к этому сжатому последующему транскрипту. Последующие транскрипты также удаляют точные дубликаты длинных пользовательских ходов, которые поступают внутри короткого окна повторной попытки, чтобы всплески повторов канала не переносились в следующий активный транскрипт после Compaction. OpenClaw больше не записывает отдельные копии .checkpoint.*.jsonl для новых Compaction. Существующие устаревшие файлы контрольных точек по-прежнему можно использовать, пока на них есть ссылки, и они удаляются обычной очисткой сеанса.

Уведомления Compaction

По умолчанию Compaction выполняется бесшумно. Задайте notifyUser, чтобы показывать краткие сообщения о состоянии при запуске и завершении Compaction:
{
  agents: {
    defaults: {
      compaction: {
        notifyUser: true,
      },
    },
  },
}

Сброс памяти

Перед Compaction OpenClaw может выполнить тихий сброс памяти как ход, чтобы сохранить долговечные заметки на диск. Задайте agents.defaults.compaction.memoryFlush.model, когда этот служебный ход должен использовать локальную модель вместо активной модели разговора:
{
  "agents": {
    "defaults": {
      "compaction": {
        "memoryFlush": {
          "model": "ollama/qwen3:8b"
        }
      }
    }
  }
}
Переопределение модели сброса памяти является точным и не наследует цепочку резервных моделей активного сеанса. Подробности и конфигурацию см. в разделе Память.

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

Plugins могут зарегистрировать пользовательского провайдера Compaction через registerCompactionProvider() в API Plugin. Когда провайдер зарегистрирован и настроен, OpenClaw делегирует суммирование ему вместо встроенного конвейера LLM. Чтобы использовать зарегистрированного провайдера, задайте его идентификатор в вашей конфигурации:
{
  "agents": {
    "defaults": {
      "compaction": {
        "provider": "my-provider"
      }
    }
  }
}
Установка provider автоматически принудительно включает mode: "safeguard". Провайдеры получают те же инструкции Compaction и политику сохранения идентификаторов, что и встроенный путь, а OpenClaw по-прежнему сохраняет контекст суффикса недавних ходов и разделенных ходов после вывода провайдера.
Если провайдер завершается с ошибкой или возвращает пустой результат, OpenClaw откатывается к встроенному суммированию LLM.

Compaction и обрезка

CompactionОбрезка
Что делаетСуммирует старый разговорОбрезает старые результаты инструментов
Сохраняется?Да (в транскрипте сеанса)Нет (только в памяти, для каждого запроса)
ОбластьВесь разговорТолько результаты инструментов
Обрезка сеанса — более легкое дополнение, которое обрезает вывод инструментов без суммирования.

Устранение неполадок

Compaction выполняется слишком часто? Контекстное окно модели может быть маленьким, или вывод инструментов может быть большим. Попробуйте включить обрезку сеанса. После Compaction контекст кажется устаревшим? Используйте /compact Focus on <topic>, чтобы направить сводку, или включите сброс памяти, чтобы заметки сохранялись. Нужен чистый лист? /new запускает новый сеанс без Compaction. Для расширенной конфигурации (резервные токены, сохранение идентификаторов, пользовательские движки контекста, серверный Compaction OpenAI) см. Подробное руководство по управлению сеансами.

Связанные разделы

  • Сеанс: управление сеансом и жизненный цикл.
  • Обрезка сеанса: обрезка результатов инструментов.
  • Контекст: как строится контекст для ходов агента.
  • Hooks: хуки жизненного цикла Compaction (before_compaction, after_compaction).