2026-05-18 · 架构
32
架构 · 2026-05-18

Harnesses 让 AI Agent 变得可靠

软件开发里,大家最熟悉的词可能还是 agent。

但最近两年,另一个词开始频繁冒出来:harness。

这个词不好翻。按字面,它是“安全带”或者“束具”。不过放到 AI 工程里,我觉得它更像一层“驯化外壳”——不是替代模型,而是把一个不稳定、不可预测、还经常会撒谎的模型,拴到一个稳定、可验证、可以控的运行环境上。

这篇文章整理自 IBM 的 Tejas Kumar 在一场技术会议上的分享 Harnesses in AI: A Deep Dive

这场 talk 只有二十分钟,但讲清了一个很重要的判断:真正决定 agent 能不能进生产的,往往不是 prompt,而是 harness。原视频: https://www.youtube.com/watch?v=C_GG5g38vLU

为什么今天谈 harness 比谈 prompt 更重要

Tejas 开场先讲了一件很现实的事:大多数开发者并不拥有模型,他们只是“租用”模型。

我们按月给 Claude、OpenAI、Google 或别的模型公司交钱,换来一个上下文窗口、一些 token 配额,以及一个表面上稳定、实际上内部细节完全不可见的黑盒。

你看到的是 Opus,后台是不是某种降配版本,你未必知道。模型今天表现很好,明天换了一点权重、路由或者限流策略,输出就可能不一样。

如果你的应用只是聊天,这种不稳定还能忍。

但只要模型开始调用工具、执行命令、改文件、登录系统、发请求,问题就变了。你要的已经不是“偶尔答得很聪明”,而是“每次都别出事”。

所以他给出的关键词不是 intelligence,而是 reliability。

harness 的价值,就在这里。它不是帮模型变聪明,而是帮系统变可靠。

harness 到底是什么

Tejas 用了一个很直观的类比。

登山的人会把自己挂在山体上。遛狗的人会给狗套 harness,而不是随便让它乱跑。

共同点只有一个:把一个可能偏航的东西,系到一个稳定物上。

放到 AI agent 里,他给出的定义是:

harness 是模型周围那一整层,让模型能够被现实世界约束、验证和纠偏的东西。

这一定义很关键,因为很多人会把 harness 理解成 agent loop,或者理解成一套 prompt 模板。

但 Tejas 反复强调,不是。agent loop 只是其中一部分。真正的 harness,是 loop 外面那一圈工程设施。

在他的拆解里,一个典型的 agent harness 通常包含下面几类组件。

这套结构听起来朴素,但它实际上把“agent 是个会做事的模型”改写成了“agent 是一个被工程系统看管着的执行单元”。

这场分享最有价值的地方:他没有改 prompt

这场 talk 最漂亮的地方,不是定义,而是 demo。

Tejas 做了一个很小的浏览器 agent 任务:去 Hacker News,给第一条帖子点 upvote。

他故意用了一个比较弱的模型,GPT-3.5 Turbo。

原因也很直接:他想证明,很多时候你不需要先换更强的模型,也不需要先大改 prompt。你更应该先补 harness。

初始版本非常简单。

结果第一次运行就翻车了。

agent 打开 Hacker News,点了 upvote,然后跳到了登录页。接着它崩了。更糟的是,它还在日志里宣称自己成功完成了任务。

这其实就是很多 agent 系统最危险的时刻:不是“做不到”,而是“没做到但说自己做到了”。

Tejas 的判断很对。问题不在 prompt 不够狠,也不在 system prompt 里没塞登录说明。

真正的问题是,这个系统没有 verify,没有 guardrail,也没有一个对失败模式做确定性处理的外层。

harness 的第一步,不是让 agent 成功,而是先别撒谎

他加的第一层东西是 guardrails。

这层 guardrails 很简单,甚至可以说有点粗糙。

这里有个细节很值得注意:他的 context compression 并不复杂,甚至可以说非常 naive。只保留 system prompt、user prompt 和最近两条消息,中间旧上下文全部裁掉。

这说明一个事实:harness 不一定要从复杂框架开始。很多时候,一个很笨但确定性的策略,已经比“什么都交给模型自己处理”强很多。

但真正扭转结果的,是 verify step。

他开始检查 trace,也就是 agent 执行过程中留下的工具调用历史,然后做确定性判断:

只要命中这些失败条件,系统就直接判定失败,不接受模型口头上的“我做完了”。

这是 harness 思维的核心:

把成功的定义,从模型的自述,改成系统的可验证事实。

很多团队做 agent 时,最大的问题恰恰是反过来的。他们相信“模型说 done 了”就是 done,结果生产事故全是从这里长出来的。

真正的提升,来自把脆弱环节抽离出 agent

在 demo 的最后一段,他又加了一层 login handler。

它做的事情非常典型,也非常重要:

这一步其实是整个 talk 的工程含义所在。

登录,本来是一个高风险、低价值、又高度确定的问题。它涉及 secret,涉及表单结构,涉及失败处理,也涉及安全边界。你完全没必要让模型自己在这里猜。

更一般地说,很多 agent 失败的地方,本来就不应该交给 agent 决策。

比如:

这些部分越“硬”,越应该放进 harness,而不是埋进 prompt。

prompt 是软约束。harness 是硬约束。

前者影响模型倾向,后者决定系统边界。

Claude Code、Codex、Cursor,本质上都不只是 agent,而是 harnessed agent

Tejas 在演讲里提到一个很容易被忽略的点:像 Claude Code 这样的产品,表面看是 coding agent,实际上更准确的说法是 harnessed coding agent。

这个判断很重要,因为它解释了为什么“会写代码的模型”并不自动等于“能交付代码的系统”。

一个真正可用的 coding agent,至少要有这些东西:

这些能力如果没有被打包成一个运行时,模型再强也只是一个会续写文本的接口。

所以很多人问“为什么同一个模型在 API 里没那么神,在 Claude Code 里却像样很多”,答案常常不在模型本身,而在 harness。

同样的脑子,装进不同的身体,表现差别会非常大。

这其实也是成本优化问题

这场 talk 还有一个很实用的含义:harness 不是只为安全,也为成本服务。

如果 harness 足够好,你就能让便宜模型承担更多工作。

Tejas 明说了这一点。模型是非确定性的,但如果外面有一个好的 harness,你可以用更便宜的模型,甚至更小的开源模型,去做原本看上去需要大模型兜底的事情。

理由很简单。

系统是否可靠,不完全取决于模型单次推理质量,而取决于:

这跟传统软件工程其实很像。一个普通组件放进强约束的系统里,整体质量可以很高;一个很强的组件放进没有边界的系统里,也照样会出事。

从这个角度看,2025 年大家狂热谈 agent,下一步很自然就是谈 harness。因为只有进入这一层,AI 应用才开始像工程,而不只是演示。

我对这场分享的三个判断

先说结论。我觉得这场分享最有价值的,不是教你写一个浏览器 demo,而是把一个行业讨论重新拉回了工程常识。

第一,agent 的竞争会逐渐从 prompt 竞争转向 runtime 竞争

前一阶段,大家喜欢比较 prompt、system message、workflow design。

以后这些东西当然还重要,但真正拉开差距的,越来越可能是 runtime。

也就是:

这些东西看起来没有 prompt 那么“聪明”,但它们更接近生产价值。

第二,很多所谓“模型不行”,其实是 harness 不行

一个任务失败,最常见的直觉是换更强模型。

这当然有时是对的,但并不总是对。很多任务失败,是因为系统没有告诉模型什么能做、做到哪一步必须停、出了什么错算失败、结果该怎么验证。

模型被扔进一个没有扶手的环境里,靠语言去补一切,当然会漂。

所以以后看 agent 产品,我会越来越关注两个问题:

如果这两件事说不清,那多半只是个会演示的 agent,不是能托付流程的 agent。

第三,动态生成 harness 可能真是下一阶段

演讲最后,Tejas 抛了一个挺有意思的想法:未来也许不是先写死 harness,再让 agent 去做事;而是 agent 接到任务后,先为这个任务动态生成一层 harness,再进入执行。

他说这可能是 2027 年的方向。

这个判断未必会按年份发生,但方向我觉得是合理的。

因为任务的风险结构并不一样。买机票、改代码、查合同、跑财务数据、发生产命令,它们需要的 guardrail、secret handling、verify step 都不同。

最理想的状态,确实不是一套固定 harness 打天下,而是根据任务类型,自动拼装出合适的约束层。

这有点像今天大家说的 plan mode,但再往前一步:不是先出计划,而是先出边界。

这场 talk 也有它的边界

当然,这个分享也不是没有局限。

第一,它用的是一个很小、很受控的 demo。Hacker News 点赞这个任务,状态空间不复杂,成功标准也相对清晰。现实里的企业工作流,往往比这复杂得多。

第二,它把 harness 讲得很清楚,但对 harness 之间怎么复用、怎么抽象、怎么避免越来越重,没有展开。真实系统一旦做大,harness 自己也会变成需要维护的复杂软件。

第三,它强调确定性处理,这是对的,但确定性逻辑越多,开发者需要自己编码和维护的部分也越多。团队是否有足够的软件工程纪律,决定了 harness 最后会变成“可靠外壳”还是“新的脆弱层”。

不过这些边界不影响它的主判断成立:现在这个阶段,讨论 agent,不能只讨论模型能力,必须讨论模型外面的工程结构。

我的补充:harness 其实是在给 agent 补“机构”

如果把 LLM 看成一个会推理、会写字、也会猜的脑子,那 harness 更像是它的机构。

这里的机构,不只是工具接口,而是一整套约束、流程、权限、记忆和验收规则。没有这套机构,agent 再聪明,也更像一个临场发挥的人。它可能偶尔神来之笔,但没法稳定上班。

很多公司现在做 AI 应用,还停留在“把模型接到业务上试试”的阶段。接下来真正难的,不是再多接几个模型,而是把 harness 这层补起来。

谁先把这层补好,谁的 agent 才会从 demo 变成系统。

Tejas 最后说,2025 是 agent 之年,2026 可能是 harness 之年。

我觉得这个判断大概率会应验。不是因为 harness 这个词本身有多新,而是因为行业终于开始承认:真正难的部分,从来不在回答,而在约束、验证和交付。

目录 最新
← 左侧翻上一屏 · 右侧翻下一屏 · 中间唤出菜单