Skip to main content
Рушій контексту керує тим, як OpenClaw формує контекст моделі для кожного запуску: які повідомлення включати, як узагальнювати давнішу історію та як керувати контекстом на межах субагентів. OpenClaw постачається з вбудованим рушієм legacy і використовує його за замовчуванням. Установлюйте й вибирайте рушій-плагін, лише якщо потрібна інша поведінка формування, ущільнення або відновлення даних між сеансами.

Швидкий початок

1

Перевірте, який рушій активний

2

Установіть рушій-плагін

Плагіни рушіїв контексту встановлюються так само, як і будь-які інші плагіни OpenClaw.
3

Увімкніть і виберіть рушій

Після встановлення та налаштування перезапустіть Gateway.
4

Поверніться до застарілого рушія (необов’язково)

Установіть для contextEngine значення "legacy" (або повністю видаліть ключ — "legacy" є значенням за замовчуванням).

Як це працює

Щоразу, коли OpenClaw запускає запит до моделі, рушій контексту залучається на чотирьох етапах життєвого циклу:
Викликається, коли до сеансу додається нове повідомлення. Рушій може зберегти або проіндексувати повідомлення у власному сховищі даних.
Викликається перед кожним запуском моделі. Рушій повертає впорядкований набір повідомлень (і необов’язковий systemPromptAddition), які вкладаються в бюджет токенів.
Викликається, коли контекстне вікно заповнене або коли користувач запускає /compact. Рушій узагальнює давнішу історію, щоб звільнити місце.
Викликається після завершення запуску. Рушій може зберегти стан, запустити фонове ущільнення або оновити індекси.
Рушії також можуть реалізовувати необов’язковий метод maintain() для обслуговування транскрипту (безпечного перезаписування через runtimeContext.rewriteTranscriptEntries()) після початкового завантаження, успішного ходу або ущільнення. Установіть info.turnMaintenanceMode: "background", щоб виконувати його як відкладену роботу, а не блокувати відповідь. Для вбудованого засобу виконання Codex без ACP OpenClaw застосовує той самий життєвий цикл, проєктуючи сформований контекст в інструкції розробника Codex і запит поточного ходу. Codex і надалі керує власною історією потоків і власним засобом ущільнення.

Життєвий цикл субагента (необов’язково)

OpenClaw викликає два необов’язкові перехоплювачі життєвого циклу субагента:
method
Підготуйте спільний стан контексту перед початком дочірнього запуску. Перехоплювач отримує ключі батьківського й дочірнього сеансів, contextMode (isolated або fork), доступні ідентифікатори чи файли транскриптів і необов’язковий TTL. Якщо він повертає дескриптор відкочування, OpenClaw викликає його, коли створення завершується невдало після успішної підготовки. Власні механізми створення субагентів, які запитують lightContext і визначаються як contextMode="isolated", навмисно пропускають цей перехоплювач, щоб дочірній процес починав роботу з полегшеного початкового контексту без стану перед створенням, яким керує рушій контексту.
method
Виконайте очищення після завершення або прибирання сеансу субагента.

Доповнення системного запиту

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

Застарілий рушій

Вбудований рушій legacy зберігає початкову поведінку OpenClaw:
  • Приймання: не виконує жодних дій (диспетчер сеансів безпосередньо керує збереженням повідомлень).
  • Формування: передає дані без змін (формуванням контексту керує наявний у середовищі виконання конвеєр очищення → перевірки → обмеження).
  • Ущільнення: делегує роботу вбудованому ущільненню шляхом узагальнення, яке створює єдине резюме давніших повідомлень і залишає останні повідомлення без змін.
  • Після ходу: не виконує жодних дій.
Застарілий рушій не реєструє інструменти й не надає systemPromptAddition. Якщо plugins.slots.contextEngine не задано (або для нього встановлено "legacy"), цей рушій використовується автоматично.

Рушії-плагіни

Плагін може зареєструвати рушій контексту за допомогою API плагінів:
Фабрика ctx містить необов’язкові значення config, agentDir і workspaceDir, щоб плагіни могли ініціалізувати стан окремого агента або робочого простору до виконання першого перехоплювача життєвого циклу. Потім увімкніть його в конфігурації:

Інтерфейс ContextEngine

Обов’язкові члени: assemble повертає AssembleResult з такими полями:
Message[]
обов'язково
Упорядковані повідомлення, які потрібно надіслати моделі.
number
обов'язково
Оцінка рушієм загальної кількості токенів у сформованому контексті. OpenClaw використовує її для ухвалення рішень щодо порога ущільнення та діагностичних звітів.
string
Додається на початок системного запиту.
"assembled" | "preassembly_may_overflow"
Визначає, яку оцінку кількості токенів засіб запуску використовує для попередніх перевірок на випередження переповнення. Значення за замовчуванням — "assembled", тобто для рушіїв, які не керують ущільненням, перевіряється лише оцінка сформованого запиту. Рушії, які задають ownsCompaction: true, самостійно керують допуском запитів, тому OpenClaw за замовчуванням пропускає загальну попередню перевірку перед запитом. Установлюйте "preassembly_may_overflow", лише якщо сформоване представлення може приховати ризик переповнення в базовому транскрипті; тоді засіб запуску залишає загальну попередню перевірку активною та бере максимальне значення з оцінки сформованого контексту й оцінки історії сеансу до формування (без застосування вікна), вирішуючи, чи потрібно заздалегідь виконати ущільнення. У будь-якому разі модель і надалі отримує саме повернені повідомлення — promptAuthority впливає лише на попередню перевірку.
ContextEngineProjection
Необов’язковий життєвий цикл проєкції для хостів із постійними серверними потоками (наприклад, app-server Codex). mode: "thread_bootstrap" зі стабільним epoch указує хосту вставити сформований контекст один раз за епоху й повторно використовувати серверний потік, доки епоха не зміниться, замість повторного проєктування на кожному ході. Для звичайного проєктування на кожному ході не вказуйте це поле.
compact повертає CompactResult. Коли ущільнення змінює ідентичність активного сеансу, result.sessionTarget (типізований ContextEngineSessionTarget, що містить ідентичність сеансу й область сховища) визначає наступний сеанс, який має використовувати наступна повторна спроба або хід; result.sessionId дублює ідентифікатор наступного сеансу. Необов’язкові члени:

Налаштування середовища виконання

Перехоплювачі життєвого циклу, які виконуються всередині OpenClaw, отримують необов’язковий об’єкт runtimeSettings. Це версіонована внутрішня поверхня API «виробник — споживач» лише для читання: OpenClaw створює її для вибраного рушія контексту, а рушій контексту використовує її в перехоплювачах життєвого циклу. Вона не відображається безпосередньо користувачам і не створює окремої поверхні звітності.
  • schemaVersion: наразі 1
  • runtime: хост OpenClaw, режим середовища виконання (normal, fallback або degraded) та необов’язкові ідентифікатори тестового каркаса/середовища виконання
  • contextEngineSelection: ідентифікатор вибраного рушія контексту та джерело вибору
  • executionHost: ідентифікатор і мітка хоста для поверхні, що викликає хук
  • model: запитана модель, визначена модель, провайдер і необов’язкове сімейство моделей
  • limits: бюджет токенів запиту та максимальна кількість вихідних токенів, якщо відомо
  • diagnostics: коди причин закритого резервного переходу та роботи в погіршеному режимі, якщо відомо
Поля, значення яких може бути невідомим, подаються як null; поля-дискримінатори, як-от режим середовища виконання та джерело вибору, не допускають значення null. Старіші рушії залишаються сумісними: якщо строгий застарілий рушій відхиляє runtimeSettings як невідому властивість, OpenClaw повторює виклик життєвого циклу без неї замість поміщення рушія в карантин.

Вимоги до хоста

Рушії контексту можуть оголошувати вимоги до можливостей хоста в info.hostRequirements. OpenClaw перевіряє ці вимоги перед початком операції та безпечно припиняє роботу з описовою помилкою, якщо вибране середовище виконання не може їх задовольнити. Для запусків агента оголосіть assemble-before-prompt, якщо рушій має керувати фактичним запитом моделі через assemble():
Нативні запуски агента Codex і запуски у вбудованому середовищі OpenClaw задовольняють assemble-before-prompt. Універсальні серверні компоненти CLI — ні, тому рушії, які вимагають цю можливість, відхиляються до запуску процесу CLI.

Ізоляція збоїв

OpenClaw ізолює вибраний рушій плагіна від основного шляху відповіді. Якщо незастарілий рушій відсутній, не проходить перевірку контракту, генерує виняток під час створення фабрики або в методі життєвого циклу, OpenClaw поміщає цей рушій у карантин для поточного процесу Gateway і переводить роботу з рушієм контексту на вбудований рушій legacy. Помилка реєструється разом із невдалою операцією, щоб оператор міг виправити, оновити або вимкнути плагін, а агент не припиняв відповідати. Збої вимог до хоста обробляються інакше: коли рушій оголошує, що середовище виконання не має необхідної можливості, OpenClaw безпечно припиняє роботу до початку запуску. Це захищає рушії, які пошкодили б стан у разі запуску на непідтримуваному хості.

ownsCompaction

ownsCompaction визначає, чи залишається ввімкненим для запуску вбудоване автоматичне ущільнення середовища виконання OpenClaw у межах спроби:
Рушій керує поведінкою ущільнення. OpenClaw вимикає для цього запуску вбудоване автоматичне ущільнення середовища виконання OpenClaw і загальну попередню перевірку переповнення перед запитом, а реалізація compact() рушія відповідає за /compact, ущільнення для відновлення після переповнення провайдера та будь-яке випереджальне ущільнення, яке потрібно виконати в afterTurn(). OpenClaw усе одно запускає запобіжник переповнення перед запитом, коли рушій повертає promptAuthority: "preassembly_may_overflow" з assemble().
Вбудоване автоматичне ущільнення середовища виконання OpenClaw усе ще може виконуватися під час обробки запиту, але метод compact() активного рушія все одно викликається для /compact і відновлення після переповнення.
ownsCompaction: false не означає, що OpenClaw автоматично переходить на шлях ущільнення застарілого рушія.
Отже, існує два коректні шаблони плагінів:
Реалізуйте власний алгоритм ущільнення та встановіть ownsCompaction: true.
Порожня реалізація compact() небезпечна для активного рушія, який не керує ущільненням, оскільки вона вимикає звичайний шлях ущільнення /compact і відновлення після переповнення для цього слота рушія.

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

Під час виконання слот є ексклюзивним — для певного запуску або операції ущільнення визначається лише один зареєстрований рушій контексту. Інші ввімкнені плагіни kind: "context-engine" усе ще можуть завантажуватися та виконувати свій код реєстрації; plugins.slots.contextEngine лише вибирає ідентифікатор зареєстрованого рушія, який OpenClaw визначає, коли йому потрібен рушій контексту.
Видалення плагіна: коли ви видаляєте плагін, який наразі вибрано як plugins.slots.contextEngine, OpenClaw повертає слот до типового значення (legacy). Така сама поведінка скидання застосовується до plugins.slots.memory. Редагувати конфігурацію вручну не потрібно.

Зв’язок з ущільненням і пам’яттю

Compaction — один з обов’язків рушія контексту. Застарілий рушій делегує роботу вбудованому механізму підсумовування OpenClaw. Рушії плагінів можуть реалізовувати будь-яку стратегію ущільнення (підсумки DAG, векторний пошук тощо).
Плагіни пам’яті (plugins.slots.memory) відокремлені від рушіїв контексту. Плагіни пам’яті забезпечують пошук/отримання даних; рушії контексту керують тим, що бачить модель. Вони можуть працювати разом — рушій контексту може використовувати дані плагіна пам’яті під час складання. Рушіям плагінів, яким потрібен активний шлях запиту пам’яті, варто надавати перевагу buildMemorySystemPromptAddition(...) з openclaw/plugin-sdk/core, що перетворює активні розділи запиту пам’яті на готовий до додавання на початок systemPromptAddition. Якщо рушію потрібен низькорівневий контроль, він усе ще може отримувати необроблені рядки з openclaw/plugin-sdk/memory-host-core через buildActiveMemoryPromptSection(...).
Обрізання старих результатів інструментів у пам’яті виконується незалежно від того, який рушій контексту активний.

Поради

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

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