Sessions and memory

Compaction

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

Як це працює

  1. Старіші ходи розмови підсумовуються в компактний запис.
  2. Підсумок зберігається в транскрипті сеансу.
  3. Останні повідомлення зберігаються без змін.

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

Повна історія розмови залишається на диску. Compaction змінює лише те, що модель бачить на наступному ході.

Автоматичний Compaction

Автоматичний Compaction увімкнено за замовчуванням. Він запускається, коли сеанс наближається до ліміту контексту або коли модель повертає помилку переповнення контексту (у такому разі OpenClaw виконує Compaction і повторює спробу).

Ви побачите:

  • 🧹 Auto-compaction complete у докладному режимі.
  • /status, що показує 🧹 Compactions: <count>.
Розпізнавані сигнатури переповнення

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 враховує цю точку відсікання Pi та зберігає нещодавній хвіст у перебудованому контексті. Без явного бюджету збереження ручний Compaction поводиться як жорстка контрольна точка й продовжує лише з нового підсумку.

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

Налаштуйте Compaction у agents.defaults.compaction у вашому openclaw.json. Найпоширеніші параметри наведено нижче; повну довідку див. у поглибленому огляді керування сеансами.

Використання іншої моделі

За замовчуванням Compaction використовує основну модель агента. Установіть agents.defaults.compaction.model, щоб делегувати підсумовування потужнішій або спеціалізованій моделі. Перевизначення приймає будь-який рядок provider/model-id:

{
  "agents": {
    "defaults": {
      "compaction": {
        "model": "openrouter/anthropic/claude-sonnet-4-6"
      }
    }
  }
}

Це також працює з локальними моделями, наприклад із другою моделлю 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 створити семантичний підсумок.

Наступні транскрипти

Коли ввімкнено agents.defaults.compaction.truncateAfterCompaction, OpenClaw не перезаписує наявний транскрипт на місці. Він створює новий активний наступний транскрипт із підсумку Compaction, збереженого стану та непідсумованого хвоста, а потім залишає попередній JSONL як архівне джерело контрольної точки. Наступні транскрипти також відкидають точні дублікати довгих користувацьких ходів, які надходять у межах короткого вікна повторної спроби, щоб сплески повторних спроб каналу не переносилися в наступний активний транскрипт після Compaction.

Контрольні точки до Compaction зберігаються лише доки вони залишаються нижче обмеження OpenClaw на розмір контрольної точки; завеликі активні транскрипти все одно проходять Compaction, але OpenClaw пропускає великий знімок для налагодження замість подвоєння використання диска.

Сповіщення про 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

Плагіни можуть реєструвати власного провайдера Compaction через registerCompactionProvider() в API плагіна. Коли провайдера зареєстровано й налаштовано, OpenClaw делегує підсумовування йому замість вбудованого LLM-конвеєра.

Щоб використати зареєстрованого провайдера, задайте його id у своїй конфігурації:

{
  "agents": {
    "defaults": {
      "compaction": {
        "provider": "my-provider"
      }
    }
  }
}

Установлення provider автоматично примусово вмикає mode: "safeguard". Провайдери отримують ті самі інструкції Compaction і політику збереження ідентифікаторів, що й вбудований шлях, а OpenClaw усе ще зберігає контекст суфікса нещодавніх ходів і розбитих ходів після виводу провайдера.

Compaction і обрізання

Compaction Обрізання
Що робить Підсумовує старішу розмову Обрізає старі результати інструментів
Збережено? Так (у транскрипті сеансу) Ні (лише в пам’яті, для кожного запиту)
Область Уся розмова Лише результати інструментів

Обрізання сеансу — це легше доповнення, яке обрізає вивід інструментів без підсумовування.

Усунення несправностей

Compaction відбувається занадто часто? Вікно контексту моделі може бути малим, або виводи інструментів можуть бути великими. Спробуйте ввімкнути обрізання сеансу.

Після Compaction контекст здається застарілим? Використайте /compact Focus on <topic>, щоб спрямувати підсумок, або ввімкніть скидання пам’яті, щоб нотатки зберігалися.

Потрібен чистий аркуш? /new запускає новий сеанс без Compaction.

Розширену конфігурацію (резервні токени, збереження ідентифікаторів, власні рушії контексту, серверний Compaction OpenAI) див. у поглибленому огляді керування сеансами.

Пов’язане

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