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

Механізм контексту

Механізм контексту керує тим, як OpenClaw будує контекст моделі для кожного запуску. Він визначає, які повідомлення включати, як підсумовувати старішу історію та як керувати контекстом через межі subagent. OpenClaw постачається з вбудованим механізмом legacy. Плагіни можуть реєструвати альтернативні механізми, які замінюють активний життєвий цикл механізму контексту.

Швидкий старт

Перевірте, який механізм активний:
openclaw doctor
# or inspect config directly:
cat ~/.openclaw/openclaw.json | jq '.plugins.slots.contextEngine'

Встановлення плагіна механізму контексту

Плагіни механізму контексту встановлюються так само, як і будь-який інший плагін OpenClaw. Спочатку встановіть плагін, а потім виберіть механізм у slot:
# Install from npm
openclaw plugins install @martian-engineering/lossless-claw

# Or install from a local path (for development)
openclaw plugins install -l ./my-context-engine
Потім увімкніть плагін і виберіть його як активний механізм у своїй конфігурації:
// openclaw.json
{
  plugins: {
    slots: {
      contextEngine: "lossless-claw", // must match the plugin's registered engine id
    },
    entries: {
      "lossless-claw": {
        enabled: true,
        // Plugin-specific config goes here (see the plugin's docs)
      },
    },
  },
}
Після встановлення та налаштування перезапустіть gateway. Щоб повернутися до вбудованого механізму, задайте contextEngine значення "legacy" (або повністю видаліть цей ключ — "legacy" є типовим значенням).

Як це працює

Щоразу, коли OpenClaw запускає промпт моделі, механізм контексту бере участь у чотирьох точках життєвого циклу:
  1. Ingest — викликається, коли нове повідомлення додається до сесії. Механізм може зберегти або проіндексувати повідомлення у власному сховищі даних.
  2. Assemble — викликається перед кожним запуском моделі. Механізм повертає впорядкований набір повідомлень (і необов’язковий systemPromptAddition), який уміщується в бюджет токенів.
  3. Compact — викликається, коли вікно контексту заповнене або коли користувач запускає /compact. Механізм підсумовує старішу історію, щоб звільнити місце.
  4. After turn — викликається після завершення запуску. Механізм може зберігати стан, запускати фоновий compaction або оновлювати індекси.

Життєвий цикл subagent (необов’язково)

Наразі OpenClaw викликає один хук життєвого циклу subagent:
  • onSubagentEnded — очищення після завершення або прибирання сесії subagent.
Хук prepareSubagentSpawn є частиною інтерфейсу для майбутнього використання, але runtime його ще не викликає.

Доповнення до системного промпта

Метод assemble може повертати рядок systemPromptAddition. OpenClaw додає його на початок системного промпта для запуску. Це дає механізмам змогу вставляти динамічні вказівки для пригадування, інструкції з retrieval або підказки з урахуванням контексту без потреби у статичних файлах робочого простору.

Механізм legacy

Вбудований механізм legacy зберігає початкову поведінку OpenClaw:
  • Ingest: no-op (менеджер сесій безпосередньо обробляє збереження повідомлень).
  • Assemble: наскрізний прохід (наявний конвеєр sanitize → validate → limit у runtime обробляє збирання контексту).
  • Compact: делегує вбудованому compaction із підсумовуванням, який створює єдиний підсумок старіших повідомлень і зберігає недавні повідомлення без змін.
  • After turn: no-op.
Механізм legacy не реєструє інструменти й не надає systemPromptAddition. Коли plugins.slots.contextEngine не задано (або має значення "legacy"), цей механізм використовується автоматично.

Механізми плагінів

Плагін може зареєструвати механізм контексту через API плагінів:
export default function register(api) {
  api.registerContextEngine("my-engine", () => ({
    info: {
      id: "my-engine",
      name: "My Context Engine",
      ownsCompaction: true,
    },

    async ingest({ sessionId, message, isHeartbeat }) {
      // Store the message in your data store
      return { ingested: true };
    },

    async assemble({ sessionId, messages, tokenBudget }) {
      // Return messages that fit the budget
      return {
        messages: buildContext(messages, tokenBudget),
        estimatedTokens: countTokens(messages),
        systemPromptAddition: "Use lcm_grep to search history...",
      };
    },

    async compact({ sessionId, force }) {
      // Summarize older context
      return { ok: true, compacted: true };
    },
  }));
}
Потім увімкніть його в конфігурації:
{
  plugins: {
    slots: {
      contextEngine: "my-engine",
    },
    entries: {
      "my-engine": {
        enabled: true,
      },
    },
  },
}

Інтерфейс ContextEngine

Обов’язкові елементи:
ЕлементТипПризначення
infoВластивістьІдентифікатор, назва, версія механізму та ознака володіння compaction
ingest(params)МетодЗберегти одне повідомлення
assemble(params)МетодПобудувати контекст для запуску моделі (повертає AssembleResult)
compact(params)МетодПідсумувати/зменшити контекст
assemble повертає AssembleResult з такими полями:
  • messages — впорядковані повідомлення, які надсилаються моделі.
  • estimatedTokens (обов’язково, number) — оцінка механізму для загальної кількості токенів у зібраному контексті. OpenClaw використовує це для рішень про поріг compaction і для діагностичної звітності.
  • systemPromptAddition (необов’язково, string) — додається на початок системного промпта.
Необов’язкові елементи:
ЕлементТипПризначення
bootstrap(params)МетодІніціалізувати стан механізму для сесії. Викликається один раз, коли механізм уперше бачить сесію (наприклад, імпорт історії).
ingestBatch(params)МетодОбробити завершений хід як пакет. Викликається після завершення запуску, одразу з усіма повідомленнями цього ходу.
afterTurn(params)МетодРобота життєвого циклу після запуску (збереження стану, запуск фонового compaction).
prepareSubagentSpawn(params)МетодНалаштувати спільний стан для дочірньої сесії.
onSubagentEnded(params)МетодОчистити стан після завершення subagent.
dispose()МетодЗвільнити ресурси. Викликається під час завершення роботи gateway або перезавантаження плагіна — не для кожної сесії.

ownsCompaction

ownsCompaction визначає, чи залишатиметься ввімкненим вбудований auto-compaction Pi у межах спроби для цього запуску:
  • true — механізм сам керує поведінкою compaction. OpenClaw вимикає вбудований auto-compaction Pi для цього запуску, а реалізація compact() у механізмі відповідає за /compact, compaction для відновлення після переповнення та будь-який проактивний compaction, який механізм хоче виконувати в afterTurn().
  • false або не задано — вбудований auto-compaction Pi усе ще може виконуватися під час виконання промпта, але метод compact() активного механізму все одно викликається для /compact і відновлення після переповнення.
ownsCompaction: false не означає, що OpenClaw автоматично повертається до шляху compaction механізму legacy. Це означає, що існують два коректні шаблони для плагінів:
  • Режим володіння — реалізуйте власний алгоритм compaction і задайте ownsCompaction: true.
  • Режим делегування — задайте ownsCompaction: false і нехай compact() викликає delegateCompactionToRuntime(...) з openclaw/plugin-sdk/core, щоб використовувати вбудовану поведінку compaction OpenClaw.
No-op compact() небезпечний для активного механізму без власного керування, оскільки він вимикає звичайний шлях /compact і compaction для відновлення після переповнення для цього slot механізму.

Довідник конфігурації

{
  plugins: {
    slots: {
      // Select the active context engine. Default: "legacy".
      // Set to a plugin id to use a plugin engine.
      contextEngine: "legacy",
    },
  },
}
Slot є взаємовиключним під час виконання — лише один зареєстрований механізм контексту визначається для певного запуску або операції compaction. Інші увімкнені плагіни kind: "context-engine" усе ще можуть завантажуватися і виконувати свій код реєстрації; plugins.slots.contextEngine лише вибирає, який зареєстрований id механізму OpenClaw має визначити, коли йому потрібен механізм контексту.

Зв’язок із compaction і пам’яттю

  • Compaction — це одна з відповідальностей механізму контексту. Механізм legacy делегує до вбудованого підсумовування OpenClaw. Механізми плагінів можуть реалізовувати будь-яку стратегію compaction (підсумки DAG, vector retrieval тощо).
  • Плагіни пам’яті (plugins.slots.memory) відокремлені від механізмів контексту. Плагіни пам’яті надають пошук/retrieval; механізми контексту керують тим, що бачить модель. Вони можуть працювати разом — механізм контексту може використовувати дані плагіна пам’яті під час assemble.
  • Обрізання сесії (trim старих результатів інструментів у пам’яті) усе ще виконується незалежно від того, який механізм контексту активний.

Поради

  • Використовуйте openclaw doctor, щоб перевірити, що ваш механізм завантажується правильно.
  • Якщо ви перемикаєте механізми, наявні сесії продовжують роботу зі своєю поточною історією. Новий механізм перебирає керування для майбутніх запусків.
  • Помилки механізму журналюються й відображаються в діагностиці. Якщо механізм плагіна не вдається зареєструвати або вибраний id механізму не вдається визначити, OpenClaw не виконує автоматичне резервне повернення; запуски завершуються помилкою, доки ви не виправите плагін або не перемкнете plugins.slots.contextEngine назад на "legacy".
  • Для розробки використовуйте openclaw plugins install -l ./my-engine, щоб прив’язати локальний каталог плагіна без копіювання.
Див. також: Compaction, Контекст, Плагіни, Маніфест плагіна.

Пов’язане