从 Prompt 到 Harness:让 AI Agent 变成可靠工作系统
最近聊到一个很有意思的概念:harness engineering,或者说 harness agent。相比单纯研究 prompt,它更关心如何给 AI agent 搭建一个可靠的运行环境:工具、权限、验证、记忆、任务流、失败恢复和多 agent 协作。
我的理解是:prompt engineering 是告诉模型怎么想;harness engineering 是设计模型能做什么、怎么做、做错了怎么发现和纠正。
什么是 Harness?
在 AI agent 语境里,harness 可以理解为 agent 外面的一层执行框架,也可以理解为 agent 的运行时环境。
它通常负责这些事情:
- 提供工具:读写文件、运行测试、查网页、操作浏览器、调用 API。
- 控制权限:哪些命令可以自动执行,哪些操作必须让用户确认。
- 管理上下文:任务列表、长期记忆、历史压缩、计划状态。
- 约束行为:不能随便删文件,不能跳过测试,不能强推代码。
- 观察结果:测试是否通过,页面是否真的可用,日志是否报错。
- 失败恢复:命令失败后如何诊断、重试、换路径。
- 多 agent 协作:主 agent 负责决策,子 agent 负责搜索、评审、验证。
所以 harness engineering 更像是在设计一个 agent operating system:模型负责推理,harness 负责工具、权限、流程、验证和恢复。
什么是 Harness Agent?
我觉得 harness agent 可以从两个角度理解。
第一种,是 运行在 harness 里的 agent。
例如 Claude Code 这类 coding agent,不只是聊天模型。它可以读取本地文件、修改代码、运行 shell 命令、调用浏览器、管理任务列表、委托子 agent、遵守权限系统。它的很多能力并不完全来自模型本身,而是来自外部 harness 提供的运行环境。
第二种,是 专门管理 harness 的 agent。
这类 agent 不一定直接写业务代码,而是负责让其他 agent 更好工作,比如:
- 自动配置权限;
- 扫描常见命令并减少权限弹窗;
- 管理 hooks;
- 监控 CI;
- 自动运行测试;
- 维护长期 memory;
- 协调多个 agent 的分工。
也就是说,harness agent 更像是 AI agent 系统里的“调度员、守门员和运维”。
为什么这个方向越来越重要?
因为大模型本身已经足够强,单纯改 prompt 的边际收益正在变小。真正决定 agent 是否好用的,经常是这些问题:
- 它有没有合适的工具?
- 工具调用失败时会不会恢复?
- 会不会误删文件?
- 会不会没验证就声称完成?
- 会不会污染 git 状态?
- 会不会无限循环?
- 会不会记住用户偏好?
- 会不会把复杂任务拆给合适的子 agent?
- 会不会在危险操作前请求确认?
这些问题不是单靠 prompt 能彻底解决的。它们需要 harness 层面的工程设计。
一个简单例子是:让 coding agent 修一个前端 bug。
差一点的流程可能是:
- 读代码;
- 猜一个改法;
- 改文件;
- 说“应该好了”。
更可靠的 harness 流程应该是:
- 定位相关文件;
- 建任务列表;
- 读取最小必要上下文;
- 修改代码;
- 跑类型检查和测试;
- 启动 dev server;
- 用浏览器实际点击页面;
- 检查 console error 和 network error;
- 如果失败,回到诊断路径;
- 最后只报告已经验证过的结果。
这里的核心不是“模型更聪明”,而是 harness 强迫它经过可靠流程。
Harness Engineering 和 Agent Engineering 的区别
可以粗略这样区分:
| 类型 | 关注点 |
|---|---|
| Prompt engineering | 怎么写指令让模型回答更好 |
| Agent engineering | 让模型能规划、调用工具、完成任务 |
| Harness engineering | 设计 agent 的运行环境、权限、工具、验证、状态和安全边界 |
| Eval engineering | 衡量 agent 是否真的变好 |
实际项目里,这几个方向经常混在一起。但如果要做一个真正能落地的 agent 产品,harness engineering 往往比继续微调 prompt 更关键。
一个好的 Harness 应该具备什么?
我会重点看这些特征:
工具边界清晰
读文件用读文件工具,搜代码用搜索工具,跑测试用 shell,而不是让模型用自然语言假装完成。有权限模型
本地读写可以相对自动,但推送代码、删除文件、发布内容、调用外部服务这类操作应该确认。有验证闭环
不是“我改了”,而是“我改了,并通过了哪些验证”。能处理失败
测试失败后应该定位原因,而不是盲目重试。上下文经济
不把整个 repo 塞给模型,而是搜索、读取、压缩、委托子 agent。可观察性好
用户应该知道 agent 在做什么、卡在哪里、为什么换方案。支持多 agent 分工
主 agent 不需要亲自做所有事,可以让 explore agent 查代码、review agent 审查风险。有记忆但不盲信记忆
可以记住用户偏好,但涉及当前代码状态时仍然要重新验证。
GitHub 上值得看的相关项目
下面这些项目适合从不同角度理解 harness engineering。项目状态变化很快,具体活跃度、star 数和 API 细节建议以 GitHub 页面为准。
1. Browser Harness / Browser Use
如果你关心 browser agent,可以看:
它们适合研究浏览器 agent 的运行环境:Chrome/CDP、DOM 观察、网页任务执行、自愈式浏览器操作等。
Browser agent 的难点不只是“点击按钮”,而是如何让 agent 在网页结构变化、弹窗、加载延迟、表单异常、网络错误中仍然可靠完成任务。这正是 harness engineering 很典型的场景。
2. Inspect AI
Inspect AI 是 UK AI Security Institute 开源的评测框架。
它适合研究 eval harness 的基本结构:
- task;
- solver;
- tool use;
- scorer;
- 日志;
- 可复现实验。
如果想系统理解“如何评测一个 agent 是否真的可靠”,Inspect AI 是很好的入口。
3. SWE-bench
SWE-bench 是 coding agent 领域绕不开的 benchmark。
它的价值不只是排行榜,而是提供了一套非常重要的评测思路:
1 | 真实 GitHub issue |
这套流程本身就是很典型的 coding-agent evaluation harness。
4. hal-harness
princeton-pli/hal-harness 更偏研究型,和 SWE-bench、BrowserGym、Inspect 这类 eval/harness 生态有关。
它适合看如何把不同 benchmark 或 environment 包装成统一的评测 harness。
5. AutoHarness
aiming-lab/AutoHarness 从名字上就很贴近 “Automated Harness Engineering for AI Agents”。
这类项目适合关注新方向:如何自动生成、治理或演化 agent 的 harness。由于方向比较新,成熟度和适用场景需要自己进一步验证。
6. LangGraph
LangGraph 是做生产级 agent orchestration 时很值得看的框架。
它的核心价值在于:
- 状态图;
- 长期任务;
- 可恢复流程;
- 明确的节点和边;
- human-in-the-loop;
- checkpoint;
- durable workflows。
如果要把 agent 从“聊天脚本”变成“可控流程”,LangGraph 是很好的参考。
7. Pydantic AI
Pydantic AI 更适合 Python 工程里的类型安全 agent harness。
它强调:
- schema;
- dependency injection;
- tool typing;
- provider-agnostic;
- 可测试性;
- production app 结构。
如果你喜欢工程结构清晰、类型约束明确的 agent 应用,它值得研究。
8. CrewAI
CrewAI 更偏 multi-agent workflow 和 role-based agents。
它适合研究多个 agent 如何分工、协作、顺序执行任务。但如果要用于严肃生产环境,仍然需要自己补上 eval、权限、观测和失败恢复机制。
9. Microsoft AutoGen / Agent Framework
AutoGen 是比较经典的 multi-agent 项目。现在 Microsoft 也有新的 Agent Framework。
这两个项目适合研究 multi-agent conversation、tool call 和 agent collaboration 的设计演进。
10. OpenHands
OpenHands 更像完整 coding agent 产品。
如果想理解 Claude Code、Devin、OpenHands 这一类 coding agent 的系统结构,可以从它看到很多完整模块:
- 代码执行环境;
- 文件系统;
- 终端;
- 浏览器;
- 任务循环;
- sandbox;
- UI;
- API;
- evaluation。
它适合从“完整产品”角度理解 harness 是如何组合起来的。
推荐阅读路径
如果目标是系统学习 harness engineering,我建议按这个顺序看:
Browser Harness / Browser Use
先理解 browser agent 的环境控制、自愈机制和真实网页交互。Inspect AI
学 eval harness 怎么组织 task、solver、scorer 和日志。SWE-bench
学 coding agent 如何用真实 repo issue 做可验证评测。LangGraph 或 Pydantic AI
学生产 agent runtime 怎么组织状态、工具和流程。OpenHands
看完整 coding agent 产品的工程化组合。
总结
我对 harness engineering 的一句话总结是:
好的 harness engineering,是把“聪明的模型”变成“可靠的工作系统”。
未来 agent 产品的差距,很可能不只来自模型能力,而是来自模型外面的运行系统:工具是否合适,权限是否清晰,验证是否充分,失败是否可恢复,状态是否可追踪,人是否能在关键节点介入。
也就是说,模型负责推理,harness 负责让推理进入真实世界,并且尽量不把事情搞坏。