上篇咱们聊了OpenClaw的「文档治理三件套」:
- 把380行的AGENTS.md压缩到72行的渐进式地图
- 用doc-gardening定时任务搞定文档熵
- 文档自律+Loop Guard的自验证防线。
如果说上篇是给Agent的「认知地图」做减法,让它少走弯路,那下篇要做的,就是更底层的改造——重新定义Agent的「思考方式」「记忆边界」和「身体结构」。
作为实战派开发者,这篇不聊虚的,全是我在OpenClaw上真刀真枪踩坑后的落地经验,核心聚焦三个核心改造:推理三明治(Reasoning Sandwich)、上下文隔离(Context Firewall)、模块化可拆卸(Modular & Detachable)。每一个都解决了实际开发中遇到的痛点,话不多说,直接上干货!
踩坑实录:越高强度推理,反而越容易失败
刚开始做OpenClaw优化时,我有个误区:觉得AI推理强度越高越好,毕竟“想得越深,做得越对”。于是全程开着xhigh(最高推理强度)跑复杂任务,结果惨了——Agent经常跑到一半就idle timeout,直接**。
后来才发现,不是它不够聪明,是它太“认真”了:每一步都死磕细节、深度思考,导致token消耗飙升,时间预算直接撑爆。无独有偶,OpenAI的Ryan Leopo团队在Harness Engineering实践中,也发现了同样的问题:全程最高推理强度,任务完成率反而更低,核心原因就是——超时。
OpenAI的解法:推理三明治,张弛有度才高效
为了解决这个问题,OpenAI提出了一个特别形象的策略——「推理三明治」,顾名思义,就像三明治一样,两片“面包”是深度思考,中间的“肉”是高效执行,把算力精准分配到该用的地方:
- 易 规划阶段:拉满最高推理强度(xhigh)——充分理解问题、拆解任务、制定最优方案,这一步要“想透”;
- ⚡ 执行阶段:降到高等推理强度(high)——按照规划好的方案高效执行,不纠结细节,这一步要“提速”;
- ✅ 验证阶段:再拉回最高推理强度(xhigh)——仔细检查执行结果,捕获漏洞和错误,这一步要“较真”。
核心逻辑很简单:算力不是越多越好,而是要“按需分配”,把有限的算力花在最关键的环节。
OpenClaw落地实操:用子Agent编排实现三明治策略
好在OpenClaw的`sessions_spawn`原生支持`thinking`参数(`low`/`medium`/`high`/`xhigh`),这让推理三明治的落地变得很简单,直接用子Agent编排就能实现,核心逻辑如下(伪代码直观展示):
父 Agent(调度器) → spawn(规划子Agent, thinking: xhigh) # 深度理解任务,输出执行方案 → spawn(执行子Agent, thinking: high) # 按方案高效执行,控制速度 → spawn(验证子Agent, thinking: xhigh) # 深度检查结果,捕获遗漏错误
这就是我在防火墙模式文档中定义的「模式C——推理三明治」,父Agent只负责整体节奏编排,每个子Agent在自己的推理级别下独立工作,互不干扰。
除此之外,我还安装了`adaptive-reasoning`技能,解决单轮消息的推理级别选择问题。每条消息进来,它会通过六维打分,判断是否需要开启扩展推理,具体打分规则如下:
打分维度
分值
多步骤逻辑推理
+3
模糊性/歧义问题
+2
代码架构决策
+2
数学/算法推理
+2
新颖/罕见问题
+1
高风险操作
+1
- 减分项:常规任务(-2)、单一明确答案(-2)、简单查找(-3),总分≥5就开启扩展推理。
- 这里要注意:`adaptive-reasoning`只管单轮消息的推理级别,而真正的推理三明治需要跨阶段编排(规划、执行、验证),所以我计划自研一个skill,结合`sessions_spawn`的`thinking`参数,实现完整的三阶段推理控制。
实战反思:适合的才是最好的
分享一个真实案例:有一次跑一个涉及6个文件的重构任务,全程xhigh模式下,Agent在处理第三个文件时就超时**了;换成推理三明治策略后,同样的任务顺利跑完,不仅节省了token,还提升了任务完成率。
其实推理三明治的核心不是省钱(虽然确实能省),而是让Agent在每个阶段投入最合适的认知成本——就像我们人类干活一样,规划时要全局考虑,执行时要高效快捷,检查时要严谨细致,张弛有度才能把事做好。
切肤之痛:52K tokens的上下文,让Agent直接“卡壳”
这个改造点,完全是我踩出来的血泪教训。就在写这篇博客下篇的时候,我第一次尝试让AI在主session里直接写,它先读了上篇内容,又读了各种参考文档、skill文件,不知不觉间,上下文涨到了52K tokens。
结果就是:连续4次idle timeout,一个字都没写出来。那一刻我才明白,就算规则写得再完美,执行层面不遵守,也是废纸一张——上下文膨胀,就是Agent的头号杀手。
OpenAI/Symphony的解法:物理级上下文隔离
OpenAI开源的Symphony项目(Elixir/OTP实现),给出了一个硬核解决方案:物理级别的上下文隔离,简单说就是给每个任务“划一块独立空间”,不让Agent互相干扰,核心逻辑如下:
- 每个任务(issue)创建独立的workspace,Agent只能在自己的目录里操作,看不到其他任务的内容;
- 编排器(Orchestrator)只关注Agent的最终状态(成功、失败、需审查),不参与中间过程,避免被中间上下文拖累;
- 子Agent不是“角色分工”(比如前端Agent、后端Agent),而是“上下文防火墙”,负责隔离中间过程和冗余信息。
这个思路的核心的是:父Agent做“调度器+质检员”,子Agent做“隔离执行单元”,父只看指令和结果,中间所有工具调用、临时产物,都被封装在子Agent的独立空间里,不污染父Agent的上下文。
OpenClaw落地实操:指令包协议+防火墙模式
借鉴Symphony的思路,我写了一份完整的`docs/context-hygiene.md`,定义了防火墙模式的规范,核心是一个「指令包协议」,包含四个关键要素,让父子Agent的通信更规范、更干净:
- 目标:明确要做什么(比如“撰写博客下篇”“重构某个文件”);
- 输入:明确子Agent需要读取哪些文件(避免读取冗余内容);
- 输出:明确结果要写到哪里(统一输出路径,方便父Agent质检);
- 约束:明确格式、长度、质量要求(避免输出不符合预期的内容)。
父子Agent之间通过文件系统通信,不传递隐式上下文,目录结构非常简单,一眼就能看懂:
/tmp/harness/{task-id}/ ├── input.md # 父Agent写入,子Agent读取(指令包) ├── output.md # 子Agent写入,父Agent读取(执行结果) └── status.md # 可选,子Agent汇报任务进度
在此基础上,我定义了三种实用的编排模式,覆盖大部分开发场景:
- 模式A:串行流水线——阶段1的输出变成阶段2的输入,适合有依赖关系的多步任务(比如“先读取文件→再分析问题→最后修改代码”);
- 模式B:并行扇出——多个子Agent同时执行不同任务,最后合并结果,适合互不依赖的批量工作(比如“同时检查多个文件的语法错误”);
- 模式C:推理三明治——就是上一章讲的,规划(xhigh)→执行(high)→验证(xhigh),适合需要精准控制推理强度的复杂任务。
另外,我还整理了一个上下文预算决策树,帮大家快速判断什么时候该用防火墙模式,避免盲目隔离:(适用于现有的模型)
上下文条件
推荐策略
< 20K tokens + 简单任务
直接在当前session执行,无需隔离
20-40K tokens + 中等复杂度
分段执行,注意上下文管理,避免膨胀
> 40K tokens 或涉及长文档
委派子Agent,开启防火墙模式
还有一个关键规则:父Agent质检时,只读取子Agent输出的`output.md`,如果不通过,直接重新spawn一个子Agent,绝对不在父session里修补。因为一旦在父session里修补,就等于把子Agent的中间上下文又拉了回来,防火墙就形同虚设了。
实战反思:防火墙不是限制,是保护
最讽刺的是,这篇博客下篇,最初就是因为没遵守防火墙规则而失败的。所以这次重写,我特意用防火墙模式来写关于防火墙模式的内容——你们现在读到的每一段文字,都是一个子Agent在隔离环境中,根据指令包生成的,是不是很Meta?
总结一个教训:上下文膨胀不是Agent不够聪明,而是它被塞了太多无关信息,脑子转不过来了。防火墙模式看似是“限制”了Agent的操作范围,实则是在保护它,让它能专注于当前任务,不被冗余信息拖累。
核心痛点:模型在进化,Harness不能“焊死”
做技术的都知道,技术迭代太快了——2024年需要复杂流水线才能完成的任务,2026年可能一个Prompt就搞定了。模型在不断进化,今天我们精心设计的Harness组件,明天可能就会成为性能瓶颈。
OpenAI和ZenML都提到了同一个核心观点:Harness必须是模块化、可拆卸的,不能把所有功能都焊死在一起,否则后续升级、替换都会非常麻烦。
Symphony的解法:优雅的Hook系统,按需增减
Symphony的Hook系统设计得非常优雅,它定义了四个任务生命周期Hook,每个Hook都是独立的shell脚本,互不耦合,需要就挂,不需要就摘:
- `after_create`——workspace创建后执行(比如初始化目录);
- `before_run`——Agent执行前执行(比如检查依赖);
- `after_run`——Agent执行后执行(比如初步质检);
- `before_remove`——workspace清理前执行(比如备份临时文件)。
比如linting(代码检查)、testing(测试)、automated review(自动审查),各自都是独立的Hook,互不影响,想升级某个功能,直接替换对应的Hook脚本即可,不用动整个系统。
OpenClaw落地实操:组件化架构,Skill即插即用
先给大家整理一下Symphony和OpenClaw的概念映射,方便大家理解两者的对应关系,快速借鉴经验:
Symphony 概念
OpenClaw 对应实现
Orchestrator(编排器)
主session(父Agent)
Workspace per issue(每个任务独立空间)
/tmp/harness/{task-id}/ 目录
WORKFLOW.md(工作流规范)
AGENTS.md + docs/ 约定文档
Agent Runner(Agent执行器)
sessions_spawn()
Hook system(Hook系统)
指令包协议 + 质检规则
Linear polling(线性轮询)
用户指令 / Cron 定时任务
Codex app-server(代码服务)
OpenClaw subagent runtime
在架构选型上,我明确了OpenClaw走「组件化架构」路线——所有功能都做成可插拔的中间件,互不耦合,按需增删、升级。这里要区分一点:我们做的是“组件化”,不是“工作流编排”,后者太笨重,不适合快速迭代。
目前OpenClaw已经有25+个独立skill,每个skill都有自己的`SKILL.md`,明确了行为边界和使用规范。如果不需要某个skill,直接删掉它的目录就行,不会影响其他任何功能——这就天然满足了“可拆卸”的要求。
借鉴Symphony的Hook系统,我在防火墙模式中也设计了生命周期管理,同样是可选的,按需配置:
before_spawn → 创建 /tmp/harness/{task-id}/ 目录,写入input.md(指令包) after_spawn → 读取output.md,执行质检,判断是否通过 on_failure → 记录失败原因,决定重试还是上报异常 after_cleanup → 清理临时目录,释放服务器资源
简单任务可以只启用`before_spawn`+`after_spawn`,复杂任务再加上失败处理和清理逻辑,灵活度拉满。
另外,我还有一个「全景仪表盘」的想法正在酝酿中:把所有组件的能力、运行状态,做成一个实时监控面板,结合现有的定时任务体系(daily-server-inspection服务器巡检、doc-gardening文档维护),实现Cron驱动的自动编排——不用人盯着,系统自己就能稳定运行。
实战反思:模块化的核心是“可替换”,不是“拆得细”
很多人容易走进一个误区:觉得模块化就是“拆得越细越好”。其实不是,模块化的核心是每个模块都能独立移除、替换,且不影响其他部分。
举个例子:如果明天出现了一个超强模型,不再需要推理三明治策略,我只需要把模式C的编排逻辑删掉,其他所有功能(上下文隔离、模块化skill等)都能照常运行;如果`adaptive-reasoning`技能被更好的方案替代,直接删掉它的目录,换上新的skill就行,不用动整个系统的架构。
这就是可拆卸的价值——我们不是在建造一座无法修改的大教堂,而是在搭乐高,每一块积木都能单独拿走、替换,让系统能跟着技术迭代,持续进化。
回顾上下两篇,我们一共给OpenClaw做了6个核心改造,每一个都是实战踩坑后的成果,整理成表格,方便大家快速回顾:
#
改造点
核心思路
1
AGENTS.md 地图化
渐进式披露,380行压缩到72行,减少认知负担
2
文档熵治理
doc-gardening定时任务,实现文档自维护闭环
3
自验证循环
文档自律+Loop Guard双层防线,减少人工干预
4
推理三明治
规划xhigh→执行high→验证xhigh,精准分配算力
5
上下文隔离
防火墙模式,文件系统通信,避免上下文膨胀
6
模块化可拆卸
组件化架构,skill即插即用,适配技术迭代
这6个改造点看似独立,实则有一条共同的核心线索:给Agent减负。
减少它需要一次性理解的信息量(地图化、上下文隔离),减少它需要持续维护的认知开销(文档熵治理、自验证),减少它在错误时刻浪费的算力(推理三明治),减少它被绑死在某个方案上的风险(模块化)。
其实OpenAI的Harness Engineering,没有什么高深的理论,核心就一句话:别让Agent做它不擅长的事。Agent擅长推理和执行,但不擅长记忆管理和自我约束,那我们就用工程手段,帮它管好记忆、设好边界、调好节奏。
在把这些方法论落地到OpenClaw的过程中,我最大的感悟是:最好的Harness,是你感觉不到它存在的那种。它不应该是一堆复杂的流程和规则,而应该像空气一样——Agent在里面自然地呼吸、工作,不会窒息,也不会失控。
目前OpenClaw的优化还在继续,还有很多细节需要打磨,但至少现在,这只“小龙虾”跑起来,已经稳多了咽。
下篇就到这里,后续我会继续分享OpenClaw的优化细节,以及Harness Engineering的更多实战经验,感兴趣的朋友可以关注一波,咱们评论区交流~
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/278999.html