OpenClaw 技术专题 (二):上下文管理与知识长青 (The Brain)

9 阅读4分钟

引言:解决 Agent 的“健忘症”

在复杂的生产任务中,对话上下文的处理是决定 Agent 成败的关键。Token 窗口是有限的,但业务逻辑往往是跨越数天、甚至数百轮对话的长程任务。OpenClaw 通过多层次的“思维器官”设计,让 Agent 拥有了既能快速响应当前细节、又能回忆起核心业务背景的能力。


1. 深度解析 Context Engine:复杂对话的内存管理机制

OpenClaw 的上下文处理并非简单的字符串拼接,而是经过 ContextEngine 协议高度抽象的内存管理。

接口设计与流水线

在大脑的核心层,ContextEnginesrc/context-engine/types.ts)定义了标准的处理流水线:

  1. 清理 (Sanitize):移除不必要的媒体大对象(如旧的 Base64 图像)。
  2. 截断 (Truncate):根据 maxHistoryTurns 配置丢弃过早的消息。
  3. 汇聚 (Assemble):将精简后的 Transcript 重新组织为 LLM 可理解的输入。

策略博弈:会话压实 (Session Compaction)

当会话长度达到阈值时,OpenClaw 通过 src/agents/pi-embedded-runner/compact.ts 触发“压实”。这是一个“语义提炼”过程:系统调用模型对老对话进行总结,生成一个摘要基线并回填到 System Prompt 中,从而在节省 Token 的同时保留“长程记忆”。


2. 提示词缓存 (Prompt Caching):性能与成本的极致优化

对于一个成熟的数字员工,其 System Prompt(包含大量的工具定义)通常占用了 70% 以上的上下文。

底层原理:KV Cache 复用

OpenClaw 深度利用了现代模型商(如 Anthropic)的 Prompt Caching。在 proxy-stream-wrappers.ts 中,系统会自动为静态头部打上标记:

// 注入 cache_control,确保首字响应时间 (TTFT) 缩短至毫秒级
if (payload.stream && model.id.startsWith('claude-3-5')) {
  content.cache_control = { type: "ephemeral" };
}

核心价值与性能基准 (Performance Metrics)

在 OpenClaw 的大规模落地实践中,Prompt Caching 带来了量级的变化:

  • 极速响应:对于包含 10k Token 系统提示词的请求,首字响应时间 (TTFT) 从约 5.2秒 降至 0.6秒
  • 大幅降本:缓存命中的 Token 成本仅为原始输入的 1/10
  • 高并发支撑:由于减少了提供商端的计算压力,复杂任务的吞吐量提升了 300% 以上。


3. 多级记忆系统:短期冲刺与长期沉淀

数字员工的“大脑”不仅要有深度,还要有跨度。OpenClaw 通过内存分层架构,实现了从单轮对话到跨月知识的无缝衔接。

3.1 短期记忆:会话上下文 (Active Session)

短期记忆存储在 AgentSession 的活跃转录(Transcript)中。

  • 机制:通过 ContextEngine 进行实时的 SanitizeTruncate
  • 压实:当 Token 接近限制时,系统会自动总结之前的对话,将其转化为“摘要基线”,保持对当前任务目标的精准聚焦。

3.2 长期记忆:QMD (Queryable Markdown) 系统

对于跨越数周或多个项目的知识,OpenClaw 引入了基于 QMDsrc/memory/qmd-manager.ts)的长期记忆引擎。

  • 存储载体:项目根目录下的 MEMORY.mdmemory/*.md 文件,以及经过脱敏后自动导出的历史会话片段。
  • 检索模型:不仅仅是向量搜索。OpenClaw 采用了 BM25 + Vector 混合检索。这确保了当用户询问具体的“API 函数名”(结构化关键字)或模糊的“上次讨论的设计方向”(非结构化语义)时,都能精准召回。

4. 知识的“骨架”:结构化与非结构化内容的协同处理

一个成熟的架构师不仅看文档,更看代码和元数据。OpenClaw 在处理内存内容时,具备深度的“内容识别”能力。

4.1 非结构化数据:语义切片

对于自然的对话、文档描述或日志,OpenClaw 通过 pi-embedded-block-chunker.ts 将其拆分为具有语义完整性的 Chunks(切片)。

  • 智能重叠:确保切片之间有适度的信息交叉,防止检索时丢失上下文边界。

4.2 结构化数据:Metadata 与 Frontmatter

对于具有强逻辑的关系,OpenClaw 鼓励并识别 Markdown Frontmatter

  • 属性提取:在 skillsmemory 文件中,通过 YAML 头部定义 name, requires, version 等属性。
  • 精准点播:当 Agent 感知到任务需要特定权限或环境时,它会通过 resolveSkillInvocationPolicy 直接读取这些结构化字段,实现比模糊语义搜索更可靠的逻辑判断。

通过这种“结构化控节奏,非结构化补语义”的配合,OpenClaw 的记忆系统既具备了人类般的联想力,又拥有了数据库级的严谨性。


总结

通过 Context Engine 的精细调度和 Prompt Caching 的极致省钱,OpenClaw 让 Agent 的“大脑”既能承载海量信息,又不失灵活性。

在下一篇文章中,我们将讨论 Agent 的“双手”——它是如何通过 MCP 协议与现实世界进行交互的。


本文为 OpenClaw 技术系列文章第二篇。