Перейти к основному содержанию
Движок контекста управляет тем, как OpenClaw формирует контекст модели для каждого запуска: какие сообщения включать, как суммаризировать более старую историю и как управлять контекстом на границах субагентов. OpenClaw поставляется со встроенным движком legacy и использует его по умолчанию - большинству пользователей не нужно это менять. Устанавливайте и выбирайте Plugin-движок только если вам нужно другое поведение сборки, Compaction или межсессионного восстановления контекста.

Быстрый старт

1

Проверьте, какой движок активен

openclaw doctor
# or inspect config directly:
cat ~/.openclaw/openclaw.json | jq '.plugins.slots.contextEngine'
2

Установите Plugin-движок

Plugins движков контекста устанавливаются так же, как и любой другой Plugin OpenClaw.
openclaw plugins install @martian-engineering/lossless-claw
3

Включите и выберите движок

// 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 после установки и настройки.
4

Вернитесь к legacy (необязательно)

Задайте для contextEngine значение "legacy" (или полностью удалите ключ - "legacy" используется по умолчанию).

Как это работает

Каждый раз, когда OpenClaw запускает запрос к модели, движок контекста участвует в четырех точках жизненного цикла:
Вызывается, когда в сессию добавляется новое сообщение. Движок может сохранить или проиндексировать сообщение в собственном хранилище данных.
Вызывается перед каждым запуском модели. Движок возвращает упорядоченный набор сообщений (и необязательный systemPromptAddition), который помещается в бюджет токенов.
Вызывается, когда окно контекста заполнено или когда пользователь выполняет /compact. Движок суммаризирует более старую историю, чтобы освободить место.
Вызывается после завершения запуска. Движок может сохранить состояние, запустить фоновую Compaction или обновить индексы.
Для поставляемого в комплекте не-ACP Codex-харнесса OpenClaw применяет тот же жизненный цикл, проецируя собранный контекст в инструкции разработчика Codex и запрос текущего хода. Codex по-прежнему сам управляет своей нативной историей треда и нативным компактором.

Жизненный цикл субагента (необязательно)

OpenClaw вызывает два необязательных хука жизненного цикла субагента:
prepareSubagentSpawn
method
Подготовьте общее состояние контекста перед запуском дочернего выполнения. Хук получает ключи родительской/дочерней сессии, contextMode (isolated или fork), доступные идентификаторы/файлы транскрипта и необязательный TTL. Если он возвращает дескриптор отката, OpenClaw вызывает его, когда создание субагента завершается ошибкой после успешной подготовки. Нативные создания субагентов, которые запрашивают lightContext и разрешаются в contextMode="isolated", намеренно пропускают этот хук, чтобы дочерний запуск начинался с облегченного начального контекста без управляемого движком контекста состояния перед созданием.
onSubagentEnded
method
Очистите ресурсы, когда сессия субагента завершается или удаляется при очистке.

Добавление к системному промпту

Метод assemble может вернуть строку systemPromptAddition. OpenClaw добавляет ее в начало системного промпта для запуска. Это позволяет движкам внедрять динамические указания по восстановлению контекста, инструкции извлечения или контекстно-зависимые подсказки без необходимости в статических файлах рабочей области.

Движок legacy

Встроенный движок legacy сохраняет исходное поведение OpenClaw:
  • Прием: без операции (менеджер сессий напрямую обрабатывает сохранение сообщений).
  • Сборка: сквозной режим (существующий конвейер sanitize → validate → limit в runtime обрабатывает сборку контекста).
  • Compaction: делегирует встроенной суммаризирующей Compaction, которая создает единую сводку старых сообщений и сохраняет последние сообщения без изменений.
  • После хода: без операции.
Движок legacy не регистрирует инструменты и не предоставляет systemPromptAddition. Когда plugins.slots.contextEngine не задан (или задан как "legacy"), этот движок используется автоматически.

Plugin-движки

Plugin может зарегистрировать движок контекста с помощью Plugin API:
import { buildMemorySystemPromptAddition } from "openclaw/plugin-sdk/core";

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 с:
messages
Message[]
обязательно
Упорядоченные сообщения для отправки модели.
estimatedTokens
number
обязательно
Оценка движком общего числа токенов в собранном контексте. OpenClaw использует ее для решений о пороге Compaction и диагностических отчетов.
systemPromptAddition
string
Добавляется в начало системного промпта.
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: сейчас 1
  • runtime: хост OpenClaw, режим runtime (normal, fallback или degraded) и необязательные идентификаторы харнесса/runtime
  • contextEngineSelection: идентификатор выбранного движка контекста и источник выбора
  • 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 внутри попытки включенной для прогона:
Движок владеет поведением Compaction. OpenClaw отключает встроенную в среду выполнения OpenClaw автоматическую Compaction для этого прогона, а реализация compact() в движке отвечает за /compact, восстановительную Compaction при переполнении и любую упреждающую Compaction, которую он хочет выполнить в afterTurn(). OpenClaw все еще может запускать предохранитель переполнения перед prompt; когда он прогнозирует, что полный transcript переполнится, путь восстановления вызывает compact() активного движка перед отправкой еще одного prompt.
Встроенная в среду выполнения OpenClaw автоматическая Compaction все еще может выполняться во время выполнения prompt, но метод compact() активного движка все равно вызывается для /compact и восстановления при переполнении.
ownsCompaction: false не означает, что OpenClaw автоматически откатывается к пути Compaction устаревшего движка.
Это означает, что есть два допустимых шаблона Plugin:
Реализуйте собственный алгоритм Compaction и задайте ownsCompaction: true.
Пустой 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 разрешается только один зарегистрированный контекстный движок. Другие включенные Plugin с kind: "context-engine" все еще могут загружаться и выполнять свой код регистрации; plugins.slots.contextEngine только выбирает, какой зарегистрированный идентификатор движка OpenClaw разрешает, когда ему нужен контекстный движок.
Удаление Plugin: когда вы удаляете Plugin, который сейчас выбран как plugins.slots.contextEngine, OpenClaw сбрасывает слот обратно к значению по умолчанию (legacy). Такое же поведение сброса применяется к plugins.slots.memory. Ручное редактирование конфигурации не требуется.

Связь с Compaction и памятью

Compaction — одна из обязанностей контекстного движка. Устаревший движок делегирует встроенному в OpenClaw суммированию. Движки Plugin могут реализовать любую стратегию Compaction (сводки DAG, векторный поиск и т. д.).
Plugin памяти (plugins.slots.memory) отделены от контекстных движков. Plugin памяти предоставляют поиск/извлечение; контекстные движки управляют тем, что видит модель. Они могут работать вместе - контекстный движок может использовать данные Plugin памяти во время сборки. Движкам Plugin, которым нужен активный путь memory prompt, следует предпочитать buildMemorySystemPromptAddition(...) из openclaw/plugin-sdk/core, который преобразует активные разделы memory prompt в готовый для добавления в начало systemPromptAddition. Если движку нужен более низкоуровневый контроль, он все еще может получать сырые строки из openclaw/plugin-sdk/memory-host-core через buildActiveMemoryPromptSection(...).
Обрезка старых результатов инструментов в памяти все равно выполняется независимо от того, какой контекстный движок активен.

Советы

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

Связанные материалы