Harness 不是给 Agent 加能力,是为模型构造世界
花了一天多的时间看了一下最近很火的 DeepSeek Harness 源码。
从产品层面来说,它目前当然还算不上成功,但它 “everything is plugin” 的思想给了我很大的启发,也让我开始重新理解 Harness 究竟是什么。
我们通常会把 Harness 理解成 tools、skills、context、memory、security、sandbox 这些东西的集合。但看完 DeepSeek Harness 之后,我越来越觉得,这些其实都只是表象。
真正重要的是:Harness 甚至可以把 agent loop 本身做成可替换的 plugin。
这件事情其实很漂亮。
因为这意味着 Harness 可能根本不是一个"给 Agent 加能力"的框架,而是一套为模型构造世界的装置。
这里的"世界"不是哲学意义上的抽象概念,而是模型在每一步能够看到什么、能够理解什么、能够操作什么,以及行动之后能够得到什么反馈。
Umwelt:环境不等于世界
这让我想起 Jakob von Uexküll 的 Umwelt 理论。
Uexküll 认为,生物所处的"环境"和这个生物真正生活其中的"世界"并不是一回事。不同生物虽然处在同一个物理环境里,但因为感知能力和行动能力不同,它们实际上生活在不同的 Umwelt——环境世界中。
最经典的例子是蜱虫。
森林对于人来说有树木、道路、阳光、动物;但对于蜱虫而言,这个世界可能只由几个非常有限的信号组成:哺乳动物散发的气味、体温、触觉。对蜱虫来说,森林里绝大多数东西根本不存在于它的 Umwelt 中。
所以,世界并不是一个已经完整存在、等待主体去观察的东西。
世界是由主体能够感知什么、能够对什么采取行动,以及行动能够带来什么反馈共同构成的。
一个 Coding Agent 的世界有多大
这件事情放到 AI 上突然变得很有意思。
一个 Coding Agent 的"世界"并不是整个代码仓库,更不是整个互联网。
如果它只能看到当前文件、几个工具的返回结果、git diff 和 CI 状态,那么这就是它的 Umwelt。
- 给它搜索工具,它的世界变了。
- 给它浏览器,它的世界变了。
- 给它 shell,它的世界变了。
- 给它长期记忆,它看到的过去变了。
- 给它审批机制,它能够采取的行动变了。
- 甚至把 agent loop 换掉,它理解和行动这个世界的方式也变了。
Agent 与 Workflow,只是世界自由度不同
所以我现在越来越倾向于认为,应该叫 AI Harness,而不只是 Agent Harness。
因为最终产物未必是 Agent。
当你给模型构造了一个高度封闭、状态明确、行动路径固定的世界,它可能表现为 workflow。
当你给它一个开放的世界、丰富的工具、持续的反馈和自主决策空间,它才更接近我们通常所说的 Agent。
甚至还可能出现一些我们现在还没有很好命名的东西。
也就是说,Agent、Workflow 或其他 AI 系统形态,本质上可能只是不同"世界自由度"下的产物。
一旦接受这个视角,Harness 的核心设计问题也会发生变化。
不再是:
我该给 Agent 什么工具?
而变成:
我在这一步呈现一个什么样的世界,才能让正确的行动成为显然的那个?
这两种问题其实完全不同。
前者是在设计能力列表。
后者是在设计 Umwelt。
Memory 该记的是世界与先验之间的差值
而且这可能会进一步改变我们理解 Context 和 Memory 的方式。
既然给 LLM 的本质上是一个世界,那么是不是可以先让它探索这个世界,再根据探索结果形成一份关于世界的描述?
但后来我又觉得,也许真正值得保存的并不是"世界的描述",而是:
世界与模型先验之间的差值。
因为 LLM 本身已经带着一个庞大的先验模型进入世界。
很多东西根本不需要重新告诉它。
真正容易让它犯错的,往往是那些与它原有认知不同的、这个具体世界里的现实。
比如一个代码仓库存在一些非常反直觉的约束;一个公司的内部系统有特殊的权限规则;一个任务的业务逻辑和公开知识完全不同。
所以 Memory 也许不应该只是:
这个世界是什么。
而应该更多记录:
这个世界和你原本以为的世界有什么不同。
这或许比简单地堆积 context 更接近长期记忆真正有价值的部分。
Harness 同时也是一份契约
另一方面,Harness 也不仅仅是一套认识论装置,它还是一份契约。
审批弹窗、权限模式、sandbox、审计日志,这些东西表面上是在限制 Agent,实际上编码的是人和系统之间的信任关系:
你允许它看到什么,可以让它做什么,哪些行动必须经过确认,以及发生问题以后如何追责。
所以 Harness 同时决定了两件事情:
模型能够认识一个什么样的世界,以及模型能够在这个世界里做什么。
这也是为什么我觉得这种架构可能尤其适合 AI Coding。
Coding 本身就天然具有比较清晰的环境边界:repository、filesystem、terminal、git、CI、issue、review。
不同能力之间也相对容易解耦。
于是我们完全可以把不同的"世界组件"做成 plugin,再通过不同的组合构造不同的 Coding Environment。
把 Environment 本身也做成可扰动的
这进一步让我想到 Agent Evaluation。
如果 Harness 本身就是世界构造器,那么 Agent Evaluation 其实不一定应该只固定一套 benchmark environment,然后比较不同 Agent。
我们或许可以反过来:
把 Environment 本身也做成可组合、可替换、可扰动的。
通过 plugin 定义不同的工具、权限、状态、反馈机制和环境约束,再主动对环境加入各种扰动。
于是评测的就不再只是:
Agent 在这个 benchmark 上能拿多少分。
而是:
什么样的世界组合,能够让这个 Agent 稳定完成任务?它对世界发生什么变化最敏感?它在哪些 Umwelt 下会失效?
最终甚至可以反过来寻找一个"最优世界"。
收尾
也就是说,未来的 Harness 也许不只是 Agent 的运行时。
它更像是一套世界构建、世界约束以及世界评测系统。
而所谓 Agent Engineering,某种意义上也许并不是在教模型"怎么做事"。
而是在设计一个世界,让模型在这个世界里,能够自然地做对事情。