Harness 工程:Agent 终于有了自己的工程学
- 原文链接
- https://mp.weixin.qq.com/s/AVB6ZCFAzu8luyiCGR0TuQ
- 来源公众号
- 字节前端
- 作者
- 大漠孤烟
- 发布时间
- 2026-03-25
👇 点击左下角 关注,洞悉大厂技术前沿
Harness 工程:Agent 终于有了自己的"工程学"
Agent 的核心很简单,真正难的是 Harness。这不是一个新框架,而是 Agent 工程终于被讲明白了。

Harness:Agent 运行时的工程环境总和
一、Harness 是什么?
这两天,Agent 圈突然开始密集讨论一个词:Harness。很多人第一次看到它,会觉得这是个新框架、新范式,甚至像是什么"下一代 Agent 技术名词"。
但更准确一点说:Harness 不是一个新技术发明。它更像是 Agent 工程里那部分一直存在、但过去没有被完整命名的"软件工程现实"。
**定义:**Harness 不是模型,不是 Prompt,不是 Tool Call,不是框架。Harness 是 Agent 运行时的"工程环境总和"。
这个"环境总和"里包含什么?任务如何被表达、上下文如何被组织、工具如何被暴露/治理/拦截、状态如何被保存/恢复/裁剪、反馈如何回流给模型、错误如何被分类/重试/升级、安全边界如何被建立、系统如何验证 agent 真的把事做好了。
如果你把 Agent 想成一个"会调用工具的大脑",那 Harness 就是:你给这个大脑配的身体、传感器、护栏、操作台、流程制度、回执系统,以及出事后的保险。
二、为什么这个词现在突然火了?
因为行业终于开始承认一件事:Agent 的问题,越来越不是"模型够不够聪明",而是"环境够不够好"。
同一个模型,放到不同系统里,表现会差得非常大。有的 agent 会乱调工具、会丢上下文、会把安全边界踩穿、会在长任务里越来越漂;而有的 agent 能持续做事、能沿着目标推进、能利用反馈修正自己、能在复杂任务里保持结构感。
OpenAI 和 OPENDEV 的工程经验一致指向:Agent 的能力 = 模型 × 环境。不只是模型能力,而是模型与环境共同决定的。
三、Agent 的核心很简单,难点仍是软件工程
从原理上讲,Agent 真的不复杂:Agent = Loop(LLM + Context + Tools)。在一个循环里面,提供一些工具、维护一个上下文,再调用大模型。这件事的抽象层面,你甚至十几分钟就能给它写个最小版本。
真正的问题在于:一个 loop,为什么会在生产环境里烂掉?答案通常不是模型变笨了,而是上下文越来越脏、工具没有治理、状态没有结构化、安全边界靠"相信模型懂事"、错误没有归类、长任务没有 checkpoint、文档堆成一坨。
这些问题,全部都不是"模型理论问题"。它们是彻头彻尾的软件工程问题。而 Harness 这个词的价值就在这里:它提醒你,Agent 项目的真正主战场,不是模型层,而是运行环境层。
四、Harness 和 Context Engineering 的区别
不少讨论会把 Harness 和 Context Engineering 混在一起。可以这样区分:
Prompt Engineering 关注"怎么说"——system prompt 怎么写,few-shot 怎么摆,措辞怎么调。
Context Engineering 关注"给模型什么信息"——放哪些文档、怎么裁剪历史、怎么组织 AGENTS.md、怎么做记忆注入。
Harness Engineering 关注"模型在什么环境里做事"——什么时候能动手、工具是否需要审批、危险操作怎么拦、会话如何恢复、中间产物如何持久化、任务失败后如何回路修复。
**结论:**Context Engineering 是 Harness 的一个组成部分,但 Harness 不等于 Context。它比 Context 更大一层。
五、Harness 的五层架构
从实践角度看,Harness 至少包含五层:
第一层:上下文装配系统——提示词不是静态文档,而是动态拼装系统。不同来源的信息有不同优先级、不同新鲜度、不同职责。你必须先在工程上把层级关系建好,再交给模型。
第二层:工具治理系统——工具不是"多几个 function call"。背后有四个问题:模型如何发现工具、参数如何校验、风险如何分级、调用如何被统一拦截。让工具调用成为一个可治理系统,而不是一堆裸奔接口。
第三层:安全与审批系统——只要 agent 能写文件、跑 shell、改配置,它就是操作系统参与者。安全不能只靠模型自觉,必须落在运行时。真正的高质量 agent 靠的是"即便模型不听话,系统也有边界"。
第四层:反馈与状态系统——Agent 之所以能持续做事,是因为它会不断收到反馈。工具执行结果、审批是否通过、输出是否被截断、命令是否被拒绝。你要把系统内部发生的事,翻译成模型能消费的反馈语言。
第五层:熵管理系统——Agent 一旦持续运行,系统一定会逐渐"变脏"。prompt 越来越长、rules 越来越旧、工具定义越来越多但没人维护。Harness 不是"搭完就完了",还有一个长期任务:持续做熵管理。
六、一个升级版的公式
如果以前说:Agent = Loop(LLM + Context + Tools)
那现在升级成:Agent = Loop(Model + Harness)
因为 Context 和 Tools 其实都已经属于 Harness 的一部分了。真正决定 agent 上限的,越来越不是"你有没有这些组件",而是你有没有把这些组件工程化成一个可以长期运转的环境。
同样是:一个模型、一个工具列表、一个上下文窗口——有人做出来的是玩具,有人做出来的是生产系统。差别就在 Harness。
七、如何开始做 Harness 工程?
一个实用的落地顺序:
1. 先别急着追最强模型——先把环境搭起来。环境是可复用资产,换模型能继承;但只靠换模型,通常不能替你补环境债。
2. 先把工具系统做成"系统"——至少做到:可发现、可校验、可分级、可拦截、可审计。
3. 上下文不要写成一坨——把 prompt 当成装配系统,不要当成单文件。
4. 安全边界必须在运行时——不要把安全寄托在提示词上。
5. 所有失败都尽量可解释——让系统错误能回流成模型能理解的反馈。
6. 给长任务设计状态与恢复机制——没有状态管理,就没有真正的持续执行。
7. 定期做熵管理——规则、记忆、会话、文档都会腐烂。你不清理,系统就会慢慢失控。
写在最后
Harness 不是什么"横空出世的新发明"。它让 Agent 工程这门课,终于有了一个更准确的词。
Agent 的核心很简单,真正难的是 Harness。或者更直白一点:Agent 的重点不在模型,而在环境。
这句话,之前是这么想的。现在只是终于有了一个更流行的词,来把它说得更完整一点。
👇 点击左下角 关注,获取更多技术干货
🔥 感谢 点赞 · 喜欢 · 分享,您的支持是创作动力