EARENDIL 最近发了篇科普文,拿攀岩安全带打比方,解释什么是 agent harness。逻辑很讨喜:安全带连着绳索和岩钉,保护你、约束你、也帮你决定怎么爬;harness 连着模型和工具,同样干这四件事——系统提示词、工具集、智能体循环(agentic loop)、模型转译层。行业里流传的公式是 Agent = Model + Harness

这套比喻讲得很干净,干净到有点可疑。因为过去一年围绕 harness 的真实争论,恰恰是这篇文章完全没碰的部分:这层"安全带"到底是在保护用户,还是在悄悄替用户做决定。

harness 落到代码里是什么样子

EARENDIL 自己的开源项目 pi 把 harness 拆成三个包:pi-ai 负责统一不同模型的接口,pi-agent-core 管循环、工具执行和状态,pi-coding-agent 才是具体的读写、编辑、执行命令这些工具。循环内部走的是统一的消息格式,只在真正调用某个模型的那一刻才做翻译。

有个细节值得记一下:pi 的 harness 在每一轮对话开始时,会把消息、系统提示词、模型、工具、上下文打包成一份"快照"。运行中途如果有人改配置,不会立刻插手正在进行的请求,而是等到下一个安全点才生效。这不是炫技,是工程上的克制——harness 一旦手滑,后果比模型答错一句话严重得多

pi 的三层拆分 pi-ai 统一模型接口 pi-agent-core 循环 · 状态 · 快照 pi-coding-agent 读写 · 编辑 · 执行 配置变更不立刻生效,等下一个安全点——这是harness的工程克制

"harness 比 model 更重要"这句话站不住脚

这句话最近很流行,听着也顺耳:模型都差不多,拼的是谁的 harness 设计得好。问题是没人真正量化过两者的贡献占比。好的 harness 能把模型潜力挤出来,但补不齐模型在指令遵循、工具调用训练上的天生短板。一个 agent 的表现,是模型、harness、工具质量、上下文选择、外部环境和评测器六方合力的结果,单挑出 harness 说它最重要,是把一道多元方程简化成了一句口号。

排行榜比的到底是谁

这个简化最直接的代价,落在了 benchmark 上。眼下大部分 agent 排行榜比的其实是整套系统,不是模型本身。"模型 A 赢了模型 B"很可能只是"围绕 A 搭的系统赢了围绕 B 搭的系统"——不同厂商给同一个底层模型配的系统提示词、工具 schema、重试策略天差地别。没有这些信息,外界既没法复现结果,也没法判断分数到底说明了什么。

排行榜比的是什么 看起来在比 模型 A 模型 B 实际在比 A + 提示词 + 工具schema B + 提示词 + 工具schema
  • 风险.缺了系统提示词、工具 schema、重试策略这三样公开信息,任何 agent benchmark 结果都不该被直接拿来横向比较。

谁在造第二操作系统

麦克卢汉说"媒介即信息"——通道本身塑造内容,不只是搬运内容。harness 也一样:它不是中立管道,它决定了模型什么时候停、注入什么上下文、遇到冲突指令怎么选。功能越丰富——规划、子智能体、记忆、上下文压缩——越容易滑向一套没人完全理解的系统。死循环、陈旧记忆、隐藏状态,都是新引入的失败模式,不是模型的锅,也不完全是 harness 设计者的本意。

harness 还握着 shell 执行权、凭证访问权、外部 API 调用权,这本身就是一道安全边界。它可以悄悄改写工具调用、注入隐藏指令、静默换模型、截断历史——表面同一个模型,两套 harness 跑出来可能是完全不同的行为策略。这对安全审查和事故复盘是个实打实的麻烦。

开源在这里也没解决问题,顶多是转移了问题。很多打着"开源 harness"旗号的项目,底下依赖的仍是专有模型 API、闭源搜索、不透明的安全过滤器。判断一个 harness 是不是真开放,得看七件事:代码、权重、提示词与策略、工具、执行环境、评测能否复现、能否自托管。少了任何一项,"开源"两个字就只是标签。


谁掌握转译层,谁就掌握 agent 的真正脾气。

EARENDIL 把 harness 讲成一根让用户重获自由的安全带,这个方向本身没错——用户能自己拥有、自己改造、随时换模型,确实比被锁死在某个 App 里更有议价权。但自由的前提是透明,而当下这层"安全带"的内部构造,恰恰是最不透明的部分。攀岩者至少能亲眼检查自己身上的每一根带子,用 agent harness 的人,大多数时候连提示词长什么样都看不到。这才是这套公式该补上的第五个字母。