简介:本文系统对比Agent系统中的Harness工程与Agent技能:前者负责任务拆解、状态管理、结果验证、错误重试与权限控制等运行层建设,后者决定Agent“会做什么”。文章从职责定位、技术构成、失败模式、迭代方式等维度拆解二者差异,给出不同场景下的建设优先级与落地注意事项,帮助开发者理清Agent系统的分层建设思路。
在阅读Agent相关论文与技术文章时,”Harness”出现的频率越来越高,常见表述包括“优化Agent Harness”“通过Harness提升模型能力”。与此同时,“Agent Skills(Agent技能)”也是社区讨论中的高频词。很多开发者的第一反应是:这两者不都是让Agent变强的方法吗?我平时写的Agent流程到底属于哪一层?
本文对比的对象,正是Agent系统中的这两个层面:Harness工程(运行控制层的工程化建设)与Agent技能(能力层的封装与供给)。
混淆的根源在于:二者作用于同一个Agent系统,都直接影响任务完成质量,而且在代码层面常常交织在一起——同一段编排代码里,既有流程控制,也有工具调用。但它们回答的是两个不同的问题:
理解Harness与Skills的区别,最好先把一个完整的Agent系统拆成几层来看。
Agent通常指能够根据目标进行观察、思考和行动的系统,其核心往往是大语言模型:输入任务 → 模型判断下一步行动 → 调用工具 → 获得反馈 → 继续决策。模型负责“决定下一步做什么”,这是整个系统的智能来源。
Agent Skills指Agent所具备的具体能力封装,例如代码检索、文件编辑、测试执行、数据查询、文档生成等。技能层通常由三部分构成:
技能层解决的问题是“能做什么”:一个只有代码检索技能的Agent无法修改文件;一个没有测试执行技能的Agent无法验证修改是否正确。
Workflow强调“任务有哪些步骤”。例如一个研究型Agent的流程可能是:收集资料 → 归纳要点 → 生成报告。它描述的是步骤编排,但不负责运行时的异常处理与状态控制。
常见的Agent开发框架与各类Agent SDK提供模型接口、工具调用、状态保存、多Agent通信等通用组件,解决的是“我如何方便地开发Agent”的工程效率问题。
Harness更强调运行控制,它不仅描述步骤,还负责:
可以把它理解成:Harness是让Agent真正可靠运行起来的外部控制层。而”Harness engineering”就是围绕这一控制层展开的系统化工程工作:设计控制逻辑、定义验证标准、建设可观测性、持续迭代可靠性。
尽管职责不同,两层能力有明显的共同点:
Skills关注能力的“有无与好坏”:给Agent配备检索、编辑、执行等能力,并让模型知道何时使用。Harness关注过程的“可控与可信”:即便模型选对了技能,整个执行过程也需要被约束在安全、可验证的轨道上。
技能层的典型实现是提示词模板、工具定义、技能描述文件等;Harness的典型实现是任务拆解器、状态存储、校验器、重试与重规划策略、权限网关、人工审批流等控制组件。
技能缺失导致“做不到”:Agent没有对应工具,任务直接无法进行。Harness缺失导致“做不可靠”:Agent有技能,但会检索不到真正相关的文件、修改后不运行测试、测试失败后直接放弃、修改不该修改的内容,甚至直接声称“已完成”而实际未验证——这正是“用户问题 → 大模型 → 修改建议”这种最简形态的典型问题。
技能层迭代围绕能力覆盖与质量:新增技能、优化技能描述、扩充工具参数,评价指标偏任务完成质量与能力覆盖面。Harness迭代围绕过程可靠性:提升一次通过率、降低无效重试、缩短故障恢复时间,评价指标偏成功率、稳定性、可观测性与安全合规。
技能建设更贴近业务与算法:需要理解任务领域,设计高质量提示与工具。Harness建设更贴近平台工程:需要处理状态一致性、并发控制、权限审计、监控告警等基础设施问题。
| 对比维度 | Agent Skills(技能层) | Harness Engineering(运行控制层) |
|---|---|---|
| 核心问题 | Agent能做什么 | 如何可靠、可控地做成 |
| 典型组成 | 提示词、领域知识、工具集、技能描述 | 任务拆解、状态管理、结果验证、重试/重规划、权限控制、人工审批 |
| 系统角色 | 能力供给方 | 运行管控方 |
| 失败表现 | 缺工具、不会用工具、用错技能 | 不验证、不重试、越权操作、提前宣称完成 |
| 迭代方式 | 技能扩充、提示调优、工具升级 | 失败案例分析、校验规则完善、流程回归 |
| 评价维度 | 能力覆盖面、单步完成质量 | 成功率、稳定性、可观测性、安全性 |
| 团队侧重 | 业务/算法向 | 平台/基础设施向 |
假设用户说:“帮我修复这个项目里的bug。”两层能力如何分工?
技能层负责“会做什么”:
Harness层负责“做得可靠”:
初始状态: {task: 修复bug, step: 定位问题}循环:1. 任务拆解: 定位 → 修改 → 验证 → 提交2. 基于当前状态选择下一步, 调用对应技能3. 每步结果校验:- 定位结果: 命中文件是否与报错堆栈相关- 修改结果: 改动是否在允许范围内- 测试结果: 是否全部通过4. 校验失败 → 重试或重新规划 (如更换检索关键词)5. 关键状态持久化, 支持中断后恢复6. 高危操作 (如批量删除、依赖变更) → 人工审批7. 全部校验通过 → 才允许任务结束
没有技能层,Agent“无从下手”;没有Harness层,Agent“下手但不可信”。测试失败后继续修复、控制修改范围、禁止未验证就宣称完成——这些都不是某个单独技能能解决的,而是控制层的职责。
Harness工程与Agent技能不是竞争关系,而是同一个Agent系统中分工不同的两层:技能层决定Agent“能做什么”,由提示词、领域知识与工具集构成,靠近业务与模型;Harness层决定Agent“做得是否可靠”,由任务拆解、状态管理、结果验证、重试规划与权限控制构成,靠近平台与工程。判断建设优先级的原则是:能力缺失先补技能,可靠性不足先修Harness;原型阶段轻控制、重能力,生产阶段重控制、强校验。把这两层的边界理清,Agent系统的迭代路径与团队分工都会清晰很多。