乐于分享
好东西不私藏

Day 45/90, OpenClaw第四十五天(Harness,控制系统)

Day 45/90, OpenClaw第四十五天(Harness,控制系统)

别再把 Harness 当“编排层”了:它其实是 AI 时代最重要的控制系统。

这两个月,关于 Agent、Claude Code、Codex、Skills、Memory、Long-running Tasks 的文章满天飞。很多人读完很兴奋,觉得未来已来,仿佛只要把模型接上工具、写几段 prompt、再串一个 workflow,一个能持续工作的 AI 员工就出来了。

这套想法,太浅了。

它的问题不在于错,而在于只看到了表皮,没有看到骨头

绝大多数人今天谈 Harness,谈的是:

  • 怎么编排流程
  • 怎么接工具
  • 怎么写 prompt
  • 怎么拆多 Agent
  • 怎么做 memory
  • 怎么跑 benchmark

这些当然都重要。但如果你把 Harness 只理解成这套东西,你最后做出来的大概率不是一个生产级系统,而是一套会动、会说、会调用工具,但不稳定、不收敛、不可恢复、不可审计的半成品

我现在越来越确信一个判断:

Harness 不是编排层。Harness 本质上是控制系统。

一旦你用这个视角去看,很多原本模糊的工程问题会突然变得清晰;很多团队今天浪费在 prompt、模型切换和“感觉它这次怎么又不对劲了”的时间,也会立刻暴露出问题的真正位置。

这篇文章,我不想再讲那些已经被讲烂的“最佳实践”。我想直接把我认为最值钱的几条洞察讲清楚。它们不一定都舒服,但我认为它们对真正做长期 AI 系统的人最有用。

一、Harness 的职责不是“让模型更聪明”,而是“让系统别失控”

很多人一上来就问:

  • 怎么让模型更强?
  • 怎么让它规划更好?
  • 怎么让它代码写得更对?
  • 怎么让它自己修 bug?

这些问题没错,但它们默认了一个很危险的前提:

系统的核心矛盾是“模型不够聪明”。

这通常是误诊。

真实世界里,一个 Agent 做不好事,最常见的原因不是它不会,而是整个闭环有问题:

  • 它看到了错误的状态
  • 它拿到了不干净的反馈
  • 它没有清晰的退出条件
  • 它修 A 破 B
  • 它反复在同一个局部盲修
  • 它没有被及时打断
  • 它没有可恢复的中间工件
  • 它把无关信息也当成了当前任务状态的一部分

这不是智力问题,这是系统动力学问题

所以我越来越反感一种说法:

“我们再换个更强的模型看看。”

很多时候,换更强模型只是在给一辆刹车失灵的车换更大马力的发动机。你不会因此更安全,你只会翻车翻得更快、更远、更像一次大胜利后的灾难。

真正成熟的 Harness,不是让模型偶尔显得更神,而是让系统做到:

  • 出错可定位
  • 失败可恢复
  • 过程可审计
  • 权限可限制
  • 回路可收敛
  • 代价可控
  • 结果可验证

说白了:

Harness 的核心价值不是增智,而是驯化。

二、有反馈,不等于可控

很多团队今天很喜欢说自己有闭环:

  • 生成 → 测试 → 修复
  • 输出 → 验证 → 重试
  • 执行 → 检查 → 再执行

他们觉得,只要有反馈,这就是一个闭环系统了。

这又是错觉。

反馈存在,不等于可控。

如果一个系统只能告诉 Agent:

  • “你错了”
  • “测试红了”
  • “输出不符合预期”
  • “再试试”

那这不叫有效反馈,这叫低质量责骂

真正有价值的反馈,至少要满足三个条件:

1. 足够及时

错误刚发生,系统就应该尽量在局部把它暴露出来,而不是等到集成层、最终层、全局层才爆炸。

2. 足够可定位

要尽量把错误压缩到某个边界、某个接口、某个状态层,而不是把所有问题都变成一句模糊的“最后结果不对”。

3. 足够可操作

Agent 看完反馈之后,应该知道下一步该修哪里、先修什么、哪些不能碰,而不是到处乱试。

这意味着什么?

意味着验证器不是越多越好,日志不是越长越好,测试不是越晚越好。
你要做的是分层反馈系统

  • 结构约束负责早发现
  • 类型与契约负责边界纠偏
  • 测试负责行为确认
  • trace 负责动态症状定位
  • 人工审阅负责高阶判断与否决

你如果把所有反馈都堆到最后一层,系统一定会震荡。
它看起来在“自愈”,其实只是高增益盲修。

所以我有个很粗暴的判断:

绝大多数所谓“模型没想明白”,本质上是你给它的误差信号太脏、太晚、太粗。

三、上下文窗口不是记忆槽,而是观测器

这一点,我认为是今天整个行业里被误解得最严重的问题之一。

大家总在说:

  • 长上下文
  • 超长上下文
  • 1M context
  • 把所有历史都塞进去

这套叙事听起来很爽,但问题是:更长的上下文不等于更好的记忆。

更准确地说:

上下文窗口的职责不是存储,而是状态估计。

模型靠当前上下文去判断:

  • 我现在在做什么
  • 已经做到哪一步
  • 哪些约束还有效
  • 哪些假设已经失效
  • 当前问题的真正边界在哪

于是问题就变成了:
你塞进去的每一段信息,都在影响它的状态判断。

这时候,旧计划、过时日志、已推翻的假设、无关工具输出、冗余中间稿、重复规则、历史碎屑,统统都不再只是“多一点内容”,而是观测噪声

这也是为什么很多系统一开始很好用,越跑越差。
不是模型累了,是状态观测被污染了

所以成熟系统必须做三件事:

1. 稳定状态外置

把真正长期有效的东西外化成可重访工件,比如:

  • spec
  • plan
  • architecture map
  • decision log
  • rules
  • session card

2. 高噪声任务隔离

用 sub-agent、side task、局部工作区,把高噪声过程隔离出去,只把压缩后的结果带回来。

3. 工具输出治理

工具输出不是越完整越好,必须截断、摘要、落盘、引用化,而不是原样把几十屏日志塞回主线程。

一句话:

上下文管理的核心,不是装多少,而是看得准不准。

四、Prompt 的高级形态,不是咒语,而是输入整形

很多人把 prompt engineering 当成一种语言魔法,仿佛真正的高手,就是会写那句神奇的提示词。

这在早期玩 Demo 的时候还说得过去。
但一旦系统进入真实生产环境,这种想法就幼稚了。

高级阶段的 prompt,不是在“激发模型灵感”,而是在约束系统动力学

它更像什么?

更像操作规程,更像输入整形,更像:

  • 规定相位顺序
  • 明确 done when
  • 给出 stop-and-fix 规则
  • 限定作用域边界
  • 指定验证顺序
  • 约束动作面
  • 降低冲动式操作的概率

也就是说,prompt 的高级形态不是文学,而是工程。

更重要的是:

凡是能被 hook、policy、linter、schema、type system 接管的约束,就不要长期压在自然语言里。

因为写在 prompt 里的规则,有三个天然缺陷:

  1. 会被忘
  1. 会被挤出上下文
  1. 会被模型策略性解释

所以成熟 Harness 的一个重要标志,不是 prompt 越来越长,而是:

结构开始替语言承担更多行为塑形责任。

五、工具不是越多越强,而是越多越容易把系统阶数抬高

这一点很多人不爱听。

工程师天然喜欢加工具:

  • 浏览器
  • 搜索
  • Shell
  • MCP
  • 第三方 API
  • 内部工具
  • 各种自动化入口

大家会觉得,工具越多,系统能力越强。

这是静态软件思维。
在 Agent 系统里,工具不仅是能力增量,它还是:

  • 新的状态源
  • 新的延迟
  • 新的噪声
  • 新的分支路径
  • 新的故障模式
  • 新的上下文污染来源

每多一个工具,系统就多一个极点。

特别是那些“看起来功能很强”的工具,往往是最危险的。因为它们:

  • 描述冗长
  • schema 很大
  • 输出噪声重
  • 延迟高
  • 失败形式复杂
  • 容易诱发错误归因

所以我的观点一直很克制:

工具面要默认收窄,按任务进度渐进暴露。

能用模型熟悉的原始能力解决的,就不要急着再包一层漂亮抽象。
能不用就别给,能延迟暴露就别预加载。

未来最强的 Harness,很可能不是工具最多的那个,而是:

  • 接口最克制
  • 信号最干净
  • 时延最可控
  • 渐进暴露做得最稳

六、更强模型,往往更难控

这是今天最反直觉,但也最重要的一条。

大家都默认:

模型越强,系统越好。

这句话只在开环里成立。
在闭环里,不一定。

因为更强的模型,意味着:

  • 更大的可达动作空间
  • 更强的局部合理化能力
  • 更像样的错误解释
  • 更深的错误后果
  • 更低的“看起来有问题”的可见度

弱模型的问题是笨。
强模型的问题是:它能把错做得更像对。

所以每一次模型升级,真正要升级的从来不只是 API 调用代码,而是整套控制面:

  • 权限边界
  • diff budget
  • 验证前置
  • milestone gate
  • rollback
  • sandbox
  • escalation 机制

没有这些,强模型不是资产,是放大器。

说得再直白点:

AI 工程最大的风险,不是模型太弱,而是模型变强的速度,超过了 Harness 成熟的速度。

七、Self-evaluation 失效的根因,往往不是同模型,而是同上下文

很多人已经接受了一个结论:
Agent 不擅长评估自己。

但我觉得这个结论还不够精确。
更准确的说法应该是:

真正失效的,通常不是“同模型评估”,而是“同上下文评估”。

一个刚刚生成完方案、做过一堆妥协、跳过一堆边角、在当前上下文里已经形成自我合理化轨迹的模型,很难再公正地审判自己。

因为它看到的不只是结果,它还看到:

  • 自己为什么这么做
  • 哪些地方其实是赶工
  • 哪些地方本来就有点心虚
  • 哪些地方“先这样也行”

这些东西一旦共享,评估器就会被污染。

所以真正有效的做法,不一定是换模型,而是切上下文

  • 主执行体只负责做
  • 审查体只看 diff、规则、产物
  • 审查体不知道你刚才的全部内心戏
  • 审查体不知道你做过哪些妥协

这时候,即便是同一个模型,效果也会大不一样。

这对成本很重要。
因为很多团队一上来就想跨模型验证,结果成本、延迟、复杂度全上去。
但大量场景下,上下文隔离比模型隔离更划算,也更关键。

八、长期系统的核心不是“会不会做”,而是“会不会形成错误先验”

这是我最近思考越来越深的一点。

短任务里,失败就是失败。
但长时间运行的 Agent,不是一次性生物。它会积累:

  • 记忆
  • 偏好
  • 经验
  • 启发式
  • 失败模式
  • 成功捷径

这时候,最大的风险就变了。

你最怕的,已经不是它忘了什么,而是它记住了错误的东西,而且在未来持续调用。

比如:

  • 一次糊弄过关,被它记成可复用策略
  • 一次偶然相关,被它记成稳定因果
  • 一次临时用户情绪,被它记成长期偏好
  • 一次错误修复路径,被它记成默认套路

这就不是一次错误,而是行为倾向漂移

所以我现在越来越相信:

长期 Agent 的下半场,不是推理竞赛,而是记忆治理。

你得回答这些问题:

  • 什么值得留下?
  • 由谁批准进入长期记忆?
  • 单次事件先打标还是立即固化?
  • 何时整合?
  • 何时降权?
  • 何时遗忘?
  • 什么能从情景记忆升级成规则记忆?

没有这套机制,Agent 不会成长,它只会堆积。

九、真正成熟的系统,一定是多时间尺度控制栈

你如果只看 Demo,会以为 Agent 系统就是一个 loop:

plan → act → verify → repair

这只是最里面那层。
真实成熟系统至少有三层时间尺度:

内环:秒级到分钟级

负责:

  • plan
  • edit
  • verify
  • repair
  • 小范围回退

中环:分钟级到小时级

负责:

  • review
  • approval
  • diff 审核
  • rollout
  • canary
  • rollback
  • 部署门禁

外环:天级到周级

负责:

  • trace 分析
  • 失败模式归纳
  • harness 参数更新
  • policy 修订
  • memory 整合
  • 经验蒸馏

真正决定系统长期稳定性的,往往不是那个最炫的内环,而是更慢、更钝、但真正拥有制度权力的中外环。

所以人类的正确位置,也不该停留在“人肉执行补丁层”,而应该上浮到:

  • 规则定义
  • 风险边界
  • 升级否决
  • 外环演化

换句话说:

人不该成为低价值执行瓶颈,但必须成为高价值制度节点。

十、最值得记住的四条运行时不变量

如果让我把这么多文章、源码、案例、讨论,最后压缩成最值得团队记住的四条不变量,那就是这四句:

1. 轨迹拓扑不能破

tool_use 必须闭合到 tool_result,推理轨迹不能被随意切断,恢复时的因果链必须能补回去。

2. 缓存前缀不能漂

一旦系统看到过某段历史,它后续在 API 前缀中的命运就不能随意改变。
once seen, fate frozen。
否则缓存、恢复、可重复性都会崩。

3. 能力面不能一次性敞开

工具、技能、上下文、权限,必须按时机、路径、模式渐进展开。
全量暴露看似自由,实则是系统阶数爆炸。

4. 连续性不能只靠 transcript

长期连续性至少要靠:

  • 规则与指令连续性
  • 能力面连续性
  • 语义记忆连续性
  • 操作状态连续性

任何试图靠一份超长聊天记录扛起一切连续性的系统,最后都会烂掉。

十一、最后的结论:Harness 不是“模型外壳”,而是 AI 时代真正的护城河

过去大家以为,模型是核心,外面的都是配套。

我越来越不这么看。

模型当然重要,但模型正在越来越像公共基础设施。
真正把模型变成可用生产系统的,不是那层“会不会聊天”的壳,而是:

  • 你的控制结构
  • 你的反馈分层
  • 你的上下文治理
  • 你的权限系统
  • 你的记忆治理
  • 你的工具面管理
  • 你的恢复路径
  • 你的外环演化机制

这些东西加起来,才叫 Harness。

所以我最后给团队的建议很简单,也很不讨好:

不要再把 Harness 当成“模型旁边那层杂活”。
它不是 plumbing,它是主系统。

谁先意识到这一点,谁就会停止在 prompt 和模型切换里空转;
谁先把 AI 系统当成闭环控制系统去设计,谁才真正有机会做出能长期工作的 Agent。

模型会越来越强。
这件事几乎可以确定。

但真正决定你能不能吃到这一轮红利的,不是你有没有最快接上新模型,而是:

当模型越来越凶、越来越快、越来越像会做事的人时,
你有没有一个足够稳的系统,把它关进价值生产的轨道里。

这才是 Harness Engineering 最值钱的地方。

一个更冷的结论

很多人今天还在争论:

  • 该用 Claude 还是 GPT
  • 该单 Agent 还是多 Agent
  • 该 RAG 还是 memory
  • 该 workflow 还是 autonomous

这些讨论当然重要,但说到底,很多还停留在“术”的层面。

真正的“道”其实更简单,也更残酷:

未来 AI 系统的核心竞争力,不是谁先拿到更强的模型,而是谁先学会约束更强的模型。

模型能力会继续上涨,这是大概率事件。
但模型越强,系统就越不能靠侥幸维持。

你不能指望:

  • 靠更长的 prompt 解决结构问题
  • 靠更多的工具掩盖状态失真
  • 靠更大的上下文解决记忆治理
  • 靠更强的模型绕过反馈设计
  • 靠更频繁的重试代替真正的恢复路径

这些办法,短期也许能骗过 demo,长期一定骗不过生产环境。

生产环境只认三件事:

  1. 能不能稳定跑
  1. 出错能不能及时止损
  1. 失败之后能不能继续活

所以,真正成熟的团队,最终都会从“提示词工程”走向“系统工程”,从“模型崇拜”走向“控制思维”,从“追求一次神迹”走向“构造长期稳定”。

给团队最后的一句话

如果我要把整篇文章压成一句最适合发给团队的话,那就是:

不要再问“模型这次为什么又没想明白”。
先问:我们是不是又拿一个高波动执行器,去跑一个没有被认真控制的系统。

这是很多团队最该补上的认知升级。

Agent 时代真正稀缺的,不再只是会写代码、会调 prompt、会接工具的人。
真正稀缺的,是那些能把:

  • 反馈
  • 状态
  • 权限
  • 记忆
  • 恢复
  • 风险边界
  • 多时间尺度监督

这些东西,组织成一个可长期运转系统的人。

这类人,未来不会少赚。
因为他们做的不是模型调用,他们做的是新一代生产系统的底盘

最后一刀

模型决定上限,Harness 决定你会不会死在达到上限之前。

没有 Harness 的强模型,只是更危险的能力。
有 Harness 的模型,才有资格变成生产力。

所以别再把 Harness 当成“模型外面那层脏活”了。
在 Agent 时代,它不是配角,它才是主系统。