Sessions and memory
Compaction
Кожна модель має контекстне вікно: максимальну кількість токенів, яку вона може обробити. Коли розмова наближається до цього ліміту, OpenClaw стискає старіші повідомлення в підсумок, щоб чат міг продовжуватися.
Як це працює
- Старіші репліки розмови підсумовуються в компактний запис.
- Підсумок зберігається в транскрипті сеансу.
- Останні повідомлення залишаються без змін.
Коли OpenClaw розділяє історію на фрагменти Compaction, він зберігає виклики інструментів асистента в парі з відповідними записами toolResult. Якщо точка розділення потрапляє всередину блоку інструмента, OpenClaw зміщує межу, щоб пара залишилася разом, а поточний непідсумований хвіст зберігся.
Повна історія розмови залишається на диску. Compaction змінює лише те, що модель бачить на наступному кроці.
Автоматична Compaction
Автоматична Compaction увімкнена за замовчуванням. Вона запускається, коли сеанс наближається до ліміту контексту або коли модель повертає помилку переповнення контексту (у такому разі OpenClaw виконує Compaction і повторює спробу).
Ви побачите:
embedded run auto-compaction start/completeу звичайних журналах Gateway.🧹 Auto-compaction completeу докладному режимі./statusіз🧹 Compactions: <count>.
Розпізнавані сигнатури переповнення
OpenClaw виявляє переповнення контексту за такими шаблонами помилок провайдерів:
request_too_largecontext length exceededinput exceeds the maximum number of tokensinput token count exceeds the maximum number of input tokensinput is too long for the modelollama 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 розв’язуються до канонічного провайдера й моделі. Якщо просте значення збігається і з псевдонімом, і з налаштованим буквальним ID моделі, перемагає буквальний ID моделі. Просте значення без збігу залишається ID моделі в активного провайдера.
Це також працює з локальними моделями, наприклад із другою моделлю 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, збереженого стану та непідсумованого хвоста, а потім записує метадані контрольної точки, які спрямовують потоки гілкування/відновлення на цей стиснений наступний транскрипт.
Наступні транскрипти також відкидають точні дублікати довгих реплік користувача, що надходять
усередині короткого вікна повторної спроби, щоб шквали повторів каналу не переносилися в
наступний активний транскрипт після 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-конвеєра.
Щоб використати зареєстрованого провайдера, задайте його 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).