深度

OpenClaw Context Engine 完全指南:四个生命周期钩子如何决定模型看到什么

详解 OpenClaw 可插拔上下文引擎架构:Ingest/Assemble/Compact/After turn 四个生命周期钩子的工作原理,systemPromptAddition 动态注入机制,以及如何安装和配置自定义 Context Engine 插件。

2026/8/124分钟 阅读ClaudeEagle

OpenClaw 的 Context Engine(上下文引擎)是一个可插拔的上下文组装系统,决定每次调用模型时,哪些消息会被包含进去、旧的历史如何被摘要、以及子代理边界之间的上下文如何管理。本文基于官方文档详解其工作原理和插件化架构。

快速了解当前引擎

bash
openclaw doctor
# 或者直接查看配置:
cat ~/.openclaw/openclaw.json | jq '.plugins.slots.contextEngine'

OpenClaw 内置了一个 legacy 引擎,同时插件可以注册替代引擎来接管整个上下文引擎生命周期。

四个生命周期钩子

每次 OpenClaw 运行一次模型调用,Context Engine 会在四个关键节点参与:

1. Ingest(摄入) 新消息加入会话时调用。引擎可以把这条消息存储或 索引到自己的数据存储中 2. Assemble(组装) 每次模型运行之前调用。引擎返回一组符合 token 预算的、 有序排列的消息(可选附带 systemPromptAddition) 3. Compact(压缩) 上下文窗口填满时调用,或者用户手动执行 /compact 时调用。 引擎负责把旧的历史摘要化,腾出空间 4. After turn(轮次结束后) 一次运行完成后调用。引擎可以持久化状态、 触发后台压缩,或更新索引

这四个钩子覆盖了一次模型交互从"消息进来"到"交互结束"的完整链路,理解这个生命周期,是理解 OpenClaw 如何管理上下文窗口这个稀缺资源的关键。

可选的子代理生命周期钩子

目前 OpenClaw 只调用一个子代理生命周期钩子: onSubagentEnded — 当子代理会话完成或被清理时执行清理操作 prepareSubagentSpawn 钩子已经是接口的一部分(为未来使用预留), 但当前运行时尚未调用它

systemPromptAddition:动态注入上下文的关键机制

assemble 方法可以返回一个 systemPromptAddition 字符串,OpenClaw 会把它前置拼接到当次运行的系统提示词中。这个机制让引擎能够动态注入召回指引、检索指令,或者具备上下文感知能力的提示——而不需要依赖静态的工作区文件

这一点值得展开理解——普通的 AGENTS.md/SOUL.md 这类文件是每次会话都固定注入的静态内容,而 systemPromptAddition 提供的是运行时动态生成的补充内容,可以根据当前会话的具体情况(比如检索到的相关历史记忆)实时变化。

如何安装一个 Context Engine 插件

bash
# 从 npm 安装
openclaw plugins install @martian-engineering/lossless-claw

# 或者从本地路径安装(用于开发调试)
openclaw plugins install -l ./my-context-engine

安装完成后,需要启用插件并在配置中选择它作为激活的引擎:

json5
// openclaw.json
{
  plugins: {
    slots: {
      contextEngine: "lossless-claw", // 必须匹配插件注册的引擎ID
    },
    entries: {
      "lossless-claw": {
        enabled: true,
        // 插件特定配置写在这里(参考插件自己的文档)
      },
    },
  },
}

配置完成后需要重启 Gateway 才能生效。如果想切回内置引擎,把 contextEngine 设为 "legacy",或者直接删除这个配置项——"legacy" 本来就是默认值。

为什么需要一个可插拔的上下文引擎

把这个设计放到实际使用场景里看,价值就很清楚了——不同用户对"上下文该怎么管理"的需求差异很大:有的人希望更激进的压缩策略以节省 token 成本,有的人希望接入向量检索让历史召回更精准,有的人可能需要针对特定领域数据做定制化的索引方式。把 Context Engine 做成可插拔的插件槽位,意味着这些差异化需求不需要 fork 整个 OpenClaw 代码库去改,而是可以作为独立插件开发、分发、按需启用。

实战建议

1. 先用 openclaw doctor 确认当前生效的是哪个引擎, 避免配置了插件却忘记切换 contextEngine 槽位 2. 开发自己的 Context Engine 插件前,先吃透四个生命周期钩子 各自的调用时机,避免在错误的阶段做本该在别处做的事 3. 涉及压缩策略调整时,优先在测试环境验证 Compact 钩子 不会误删关键上下文信息 4. 切换引擎后记得重启 Gateway,配置不会热生效

总结

Context Engine 是 OpenClaw 架构中一个相对底层但决定性的组件——它直接决定了"模型这一轮到底看到了什么",而这几乎是决定 Agent 表现好坏最核心的变量之一。理解 Ingest/Assemble/Compact/After turn 这四个钩子,对于想要深度定制 OpenClaw 上下文管理策略的开发者,是绕不开的第一课。


来源:Context Engine — OpenClaw 官方文档

相关文章推荐

深度OpenClaw 插件开发完全指南:从零构建自定义渠道和工具插件OpenClaw 插件(Plugin)开发完整教程:插件类型(渠道插件/工具插件/Provider插件)、插件的目录结构和 package.json 规范、使用 Plugin SDK 开发自定义消息渠道(实现 onMessage/sendMessage 接口)、开发自定义工具(Tool)的函数签名和参数 Schema、本地插件安装与调试(openclaw plugins install ./local-plugin)、发布到 npm 的规范要求(@openclaw/ 命名空间)、插件的权限声明(capabilities)、社区插件列表(Plugin Bundles)获取,以及常见插件开发错误和调试技巧。2026/3/25深度OpenClaw 开源生态全景:MIT 协议、插件系统、社区贡献与二次开发指南OpenClaw 开源生态完整介绍:MIT 开源协议含义、GitHub 仓库结构、Skills 插件市场(ClawHub)、社区贡献指南(提 PR/报 Issue)、自定义频道开发、自定义工具(Tool)扩展、本地开发环境搭建,以及如何基于 OpenClaw 打造自己的 AI 助手产品。2026/3/17深度OpenClaw Session 压缩(Compaction)机制详解:上下文窗口管理与手动压缩技巧OpenClaw Session 压缩机制深度解析:Compaction 与 Session Pruning 的区别、自动压缩触发条件、identifierPolicy 配置、为压缩单独指定模型(支持本地 Ollama)、手动 /compact 命令用法,以及 OpenAI 服务端压缩与本地压缩的协同工作原理。2026/3/10深度OpenClaw Delegate 架构详解:让 Agent 以组织身份代表你行动,而不是冒充你详解 OpenClaw Delegate 代表架构:Agent 如何拥有独立身份代表组织成员行动而不冒充人类,三级能力分层(只读起草/代表发送/主动式)及硬性阻断规则、Gateway工具限制、沙箱隔离等安全配置。2026/8/12深度OpenClaw Capability 架构指南:插件边界、共享运行时和供应商解耦OpenClaw Capability Cookbook 官方文档中文整理:什么时候创建 capability、标准开发顺序、core/vendor plugin/feature plugin 分工、provider registry、runtime helper、image generation 示例和架构审查清单。2026/6/4深度OpenClaw vs Hermes Agent:2026 年两大开源 AI Agent 框架深度对比与选型OpenClaw 和 Hermes Agent 深度对比:记忆系统、自学习技能、LLM 支持(Claude vs 200+ 模型)、部署方式、适用场景全面分析,附决策指南和两者互补组合方案。2026/4/13