首页 > 默认 > OpenClaw 的上下文注入管理优化实践

OpenClaw 的上下文注入管理优化实践

2026年6月13日


当你发现 AI 助手开始”变笨”,问题可能不在模型,而在上下文。

上下文膨胀的代价

模型处理上下文时,注意力机制会对所有 token 做关联计算。注入越多无关信息:

注意力稀释 — 模型需要从大量文本中定位有用信息,无关内容越多,定位成本越高

指令遵循退化 — 特别是小模型(如 128K context 的模型),静态注入占比越大,遵循用户指令的能力越弱

token 浪费 — 虽然缓存命中率高,但每次调用仍然计费

这恰好对应了 OpenClaw Issue #92451 报告的问题:v2026.6.x 新增了 20+ 个默认工具和系统指令,导致 instruction following 退化。

一、OpenClaw 会话的上下文结构

OpenClaw 的一次会话,上下文由六层构成:

模块内容加载时机
1系统指令角色定义、工具调用规范、安全策略、格式规则初始注入
2工具定义30+ 工具的完整 JSON Schema 描述初始注入
3可用技能列表53 个启用 skill 的名称、描述、路径初始注入
4Project ContextAGENTS.md / SOUL.md / USER.md / TOOLS.md / MEMORY.md / HEARTBEAT.md初始注入
5动态上下文Inbound Context、Messaging 规范、Group Chat Context、Runtime 信息初始注入
6对话历史用户消息 + AI 回复 + 工具调用结果随对话增长

其中 1-5 属于初始注入,在每次新会话启动时一次性加载;6 是随对话推进逐渐增长的部分。

二、初始上下文注入构成

用 /status 查看初始注入的实测数据。优化前:

Context: 44k/1.0m (4.4%)   Cache: 98% hit

Tokens: 43k in / 37 out

44k tokens 的初始注入,各模块占比:

模块估算大小占比用户可控?
系统指令~5k11%
工具定义~10k23%
技能列表~3k7%
Project Context 文件~25k57%
动态上下文 + 运行时~1k2%
合计初始注入~44k100%
对话历史 (首轮)~6k

关键事实:

系统指令 + 工具定义 = 15k,占初始注入的 34%。这是 OpenClaw 框架自身的开销,用户无法优化。

技能列表 = 3k,占 7%。53 个启用 skill,每个描述约 60 tokens。OpenClaw 已正确过滤禁用 skill,但数量本身无法由用户缩减。

Project Context = 25k,占 57%。这是用户唯一能直接优化的部分,也是最大的膨胀源。“98% 缓存命中率”是假象。静态模板每次都相同,prompt cache 直接命中不代表对话历史被复用。

三、我们能优化什么,为什么只能优化这些

初始注入的六个模块中:

模块能否优化原因
系统指令OpenClaw 框架内置,除非官方修改
工具定义工具 schema 是运行时必需,不能删减
技能列表部分可以禁用不需要的 skill,但框架层面无法缩减描述长度
Project Context用户完全控制文件内容
动态上下文运行时自动生成
对话历史但这是增量增长,不是初始注入

所以,唯一可优化的初始注入源就是 Project Context 文件 — 也就是 SOUL.md、USER.md、AGENTS.md、TOOLS.md、MEMORY.md 这些。优化前这 5 个文件合计约 25k tokens,占初始注入的 57%。

四、解决方案:冷热分层策略

核心思路:

每次会话都用到的 -> 留在 MD 文件中(热数据);偶尔才用到的 -> 迁移到 Obsidian 知识库,MD 中只留引用(冷数据);从来不用的 -> 直接删除。

第一刀:TOOLS.md 瘦身

TOOLS.md 是最大的膨胀源。原始版本约 15KB,包含大量场景化的代码示例:

# 原始内容(已删除)

– HZERO 低代码平台 React 表单填写完整代码(~1.5KB)

– SVG 中文字体规范完整教程(~0.8KB)

– PPTX 图标规则完整示例(~0.8KB)

– 模板占位内容 “What Goes Here / Examples”(~0.5KB)

问题在于:模型本身就知道这些知识。React 表单怎么填、SVG 字体怎么设、PPT 图标怎么做 — 不需要在 TOOLS.md 里写完整教程。只需要保留模型不知道的、犯过错的教训:

## HZERO 低代码平台操作经验

– iframe 嵌套:所有页面在 iframe 中,通过 iframe.contentDocument 访问

– React 表单:设置值后必须清除 _valueTracker 再触发事件

– 事件上下文:用 iframeWin.Event 而非外层 Event

从 15KB 降到 3.9KB,减少 74%。

第二刀:MEMORY.md 冷数据迁移

MEMORY.md 原始版本约 12KB,其中有些条目长期不被引用。通过 memory_search 搜索会话记录验证:

条目近期被引用?处理
HZERO 产品授权控制0 次迁移到 HZERO-wiki
信通院合作事项0 次迁移到 HZERO-wiki
GitHub Issue 操作偏好1 次保留
HZERO 飞码架构与定位1 次已是指针,保留

迁移后 MEMORY.md 从详细内容变为只留 wiki 路径引用:

## HZERO 产品授权控制

详细内容已入库 HZERO-wiki: `wiki/HZERO授权用户数控制逻辑.md`

第三刀:红线文件精简

SOUL.md、USER.md、AGENTS.md 定位为”仅人工维护”,AI 禁止自动修改。同时精简内容:

1. SOUL.md: 删除开头结尾的修辞性文字,只保留核心原则和边界(2.1KB -> 0.97KB)

2. AGENTS.md: 删除委派模板的详细格式说明,只保留必填项(2.4KB -> 1.7KB)

3. USER.md: 新增红线禁令表,禁止修改 (1KB,保持不变)

治理效果

指标优化前优化后
TOOLS.md~15KB~3.9KB
MEMORY.md~12KB~3KB
SOUL.md2.1KB0.97KB
AGENTS.md2.4KB1.7KB
USER.md1KB1KB
Project Context 合计~25k tokens~8k tokens
初始注入总计~44k tokens~27k tokens
红线文件可被 AI 修改仅人工维护
冷数据无限膨胀自动迁移到 wiki

审计机制:memory-lifecycle 技能

冷热分层不是一次性工作,需要持续维护。为此我们创建了 memory-lifecycle 技能,将审计流程标准化、自动化。

条目级审计元数据:

每个 MEMORY.md 和 TOOLS.md 的条目加上审计标记:

## HZERO 产品授权控制

**Created:** 2026-03-30 | **Audited:** 2026-06-13 | **Status:** cold

技能工作流:

扫描条目 -> 分类使用频率 -> 迁移冷数据 -> 更新元数据 -> 生成报告

具体步骤:

1. 扫描: 用 Python 脚本解析 MD 文件,提取所有 ## heading 条目及元数据

2. 分类: 对每个条目执行 memory_search(corpus=”sessions”),根据近 30 天命中次数判定: >=2 次 = hot(留在 MD);1 次 = warm(保留观察);0 次 = cold(迁移或删除)

3. 迁移: 冷数据写入 Obsidian 知识库(HZERO 相关 -> HZERO-wiki,其他 -> MY-wiki),MD 中替换为一行引用

4. 元数据: 更新 Audited 日期和 Status 状态

5. 报告: 输出审计报告到 .memory-audit/YYYY-MM-DD.md

触发方式:

场景触发说明
定时审计cron 每两周执行每月 1 号和 15 号
手动触发用户说 “审计 MEMORY.md”按需执行
写入前检查新增条目前确保有审计元数据

红线规则: 只审计 MEMORY.md 和 TOOLS.md,不触碰 SOUL.md / USER.md / AGENTS.md。

知识库分工:

知识库用途共享性
HZERO-wikiHZERO PaaS 平台相关知识可共享
MY-wiki个人开发经验和通用知识永不共享

冷数据迁移规则:HZERO 相关 -> HZERO-wiki,其他 -> MY-wiki。

五、与 Active-Memory 的关系

有人会问:OpenClaw 有 Active-Memory 功能,能动态召回相关记忆,还需要手动管理 MEMORY.md 吗?

答案是:两者解决不同层面的问题。

维度Active-Memory冷热审计
层面检索层管理层
作用从记忆库中找到相关信息决定什么信息留在记忆库中
类比图书馆的检索系统库存管理
局限不能减少静态注入体积不能帮你找到记忆

关键矛盾:

即使 Active-Memory 再强大,只要冷数据还在 MEMORY.md 里,就永远被注入到每次会话的上下文。Active-Memory 不能减少静态注入的体积。

类比:检索系统再强,如果书架上堆满没人看的旧书,也会挤掉新书的空间。冷热审计解决的是”书架上该放什么书”,Active-Memory 解决的是”怎么快速找到你要的那本”。

六、关键教训

1. 3%的初始上下文也不代表健康 — 上下文使用率低不代表注入内容都是有用的。

2. 模型知道的知识不需要写进 MD — TOOLS.md 应该只保留”模型不知道的规则”和”犯过错的教训”

3. 引用比全文更高效 — 冷数据迁移到 wiki,MD 中只留路径引用

4. 审计比一次性清理更重要 — 建立机制比手动执行更可持续

5. 红线文件应极度精简 — 每次新增内容前自问”这个真的每次都需要吗?”

6. 分清两层问题 — 用户层(MEMORY/TOOLS)自己能优化,系统层(默认工具/Skills 列表)只能反馈给开发团队

7. Active-Memory 不能替代冷热审计 — 检索层和管理层解决不同问题,缺一不可

本文基于 2026-06-13 的 OpenClaw 实践整理。相关 Issue: #92451(system prompt bloat)。

 

 

关于作者:

昵称:Jack.shang
档案信息:jack.shang 程序员->项目经理->技术总监->项目总监->部门总监->事业部总经理->子公司总经理->集团产品运营支持
联系方式:你可以通过syfvb@hotmail.com联系作者
点击查看发表过的所有文章...
本文永久链接: http://blog.retailsolution.cn/archives/6111

 

 

对本文的评价:

 

 

分类: 默认 标签:
本文的评论功能被关闭了.