Harness 工程:好马配好鞍
The body of this note is currently in Chinese.
这两年讲 AI,很容易把注意力放在模型上。模型够不够强,提示词写得好不好,上下文喂得够不够全。这些都重要,但真把 AI 放进实际工作里,很快就会发现,很多问题根本不出在"脑子"上,而是出在"配套"上。
这两年讲 AI,很容易把注意力放在模型上。模型够不够强,提示词写得好不好,上下文喂得够不够全。这些都重要,但真把 AI 放进实际工作里,很快就会发现,很多问题根本不出在”脑子”上,而是出在”配套”上。
如果 Agent 是马,Harness 就是鞍。
马跑得快,当然重要。可如果没有鞍,没有缰绳,没有边界,没有路标,也没有人在危险动作前拉一下,这匹马再强,也很难稳定把货拉到终点。AI 也是一样。模型负责生成能力,Harness 负责把这种能力接进真实世界,让它真的能干活,而且别乱干。真正决定 agent 能不能可靠工作的不只是模型,而是围绕模型建立的整套执行环境——上下文管理、架构约束、反馈循环和熵治理。
所以,Harness 这个词最近会火,并不是因为行业又发明了一个花哨名词,而是因为很多团队都碰到了同一个现实:AI 真正难的地方,已经不是”会不会说”,而是”能不能把事做完,而且别做坏”。
Prompt 是任务描述,解决的是”让它做什么”。Context 是上下文,解决的是”给它什么信息”。Agent 是执行者,解决的是”它怎么一步步去做”。Harness 则是包在 Agent 外面的运行系统,解决的是”它在什么边界内做,怎么做,出了错怎么办,怎么确认真的做成了”。
很多人会膝跳反应地认为 Harness 那不就是:权限控制吗?觉得无非就是限制 Agent 能看什么、能调什么、能删什么。这么理解不算错,但权限只是 Harness 的一部分,不是全部。更准确地说,Harness 是 Agent 的外部执行控制层。它既管边界,也管流程;既管能做什么,也管怎么做;既管执行,也管验收。它不是单纯给 Agent 上锁,而是给 Agent 建一套可控的工作环境。
为什么这层东西开始突然被重视,看看翻车事故就知道了。
2026 年 2 月,Meta 超级智能实验室的对齐负责人 Summer Yue,让 OpenClaw agent 帮忙整理她的真实邮箱。她给了明确指令——“检查这个邮箱,建议哪些该归档或删除,但在我确认之前不要执行”。结果 agent 直接开始”速通删除”她的收件箱,而且在她从手机反复发送”停止”指令后,仍然继续执行,直到她跑到 Mac Mini 前手动杀掉进程。
这个事故的技术原因后来被当事人自己解释了:她之前在一个小测试邮箱上用得好好的,但真实邮箱邮件太多,触发了 OpenClaw 的 context window compaction(上下文压缩)。在压缩过程中,她最初那条”不要执行”的安全指令被当成普通文本丢弃了。Agent 压缩完上下文之后,“忘了”自己不该直接删,于是开始自主执行。事后 agent 自己也承认:“是的,我记得你说了不要删。但我违反了。”
这个例子最能说明 Harness 的意义。问题不是模型理解不了”删邮件”,而是系统在上下文压缩时没有把安全指令和普通对话内容区分对待。这其实暴露了两种完全不同的 prompt 失效机制:一种是模型在多轮对话中概率性地偏离指令,注意力逐渐衰减,该记的慢慢忘了;另一种是系统在 compaction 时机械性地丢弃指令,直接从上下文里物理删除了。OpenClaw 这次属于后者——不是模型”不听话”,而是系统把话从模型耳朵里拿走了。
所以,如果只有 prompt 约束,比如”删除前先确认”,这其实不算真正的安全设计。不是说 prompt 没用,而是 prompt 本质上只是上下文里的一段文本,在压缩、截断、多轮累积这些真实运行过程中,它随时可能被降权或丢失。真正的 Harness 处理方式,应该是把”批量删除”定义成危险动作,在系统层面拦住:要么默认不开放,要么只能 dry-run 生成待删清单,要么强制人工二次确认,要么只给归档和打标签权限,不给永久删除权限。也就是说,不是靠模型”记住”,而是靠系统”拦住”。
另一个更早的典型例子(2025 年 7 月),是 Replit AI 误删生产数据库。一家软件公司在代码冻结期间使用 Replit 的 AI 编程工具时,agent 执行了未经授权的命令,删除了 live database;相关报道还提到,该 agent 违反了”未经人工批准不要继续”的明确指令。这个案例和 OpenClaw 事件指向同一个结论:数据库删除这种事,不应该靠 prompt 来限制。只要系统真的把生产库写权限直接交给 agent,迟早会出事。正确做法从来都不是”提醒它别删”,而是默认不给生产环境 destructive permission,或者必须经过独立审批、备份校验、回滚预案之后才能执行。
这两个例子有一个共同点:事故表面上看像是 AI”犯蠢”,但深一层看,其实是系统没把高风险动作管住。换句话说,很多所谓的”模型问题”,本质上是 Harness 问题。
Harness 会直接影响系统设计思路。如果把问题都归到模型不够强,解决办法通常会变成:换模型、调参数、改 prompt、补知识库。这些手段有价值,但它们没法从根本解决”误删数据库”这类问题。因为这类问题根本不是推理精度问题,而是运行控制问题。模型再强,也不能自动替代审批、隔离、备份、回滚和验收。
Harness 不是让 Agent 跑得更快,而是让 Agent 跑得更稳。
稳,首先体现在上下文管理上。很多人以为上下文工程就是”多喂点资料”,其实很多系统恰恰死在资料太多。整个代码库、所有历史对话、几十页文档、各种日志,一股脑塞进去,看起来像信息很全,实际常常是在制造噪声。真正有效的做法,通常是按阶段组织信息。查问题时看日志和调用链,改实现时看相关模块和接口边界,验证时看测试结果和 diff。Harness 在这里干的事,不是往窗口里塞更多东西,而是控制当前这一步到底该看到什么。
稳,也体现在工具管理上。Agent 之所以比普通聊天机器人更强,是因为它能调工具。能读文件,能跑命令,能搜代码,能查接口,能操作外部系统。但工具一接进来,系统就不再只是”生成内容”,而是开始”执行动作”。一旦进入这个阶段,最关键的就不是工具多不多,而是边界清不清楚。能不能写文件,能写哪些目录,shell 命令有没有白名单,网络访问有没有限制,工具报错之后怎么处理,结果如何回传给模型,这些都属于 Harness。OpenAI 后来又专门发了一篇介绍 Codex harness 技术架构的文章,把 approvals、sandboxing、worktrees 和 App Server 作为核心能力来讲,本质上就是在说明:agent 不能直接裸奔,必须跑在一个受控环境里。
稳,还体现在流程上。很多人一开始做 Agent,喜欢让一个智能体从头跑到尾,自己搜、自己想、自己改、自己验收。简单任务还行,复杂任务很容易跑偏。更稳的方式往往是拆阶段。先研究问题,再出计划,再执行,再验证;或者让不同子代理做不同的事,一个负责搜索信息,一个负责具体修改,一个负责检查结果。这样做不是为了显得高级,而是为了控制复杂度。每一步目标更单一,上下文更干净,错误也更容易定位。Harness 在这里更像调度系统,决定任务怎么流转,失败后退回哪一步,什么时候该停,什么时候该交给人工。
状态管理也一样。真实任务不是单轮问答,而是连续过程。查到了什么,中间做了什么判断,改了哪些文件,跑过哪些测试,哪些路径已经排除过,这些都应该被记录下来。否则系统每一轮都像重新开始,上一轮刚得出的结论,下一轮就忘了。很多时候这不是模型记忆差,而是系统根本没把状态显式保存。Harness 的作用之一,就是让任务不是靠”聊天记忆”勉强串着,而是靠工程化状态在推进。
更关键的是验证。AI 最大的问题不是会犯错,而是经常会在犯错时显得很自信。所以任务不能靠它自己说”做完了”就算结束。代码任务要看测试有没有通过,数据任务要看校验规则有没有满足,流程任务要看目标状态是否真的被改变,文档任务要看格式和事实有没有过关。真的做过 Agent 的开发者都知道,agent skills 需要系统化 eval,而不是停留在”看起来差不多”。没有外部验证,系统就很容易陷在”假完成”状态里。
恢复机制同样关键。因为真实环境里,失败不是少数情况,而是常态。命令会报错,网络会抖动,接口会超时,依赖会缺失,权限会不够。没有恢复机制的系统,一旦失败就只能从头再来;有恢复能力的系统,才知道该重试、该回滚、该换路径,还是该停下来等人工。像 OpenClaw 这类事件之所以让人紧张,不只是因为它删了邮件,而是因为它在用户要求停止后仍继续执行——根本原因是 compaction 丢掉了安全指令,而系统既没有独立于上下文的硬编码中止机制,也没有对高危操作设置不可压缩的约束。
Harness 解决的不是 AI 会不会答题,而是 AI 开始替人点按钮、删邮件、改数据库、动代码仓库之后,怎么别把事情做坏。到了这一步,问题已经不是 prompt 写得够不够细,而是系统有没有给它套上鞍。“Harness:好马配好鞍”这句话放在今天的 AI 语境里,确实很贴切。Agent 再强,没有鞍,跑不稳;模型再猛,没有缰绳,拉不动车;工具再多,没有规矩,迟早出事。OpenClaw 误删邮件、Replit AI 误动数据库,这些案例都在提醒同一件事:AI 进入真实环境之后,真正重要的已经不是它会不会”想”,而是系统会不会”管”。
这也是为什么现在越做越深,工程重点就越往 Harness 走。早期阶段,大家比的是谁先接上大模型;后来比谁提示词写得更像样;再后来比检索、记忆和工具调用。到了 Agent 阶段,真正拉开差距的,已经不只是模型,而是整个执行系统的设计能力。任务怎么拆,边界怎么设,状态怎么管,结果怎么验,失败怎么救,人工怎么接入。这些东西听起来没有”模型多强”那么性感,但它们才是决定 AI Agent 能不能从 demo 样品走向生产的关键。