Перейти до основного вмісту

Compaction

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

Як це працює

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

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

Автоматичний Compaction увімкнено за замовчуванням. Він запускається, коли сесія наближається до ліміту контексту, або коли модель повертає помилку переповнення контексту (у такому разі OpenClaw виконує Compaction і повторює спробу). Типові ознаки переповнення включають 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 OpenClaw автоматично нагадує агенту зберегти важливі нотатки у файли memory. Це запобігає втраті контексту.
Використовуйте налаштування agents.defaults.compaction у вашому openclaw.json, щоб налаштувати поведінку Compaction (режим, цільову кількість токенів тощо). Підсумовування Compaction за замовчуванням зберігає непрозорі ідентифікатори (identifierPolicy: "strict"). Ви можете змінити це за допомогою identifierPolicy: "off" або надати власний текст через identifierPolicy: "custom" і identifierInstructions. Ви також можете за бажанням вказати іншу модель для підсумовування Compaction через agents.defaults.compaction.model. Це корисно, коли ваша основна модель є локальною або малою моделлю, а ви хочете, щоб зведення Compaction створювалися більш потужною моделлю. Перевизначення приймає будь-який рядок provider/model-id:
{
  "agents": {
    "defaults": {
      "compaction": {
        "model": "openrouter/anthropic/claude-sonnet-4-6"
      }
    }
  }
}
Це також працює з локальними моделями, наприклад із другою моделлю Ollama, виділеною для підсумовування, або зі спеціалістом Compaction, донавченим під це завдання:
{
  "agents": {
    "defaults": {
      "compaction": {
        "model": "ollama/llama3.1:8b"
      }
    }
  }
}
Якщо значення не задано, Compaction використовує основну модель агента.

Підключувані провайдери Compaction

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

Автоматичний Compaction (увімкнено за замовчуванням)

Коли сесія наближається до вікна контексту моделі або перевищує його, OpenClaw запускає автоматичний Compaction і може повторити початковий запит, використовуючи ущільнений контекст. Ви побачите:
  • 🧹 Auto-compaction complete у докладному режимі
  • /status, де показано 🧹 Compactions: <count>
Перед Compaction OpenClaw може виконати тихий скид пам’яті, щоб зберегти довготривалі нотатки на диск. Докладніше про це та налаштування дивіться у Memory.

Ручний Compaction

Введіть /compact у будь-якому чаті, щоб примусово виконати Compaction. Додайте інструкції, щоб спрямувати зведення:
/compact Focus on the API design decisions

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

За замовчуванням Compaction використовує основну модель вашого агента. Ви можете використовувати більш потужну модель для кращих зведень:
{
  agents: {
    defaults: {
      compaction: {
        model: "openrouter/anthropic/claude-sonnet-4-6",
      },
    },
  },
}

Сповіщення Compaction

За замовчуванням Compaction виконується без повідомлень. Щоб показувати короткі сповіщення, коли Compaction починається і коли він завершується, увімкніть notifyUser:
{
  agents: {
    defaults: {
      compaction: {
        notifyUser: true,
      },
    },
  },
}
Коли цю опцію увімкнено, користувач бачить короткі повідомлення про стан під час кожного запуску Compaction (наприклад, “Compacting context…” і “Compaction complete”).

Compaction vs pruning

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

Усунення проблем

Compaction відбувається надто часто? Вікно контексту моделі може бути малим, або виводи інструментів можуть бути великими. Спробуйте увімкнути session pruning. Після Compaction контекст здається застарілим? Використайте /compact Focus on <topic>, щоб спрямувати зведення, або ввімкніть memory flush, щоб нотатки зберігалися. Потрібно почати з чистого аркуша? /new запускає нову сесію без Compaction. Для розширеної конфігурації (резерв токенів, збереження ідентифікаторів, спеціальні рушії контексту, серверний Compaction OpenAI) дивіться Поглиблений розбір керування сесіями.

Пов’язане

  • Session — керування сесією та її життєвий цикл
  • Session Pruning — обрізання результатів інструментів
  • Context — як будується контекст для ходів агента
  • Hooks — хуки життєвого циклу Compaction (before_compaction, after_compaction)