Fundamentals
Механизм контекста
Движок контекста управляет тем, как OpenClaw формирует контекст модели для каждого запуска: какие сообщения включать, как суммаризировать более старую историю и как управлять контекстом на границах субагентов.
OpenClaw поставляется со встроенным движком legacy и использует его по умолчанию - большинству пользователей не нужно это менять. Устанавливайте и выбирайте Plugin-движок только если вам нужно другое поведение сборки, Compaction или межсессионного восстановления контекста.
Быстрый старт
Проверьте, какой движок активен
openclaw doctor# or inspect config directly:cat ~/.openclaw/openclaw.json | jq '.plugins.slots.contextEngine'Установите Plugin-движок
Plugins движков контекста устанавливаются так же, как и любой другой Plugin OpenClaw.
Из npm
openclaw plugins install @martian-engineering/lossless-clawИз локального пути
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 после установки и настройки.
Вернитесь к legacy (необязательно)
Задайте для contextEngine значение "legacy" (или полностью удалите ключ - "legacy" используется по умолчанию).
Как это работает
Каждый раз, когда OpenClaw запускает запрос к модели, движок контекста участвует в четырех точках жизненного цикла:
1. Прием
Вызывается, когда в сессию добавляется новое сообщение. Движок может сохранить или проиндексировать сообщение в собственном хранилище данных.
2. Сборка
Вызывается перед каждым запуском модели. Движок возвращает упорядоченный набор сообщений (и необязательный systemPromptAddition), который помещается в бюджет токенов.
3. Compaction
Вызывается, когда окно контекста заполнено или когда пользователь выполняет /compact. Движок суммаризирует более старую историю, чтобы освободить место.
4. После хода
Вызывается после завершения запуска. Движок может сохранить состояние, запустить фоновую Compaction или обновить индексы.
Для поставляемого в комплекте не-ACP Codex-харнесса OpenClaw применяет тот же жизненный цикл, проецируя собранный контекст в инструкции разработчика Codex и запрос текущего хода. Codex по-прежнему сам управляет своей нативной историей треда и нативным компактором.
Жизненный цикл субагента (необязательно)
OpenClaw вызывает два необязательных хука жизненного цикла субагента:
prepareSubagentSpawnmethodПодготовьте общее состояние контекста перед запуском дочернего выполнения. Хук получает ключи родительской/дочерней сессии, contextMode (isolated или fork), доступные идентификаторы/файлы транскрипта и необязательный TTL. Если он возвращает дескриптор отката, OpenClaw вызывает его, когда создание субагента завершается ошибкой после успешной подготовки. Нативные создания субагентов, которые запрашивают lightContext и разрешаются в contextMode="isolated", намеренно пропускают этот хук, чтобы дочерний запуск начинался с облегченного начального контекста без управляемого движком контекста состояния перед созданием.
onSubagentEndedmethodОчистите ресурсы, когда сессия субагента завершается или удаляется при очистке.
Добавление к системному промпту
Метод assemble может вернуть строку systemPromptAddition. OpenClaw добавляет ее в начало системного промпта для запуска. Это позволяет движкам внедрять динамические указания по восстановлению контекста, инструкции извлечения или контекстно-зависимые подсказки без необходимости в статических файлах рабочей области.
Движок legacy
Встроенный движок legacy сохраняет исходное поведение OpenClaw:
- Прием: без операции (менеджер сессий напрямую обрабатывает сохранение сообщений).
- Сборка: сквозной режим (существующий конвейер sanitize → validate → limit в runtime обрабатывает сборку контекста).
- Compaction: делегирует встроенной суммаризирующей Compaction, которая создает единую сводку старых сообщений и сохраняет последние сообщения без изменений.
- После хода: без операции.
Движок legacy не регистрирует инструменты и не предоставляет systemPromptAddition.
Когда plugins.slots.contextEngine не задан (или задан как "legacy"), этот движок используется автоматически.
Plugin-движки
Plugin может зарегистрировать движок контекста с помощью Plugin API:
export default function register(api) { api.registerContextEngine("my-engine", (ctx) => ({ 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, availableTools, citationsMode }) { // Return messages that fit the budget return { messages: buildContext(messages, tokenBudget), estimatedTokens: countTokens(messages), systemPromptAddition: buildMemorySystemPromptAddition({ availableTools: availableTools ?? new Set(), citationsMode, }), }; }, async compact({ sessionId, force }) { // Summarize older context return { ok: true, compacted: true }; }, }));}Фабрика ctx включает необязательные значения config, agentDir и workspaceDir, чтобы Plugins могли инициализировать состояние для агента или рабочей области до запуска первого хука жизненного цикла.
Затем включите его в конфигурации:
{ plugins: { slots: { contextEngine: "my-engine", }, entries: { "my-engine": { enabled: true, }, }, },}Интерфейс ContextEngine
Обязательные члены:
| Член | Тип | Назначение |
|---|---|---|
info |
Свойство | Идентификатор движка, имя, версия и владеет ли он Compaction |
ingest(params) |
Метод | Сохранить одно сообщение |
assemble(params) |
Метод | Собрать контекст для запуска модели (возвращает AssembleResult) |
compact(params) |
Метод | Суммаризировать/сократить контекст |
assemble возвращает AssembleResult с:
messagesMessage[]requiredУпорядоченные сообщения для отправки модели.
estimatedTokensnumberrequiredОценка движком общего числа токенов в собранном контексте. OpenClaw использует ее для решений о пороге Compaction и диагностических отчетов.
systemPromptAdditionstringДобавляется в начало системного промпта.
promptAuthority"assembled" | "preassembly_may_overflow"Управляет тем, какую оценку токенов runner использует для предварительных проверок переполнения. По умолчанию используется "assembled", что означает проверку только оценки собранного промпта - это подходит для движков, которые возвращают оконный, самодостаточный контекст. Устанавливайте "preassembly_may_overflow" только когда собранное представление может скрывать риск переполнения в базовом транскрипте; тогда runner берет максимум из собранной оценки и оценки истории сессии до сборки (без оконного ограничения), когда решает, нужно ли заранее выполнить Compaction. В любом случае модель видит именно те сообщения, которые вы возвращаете, - promptAuthority влияет только на предварительную проверку.
compact возвращает CompactResult. Когда Compaction ротирует активный транскрипт, result.sessionId и result.sessionFile идентифицируют следующую сессию, которую должен использовать следующий повтор или ход.
Необязательные члены:
| Член | Тип | Назначение |
|---|---|---|
bootstrap(params) |
Метод | Инициализировать состояние движка для сессии. Вызывается один раз, когда движок впервые видит сессию (например, импорт истории). |
ingestBatch(params) |
Метод | Принять завершенный ход пакетом. Вызывается после завершения запуска, со всеми сообщениями из этого хода сразу. |
afterTurn(params) |
Метод | Работа жизненного цикла после запуска (сохранить состояние, запустить фоновую Compaction). |
prepareSubagentSpawn(params) |
Метод | Настроить общее состояние для дочерней сессии до ее запуска. |
onSubagentEnded(params) |
Метод | Очистить ресурсы после завершения субагента. |
dispose() |
Метод | Освободить ресурсы. Вызывается при завершении работы Gateway или перезагрузке Plugin - не для каждой сессии. |
Настройки runtime
Хуки жизненного цикла, которые выполняются внутри OpenClaw, получают необязательный объект runtimeSettings. Это версионированная, доступная только для чтения внутренняя поверхность API producer/consumer: OpenClaw создает ее для выбранного движка контекста, а движок контекста потребляет ее внутри хуков жизненного цикла. Она не отображается напрямую пользователям и не создает отдельную поверхность отчетности.
schemaVersion: сейчас1runtime: хост OpenClaw, режим runtime (normal,fallbackилиdegraded) и необязательные идентификаторы харнесса/runtimecontextEngineSelection: идентификатор выбранного движка контекста и источник выбораexecutionHost: идентификатор хоста и метка поверхности, вызывающей хукmodel: запрошенная модель, разрешенная модель, провайдер и необязательное семейство моделейlimits: бюджет токенов промпта и максимальное число выходных токенов, если известноdiagnostics: закрытые коды причин fallback и degraded, если известны
Поля, которые могут быть неизвестны, представлены как null; поля-дискриминаторы, такие как режим runtime и источник выбора, остаются не-nullable. Старые движки остаются совместимыми: если строгий устаревший движок отклоняет runtimeSettings как неизвестное свойство, OpenClaw повторяет вызов жизненного цикла без него, а не помещает движок в карантин.
Требования к хосту
Движки контекста могут объявлять требования к возможностям хоста в info.hostRequirements. OpenClaw проверяет эти требования перед запуском операции и закрыто завершает ее с понятной ошибкой, когда выбранный runtime не может им соответствовать.
Для запусков агента объявляйте assemble-before-prompt, когда движок должен управлять фактическим промптом модели через assemble():
info: { id: "my-context-engine", name: "My Context Engine", hostRequirements: { "agent-run": { requiredCapabilities: ["assemble-before-prompt"], unsupportedMessage: "Use the native Codex or OpenClaw embedded runtime, or select the legacy context engine.", }, },}Нативные запуски агента Codex и встроенного агента OpenClaw удовлетворяют assemble-before-prompt. Универсальные CLI-бэкенды - нет, поэтому движки, которым это требуется, отклоняются до запуска CLI-процесса.
Изоляция сбоев
OpenClaw изолирует выбранный Plugin-движок от основного пути ответа. Если движок не legacy отсутствует, не проходит проверку контракта, выбрасывает исключение при создании фабрики или выбрасывает исключение из метода жизненного цикла, OpenClaw помещает этот движок в карантин для текущего процесса Gateway и понижает работу движка контекста до встроенного движка legacy. Ошибка записывается в журнал вместе с неудачной операцией, чтобы оператор мог исправить, обновить или отключить Plugin без того, чтобы агент перестал отвечать.
Ошибки требований хоста отличаются: когда движок объявляет, что среда выполнения не имеет необходимой возможности, OpenClaw завершает выполнение с отказом до запуска прогона. Это защищает движки, которые повредили бы состояние при запуске в неподдерживаемом хосте.
ownsCompaction
ownsCompaction управляет тем, остается ли встроенная в среду выполнения OpenClaw автоматическая Compaction внутри попытки включенной для прогона:
ownsCompaction: true
Движок владеет поведением Compaction. OpenClaw отключает встроенную в среду выполнения OpenClaw автоматическую Compaction для этого прогона, а реализация compact() в движке отвечает за /compact, восстановительную Compaction при переполнении и любую упреждающую Compaction, которую он хочет выполнить в afterTurn(). OpenClaw все еще может запускать предохранитель переполнения перед prompt; когда он прогнозирует, что полный transcript переполнится, путь восстановления вызывает compact() активного движка перед отправкой еще одного prompt.
ownsCompaction: false or unset
Встроенная в среду выполнения OpenClaw автоматическая Compaction все еще может выполняться во время выполнения prompt, но метод compact() активного движка все равно вызывается для /compact и восстановления при переполнении.
Это означает, что есть два допустимых шаблона Plugin:
Owning mode
Реализуйте собственный алгоритм Compaction и задайте ownsCompaction: true.
Delegating mode
Задайте ownsCompaction: false и сделайте так, чтобы compact() вызывал delegateCompactionToRuntime(...) из openclaw/plugin-sdk/core для использования встроенного поведения Compaction OpenClaw.
Пустой compact() небезопасен для активного движка без владения, потому что он отключает обычный путь /compact и восстановительной Compaction при переполнении для этого слота движка.
Справочник по конфигурации
{ plugins: { slots: { // Select the active context engine. Default: "legacy". // Set to a plugin id to use a plugin engine. contextEngine: "legacy", }, },}Связь с Compaction и памятью
Compaction
Compaction — одна из обязанностей контекстного движка. Устаревший движок делегирует встроенному в OpenClaw суммированию. Движки Plugin могут реализовать любую стратегию Compaction (сводки DAG, векторный поиск и т. д.).
Memory plugins
Plugin памяти (plugins.slots.memory) отделены от контекстных движков. Plugin памяти предоставляют поиск/извлечение; контекстные движки управляют тем, что видит модель. Они могут работать вместе - контекстный движок может использовать данные Plugin памяти во время сборки. Движкам Plugin, которым нужен активный путь memory prompt, следует предпочитать buildMemorySystemPromptAddition(...) из openclaw/plugin-sdk/core, который преобразует активные разделы memory prompt в готовый для добавления в начало systemPromptAddition. Если движку нужен более низкоуровневый контроль, он все еще может получать сырые строки из openclaw/plugin-sdk/memory-host-core через buildActiveMemoryPromptSection(...).
Session pruning
Обрезка старых результатов инструментов в памяти все равно выполняется независимо от того, какой контекстный движок активен.
Советы
- Используйте
openclaw doctor, чтобы проверить, что ваш движок загружается корректно. - При переключении движков существующие сессии продолжают работу со своей текущей историей. Новый движок берет на себя будущие прогоны.
- Ошибки движка записываются в журнал, а выбранный движок Plugin помещается в карантин для текущего процесса Gateway. OpenClaw откатывается к
legacyдля пользовательских turns, чтобы ответы могли продолжаться, но вам все равно следует исправить, обновить, отключить или удалить неисправный Plugin. - Для разработки используйте
openclaw plugins install -l ./my-engine, чтобы связать локальный каталог Plugin без копирования.
Связанные материалы
- Compaction - суммирование длинных бесед
- Контекст - как строится контекст для agent turns
- Архитектура Plugin - регистрация Plugin контекстного движка
- Манифест Plugin - поля манифеста Plugin
- Plugins - обзор Plugin