Sessions and memory

Compaction

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

Як це працює

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

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

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

Автоматичне стискання

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

Ви побачите:

  • embedded run auto-compaction start / complete у звичайних журналах Gateway.
  • 🧹 Auto-compaction complete у докладному режимі.
  • /status, що показує 🧹 Compactions: <count>.
Шаблони помилок переповнення, які розпізнає OpenClaw

OpenClaw зіставляє десятки специфічних для постачальників рядків помилок переповнення (Anthropic, OpenAI, Bedrock, Gemini, Ollama, OpenRouter тощо). Поширені приклади:

  • request_too_large
  • context length exceeded
  • input exceeds the maximum number of tokens
  • input token count exceeds the maximum number of input tokens (Bedrock)
  • input is too long for the model
  • ollama error: context length exceeded

Ручне стискання

Введіть /compact у будь-якому чаті, щоб примусово виконати стискання. Додайте вказівки, щоб спрямувати формування підсумку:

text
/compact Зосередься на рішеннях щодо дизайну API

Якщо задано agents.defaults.compaction.keepRecentTokens (за замовчуванням: 20,000), ручне стискання дотримується цієї точки відсікання та зберігає недавній хвіст у перебудованому контексті. Без явно заданого бюджету збереження ручне стискання працює як жорстка контрольна точка й продовжує роботу лише з нового підсумку.

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

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

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

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

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

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

Це також працює з локальними моделями, наприклад із другою моделлю Ollama, призначеною для узагальнення:

json
{  "agents": {    "defaults": {      "compaction": {        "model": "ollama/llama3.1:8b"      }    }  }}

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

Збереження ідентифікаторів

Узагальнення під час стискання за замовчуванням зберігає непрозорі ідентифікатори (identifierPolicy: "strict"). Щоб вимкнути це, перевизначте значення за допомогою identifierPolicy: "off"; для власних настанов використовуйте identifierPolicy: "custom" разом із identifierInstructions.

Обмеження розміру активної стенограми в байтах

Якщо задано agents.defaults.compaction.maxActiveTranscriptBytes, OpenClaw запускає звичайне локальне стискання перед виконанням, якщо історія стенограми досягає цього розміру. Це корисно для тривалих сеансів, у яких керування контекстом на боці постачальника може підтримувати контекст моделі в належному стані, тоді як збережена історія стенограми продовжує зростати. Необроблені байти не розділяються; натомість звичайний конвеєр стискання отримує запит на створення семантичного підсумку.

Наступні стенограми

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

OpenClaw більше не записує окремі копії .checkpoint.*.jsonl для нових стискань. Наявні застарілі файли контрольних точок можна й надалі використовувати, поки на них є посилання, а звичайне очищення сеансів їх видаляє.

Сповіщення про стискання

За замовчуванням стискання виконується без повідомлень. Задайте notifyUser, щоб показувати короткі повідомлення про стан на початку й після завершення стискання, а також повідомлення про погіршений режим, коли спроби скидання пам’яті перед стисканням вичерпано, але відповідь усе одно продовжується:

json5
{  agents: {    defaults: {      compaction: {        notifyUser: true,      },    },  },}

Скидання пам’яті

Перед стисканням OpenClaw може виконати тиху репліку скидання пам’яті, щоб зберегти довготривалі нотатки на диск. Задайте agents.defaults.compaction.memoryFlush.model, якщо для цієї службової репліки слід використовувати локальну модель замість активної моделі розмови:

json
{  "agents": {    "defaults": {      "compaction": {        "memoryFlush": {          "model": "ollama/qwen3:8b"        }      }    }  }}

Перевизначення моделі скидання пам’яті є точним і не успадковує активний ланцюжок резервних моделей сеансу. Подробиці та конфігурацію див. у розділі Пам’ять.

Підключувані постачальники стискання

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

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

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

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

Стискання та обрізання

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

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

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

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

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

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

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

Пов’язані матеріали

  • Сеанс: керування сеансом і його життєвим циклом.
  • Обрізання сеансу: обрізання результатів інструментів.
  • Контекст: як формується контекст для реплік агента.
  • Перехоплювачі: перехоплювачі життєвого циклу стискання (before_compaction, after_compaction).
Was this useful?
On this page

On this page