先说结论
Agent 是任务中的“决策与行动主体”,Harness 是让这个主体能够在真实环境里安全、稳定、可观察地工作的工程系统。
换句话说:
- Agent 负责判断下一步做什么。
- Harness 负责决定它能看到什么、能调用什么,以及这些动作怎样被执行、约束、记录和恢复。
两者不是竞品,也不是二选一。一个可落地的 Agent 产品,通常需要运行在 Harness 之中。
为什么这两个词容易混
行业里对 Agent 的边界并没有完全统一。有些团队把模型、提示词、工具、记忆、调度器和界面全部称为 Agent;另一些团队只把其中负责循环决策的部分称为 Agent,把外围系统称为 Agent Harness。
因此,讨论之前最好先明确口径。本文采用一个适合工程协作的定义:
- 模型:根据输入生成输出的智能能力。
- Agent:围绕目标持续观察、推理、选择动作并判断何时停止的运行主体。
- Harness:把 Agent 接入上下文、工具、权限、状态、运行时和监控体系的宿主与控制层。
这个划分的价值不在于争论名词,而在于帮助团队定位问题究竟发生在哪一层。
核心区别
| 维度 | Agent | Harness |
|---|---|---|
| 关注点 | 当前任务下一步做什么 | 任务如何被安全、可靠地执行 |
| 核心职责 | 理解目标、推理、选工具、检查结果、决定停止 | 提供上下文与工具、执行调用、管理权限、状态和生命周期 |
| 生命周期 | 通常跟随一次任务或一次会话 | 通常长期存在,可承载许多任务和多个 Agent |
| 状态 | 工作记忆、计划、当前假设、任务进度 | 会话记录、文件、数据库、检查点、重试与幂等信息 |
| 工具关系 | 决定是否以及何时调用工具 | 暴露工具、校验参数、执行调用、返回结果 |
| 安全边界 | 遵守目标和行为约束 | 强制鉴权、最小权限、审批、沙箱和审计 |
| 典型故障 | 理解偏差、规划失误、选错工具、过早结束 | 超时、重复执行、权限泄漏、状态丢失、日志不足 |
| 可替换性 | 可以替换模型、提示词或决策策略 | 尽量保持稳定,为不同 Agent 提供一致运行环境 |
一个简单判断方法是:如果问题在问“下一步该做什么”,它更接近 Agent;如果问题在问“这一步能不能执行、怎样执行、失败后怎么办”,它更接近 Harness。
用一次代码修复看清边界
假设用户说:“修复登录接口偶发的 500 错误,并运行测试。”
Agent 可能会完成这些决策:
- 阅读错误日志和相关代码。
- 推测异常来自空值处理或数据库超时。
- 选择要检查的文件和命令。
- 修改实现并运行测试。
- 根据测试结果继续修正,或者结束任务并汇报。
Harness 则负责提供和约束这段过程:
- 把仓库、用户要求和项目规范装入上下文。
- 向 Agent 暴露文件读取、补丁编辑和终端工具。
- 限制可访问目录与命令权限。
- 执行工具调用并把标准输出、错误和退出码返回给 Agent。
- 对危险操作要求确认,对超时调用执行终止或重试。
- 保存会话、变更记录、测试证据和审计日志。
- 在进程中断后恢复任务,避免重复提交或重复发布。
因此,同一个 Agent 放进不同的 Harness,实际表现可能差别很大。模型能力没有变化,但它得到的上下文质量、工具设计、权限边界、反馈速度和错误恢复能力都变了。
Harness 不只是一个循环
最小的 Agent 原型往往只是“调用模型—执行工具—把结果送回模型”的循环。这个循环是 Harness 的一部分,却远不是完整的生产级 Harness。
一个成熟 Harness 通常还要处理以下能力:
- 上下文组装:系统规则、用户目标、仓库规范、历史状态和相关资料如何进入上下文。
- 工具治理:工具描述、参数校验、返回结构、权限范围和错误语义是否清晰。
- 运行控制:超时、重试、取消、并发、队列、检查点和停止条件。
- 安全机制:沙箱、审批、凭据隔离、敏感信息过滤和最小权限。
- 状态管理:会话、任务进度、文件变化、幂等键和中断恢复。
- 可观察性:调用链、耗时、成本、失败原因、最终证据和用户可见进度。
- 质量保障:回归评估、工具成功率、任务完成率以及人工接管机制。
如果这些能力缺失,Agent 即使偶尔表现惊艳,也很难稳定进入生产环境。
模型、Agent 与 Harness 的三层关系
可以把三者理解为一支在受控环境里工作的工程师:
- 模型像思考能力,负责生成判断与候选方案。
- Agent 像正在处理任务的工程师,围绕目标持续观察、决策和行动。
- Harness 像工作台、权限系统、工具链和作业制度的集合,让行动真正发生并且可控。
模型升级不等于 Agent 设计自动变好,Agent 变聪明也不等于 Harness 自动可靠。三层需要分别设计和评估。
多 Agent 属于哪一层
多 Agent 往往横跨两层。
每个子 Agent 仍然负责自己的判断和行动;但谁来拆分任务、如何分配上下文、怎样限制并发、如何合并结果和处理冲突,通常属于 Harness 或编排层的职责。
因此,多 Agent 并不只是“多开几个模型调用”。如果缺少清晰的任务边界、共享状态和汇总规则,并行反而可能带来重复劳动、互相覆盖和成本失控。
设计时应该分别问什么
设计 Agent 时,重点回答:
- 目标如何表达,成功标准是什么?
- Agent 能观察到哪些信息?
- 它有哪些动作和工具可选?
- 每次工具返回后如何重新判断?
- 何时继续、何时求助、何时停止?
- 最终输出必须包含哪些证据?
设计 Harness 时,重点回答:
- 上下文从哪里来,怎样保持新鲜且不过载?
- 工具权限如何按任务最小化?
- 哪些动作可以自动执行,哪些必须审批?
- 调用超时、失败或中断后如何恢复?
- 怎样避免重复写入和不可逆操作?
- 如何记录决策链、工具结果与最终变更?
- 如何让用户随时看到进度并安全接管?
把这两组问题混在一起,常见结果是提示词越来越长,却依然解决不了权限、状态和可靠性问题。
评估也要分层
Agent 质量与 Harness 可靠性应该分开测量。
Agent 层可以关注:
- 任务理解是否准确。
- 计划和工具选择是否合理。
- 结果是否满足目标。
- 是否会识别不确定性并及时求助。
Harness 层可以关注:
- 工具调用成功率与延迟。
- 权限和审批是否正确生效。
- 超时、重试和幂等是否可靠。
- 中断恢复是否丢失状态。
- 日志是否足以复盘问题。
- 敏感数据是否得到隔离。
否则,工具接口返回含糊导致的失败,可能被误判为模型不聪明;而 Agent 的错误决策,也可能被错误地归咎于基础设施。
常见误区
工具越多,Agent 越强
工具数量不是关键。工具重名、描述含糊、参数复杂或返回不稳定,都会增加选择成本。少量、边界清楚、反馈明确的工具,往往更有效。
Harness 只是界面或 SDK
界面和 SDK 只是入口。真正的 Harness 还包括执行环境、状态、权限、工具协议、监控与恢复机制。
换更强模型就能修好系统
更强模型可以改善推理与工具选择,但无法替代鉴权、幂等、超时、审计和数据隔离。这些仍然是 Harness 的工程责任。
Agent 能自我约束,所以不需要强制边界
提示词约束很重要,但生产系统不能只依赖模型自觉。高风险动作需要由 Harness 用权限、审批和沙箱强制执行。
一条实用的落地原则
先把 Agent 当成可替换的决策核心,再把 Harness 当成长期演进的产品基础设施。
这样做有三个好处:
- 可以在不重写工具链的情况下替换模型或调整 Agent 策略。
- 可以把权限、状态、审计和可靠性能力复用于不同任务。
- 出现问题时更容易判断是“决策错了”还是“执行系统失效了”。
最终,Agent 决定系统是否聪明,Harness 决定这种聪明能否稳定、安全地变成结果。
延伸阅读
OpenAI 的模型指导把工具编排、自主权与审批边界、重试停止条件以及最终验证放在同一套工程实践中讨论。这些内容可以作为设计 Harness 时的检查清单:OpenAI Model guidance。