Harness² — 循环任务固化工具 是做什么的?
改编自 Harness²: 面向开放世界的递归代理固化方法, 聚焦于一次执行已被接受、目标是重复执行的场景。
概述
成功一次并不等于可重复。已接受的运行是你唯一可信的参考点:它包含真实的交付物、真实的执行轨迹以及用户亲自编辑过的位置。
优化的对象是下一次执行的过程,而非本次执行的交付物。因此,产出不是一份更好的报告——而是一个固化工具(harness)、一份标准操作流程(SOP)和一份回归检查清单。
何时使用
- 用户说“以后每周我们都要做这个”或“咱们把这个流程固定下来”
- 同一类任务至少已执行过一次,且结果已被接受
- 流程存在于某人的头脑中:谁先运行哪个脚本、哪一步需要人工检查、陷阱在哪里
- 同类任务反复以相同方式失败:来源归属遗漏、定义不统一、持续返工
何时不使用
- 一次性任务 → 直接执行即可
- 存在真正的评分器、单元测试或可计算的验收标准 → 直接使用;它远优于行为对比
- 用户仅要求修改格式或定义,且已明确说明 → 直接编辑固化工具,跳过对比循环
- 流程已稳定,且成本或延迟紧张
什么是固化工具(Harness)
模型周围所有可编辑的内容。四个组件即可运行;八个是完整集合:
| 组件 | 作用 | 最低要求 |
|---|---|---|
| 系统提示 | 角色、输出契约 | ✅ |
| 工具引导 | 何时使用每个数据源、如何填写参数 | ✅ |
| 技能模块 | 可复用的判断和程序 | ✅ |
| 护栏 | 硬约束(绝不编造数字、始终引用来源) | ✅ |
| 记忆 | 跨实例传递的领域笔记 | |
| 脚本 | 确定性工作(格式转换、去重、聚合) | |
| 子代理 | 分离出的验证或并行检索 | |
| 插件 | 中间件(强制每N步进行一次自检) |
固化工具必须以文件形式存在,以便进行差异对比和复用。“我们通常这么做”留在聊天记录里,是无法固化的。
循环:提出 → 探测 → 组合
0. 冻结基线
完整存档上一次运行:固化工具快照、完整轨迹(工具调用序列+中间产物)、最终交付物、用户的编辑差异、验收标准、数据快照或时间窗口。
用户亲自编辑过的地方是高置信度的缺陷位置——比任何猜测都可靠。
1. 提出
读取基线,然后提出两个候选方案,每个用一句话说明其针对的缺陷:
- 不变类:流程缺陷——没有交叉检查、中间结果未持久化、失败不重试、来源未标注、上下文超限
- 领域类:此类任务的专业约束——定义一致、货币或单位换算、时间窗口对齐
两者都需要,以区分“通用疾病”和“此类任务特有的疾病”。仅有一个候选方案,你无法归因结果。
2. 探测
使用相同输入重放,控制变量:相同模型、相同工具集、相同数据快照。只改变固化工具。
比较两项:
- 与基线的行为差异:工具集及顺序、步骤数、重复调用、错误和重试、人工补丁点是否消失、中间结果是否持久化、来源是否完整标注
- 重放一致性:再次运行——结构是否相同?固化的核心指标是稳定性,而非单次运行的最佳结果
对比显示“行为改变了”,但不显示“结果正确”。切勿将两者混为一谈。
3. 组合
仅保留那些 (a) 在重放后仍满足验收标准,且 (b) 减少返工或人工补丁的更改。保留原方案是允许的——没有证据支持的更改就是噪音。
每项决策记录为一行:更改 | 针对的缺陷 | 观察到的证据 | 采纳/修订/放弃
4. 固化
三类工件;缺少任何一项都意味着尚未固化:
harness/— 可编辑的文件SOP.md— 步骤、检查点、何时必须询问人工、已知陷阱(超过十项就没人读了)REGRESSION.md— 下次运行后需要核对的验收清单
如果某一更改在多轮中被采纳,则将其提升为独立的脚本或技能模块。
证据等级
用户编辑差异 > 与已接受交付物的比较 > 重放一致性 > 轨迹差异 > 直觉
不是证据:更长的报告、更详细的报告、“用户这次没抱怨”、模型自称做得更好。
预算
默认设置:一个候选方案加一次重放。固化成本随时间摊销,因此将其分摊到各轮执行中:每次循环执行时探测一个候选方案,而不是一次性花费3倍时间运行所有并行分支。
红旗——遇到时立即停止
- 未阅读用户编辑差异就直接继承之前的固化工具
- 使用不同的输入、模型或数据快照重放,却仍声称“效果更好”
- 仅凭一次重放即得出结论,未排除随机性
- 一次性更改五个组件,导致无法归因
- 条目多达20项的SOP,下次没人会执行
- 将一次性运气写进不变类条目
常见错误
| 错误 | 后果 | 修复方法 |
|---|---|---|
| 归档前就优化 | 基线丢失,更改无法归因 | 首先冻结基线 |
| 以“读起来更顺”作为证据 | 固化了偏好,而非流程 | 绑定到具体观察 |
| 仅更改提示,无检查点 | 下次仍需人工手动补丁 | 为每个缺陷配对检查点 |
| SOP写成游记 | 没人读,所以什么都没固化 | 仅写决策点和陷阱 |