跳到正文
主页
返回

Harness 工程(一):五子系统概览

Table of contents

Open Table of contents

1. Harness 的五个子系统

Harness 由五个子系统组成。它们共同的架构思想是:下放出子任务、确保每个子任务的边界,让子任务之间协作配合。

子系统职责
Instruction(指令)给 Agent 介绍「游戏规则」,作为指南告诉 Agent 什么能做什么不能做
Tools(工具)提供 Agent 可调用的能力(MCP、shell、测试命令、文件读写等)
Environment(环境)控制执行环境(sandbox、依赖版本、init.sh 等),保证每次执行的安全与可回溯
State(状态)自我位置与状态的认知——Agent 需要知道自己在哪、当前进度是什么
Verification(验证/反馈)测试与校验功能,确保 TDD、语法正确等;让 Agent 摆脱「自卖自夸」

此外,Scope(范围管控) 是跨子系统的约束:界定每个 subagent 的任务边界,以及「怎样才算完成」。它主要归入 Instruction 与任务分解,而不是独立的第六个子系统。

Session Lifecycle(会话生命周期) 是 Environment 的子能力:确定每次会话如何开始、如何结束,并在出问题时支持回溯。

参考:OpenAI Harness EngineeringMartin Fowler — Harness engineering


2. 实践中的五层映射

在工程实践中,上述概念常映射为五个子系统:

实践子系统对应概念说明
指令子系统Instruction + Scope定义项目目的、技术栈、Agent 不可违反的硬约束;遵循最小化指令
工具子系统ToolsMCP、shell、测试命令等可调用能力
环境子系统Environment + Session Lifecyclesandbox、依赖管理、init.sh、会话起止流程
状态子系统State让 Agent 清楚当前执行位置与进度
反馈子系统Verification迭代的关键,用测试与校验替代 Agent 的主观判断

Harness = 指令 + 工具 + 环境 + 状态 + 反馈,五个子系统缺一不可。

不是模型权重的部分全是 harness——你的 harness 决定了模型能力能被发挥多少。


3. 常见失败模式

在开始讨论解决方案之前,先明确大多数问题属于哪几类:

  1. 用户要求模糊。 让 Agent 进入工作区时,我们像带着模糊要求的甲方,Agent 会自己猜测未描述的需求。长任务中若 Agent 完成了不想要的实现,改起来代价很高。

  2. 版本与接口的隐性需求。 没有明示代码版本、接口契约或技术栈版本,容易导致实现与预期不一致。

  3. 环境配置。 长任务中难免出现 pip 安装、Node 版本冲突等问题。Agent 会分心处理环境;若不在 sandbox 中,失误还可能污染执行环境。

  4. 缺少验证手段。 不知道自己做得怎么样、什么时候该停,Agent 容易处于「自以为是」的状态,无法自我批判、迭代完善。

  5. 跨对话上下文断裂。 长任务无法在一个会话内完成时,新会话的 Agent 不知道之前做了什么,需要 Session Lifecycle 管理会话内与会话间的状态交接。


4. 核心原则:先质疑 Harness,再质疑模型

在 vibe coding 管理项目时,给自己立一条规则:遇事不决,先质疑自己的工程框架(Harness 设置),而不是模型的能力。

4.1 模糊 prompt vs 标准 prompt

模糊描述:

添加一个搜索功能

标准描述(完成标准):

4.2 AGENTS.md:投入产出比最高的一步

在工作区根目录放一个 AGENTS.md,告诉 Agent 项目的技术栈、架构约定、验证命令。这是 harness 工程的第一步,也是投入产出比最高的一步——一个 AGENTS.md 可能比你换一个更贵的模型更有效,这话不是开玩笑。


5. 落地建议


分享本文:

上一篇
MCP项目实践-DailySearch