Better-Harness 是一个用 evals 驱动工具链(harness)自动迭代优化的原型系统。核心洞察:ML 训练靠梯度下降更新模型权重,Agent 系统靠 evals 提供学习信号来更新工具链配置。

类比关系很清晰:

  • 模型 + 训练数据 + 梯度下降 → 更好的模型
  • 工具链 + evals + 工具链工程 → 更好的 Agent

工具链为什么需要优化

Agent 的工具链(harness)本质上是一组关于"模型现在能做什么、不能做什么"的假设。当模型能力提升,这套假设就过时了。更关键的是,随着 Agent 单次运行时间越来越长(从分钟级到天、周级),基础设施层面的稳定性、安全性、可观测性要求也在不断提高。

三种 Eval 来源

手工 curation:团队手动写高质量 eval,数量少但精准。

生产 traces 挖掘:每次 Agent 交互产生 trace,失败案例直接转成 eval。这是杠杆效应最高的来源——用得越多,训练信号越密。

外部数据集:拿来后需要人工 curation,确保测试用例真的在测你想要的行为。

所有 eval 都要打标签(工具选择、多步推理等),标签让 holdout 子集和定向实验成为可能,同时节省算力成本。

防止过拟合:Train/Holdout Split

这是 Better-Harness 最重要的工程决策。和 ML 训练一样,优化集用于 hill-climbing,holdout 集用于验证泛化能力。每次改动后跑两个集合,确保新改动在优化集上提升的同时,不会在 holdout 集上产生新的回归。

六步优化循环

  1. 采集 + 打标签 eval:手工写、从 trace 挖、调整外部数据
  2. 数据切分:分成 Optimization 和 Holdout 两组
  3. 跑 Baseline:在两组上各自跑一遍,记录初始分数
  4. 优化:每次只改一处(改 prompt 或改工具,但不能同时改两件事),trace 诊断错误来源
  5. 验证:确认新改动在优化集上得分提升,且没有在已有通过案例上引入回归
  6. 人工 Review:指标可能 miss 的边缘情况、tokens 浪费的 overfit 指令,人工做最后一层 gate

优化循环能发现什么

prompt 和指令更新:模型总是误读某个工具的输出格式,加入一条针对性指令即可解决。

工具描述和组合更新:新工具接入时,优化循环能发现更清晰的使用说明和跨工具调用顺序。

在 Claude Sonnet 4.6 和 GLM-5 上的实验结果:工具选择和跟进质量两个类别上,两个模型在 holdout 集上都实现了接近完全的泛化——用未见过的例子测试,之前 hill-climbing 学到的改动仍然有效。

Traces 是核心资产

Better-Harness 的飞轮逻辑:

  • 更多 Agent 使用 → 更多 traces
  • 更多 traces → 更多 eval 素材
  • 更多 eval → 更好的工具链
  • 更好的工具链 → 更好的 Agent 表现
  • 更好的 Agent 表现 → 更多使用

所有 trace 都存储下来,用于:自动分类和聚类生产环境的失败模式;从 trace 自动生成 eval;横向对比不同工具链版本的效果差异。

为什么值得关注

Agent 系统的开发范式正在从"手工调工具链"向"用数据驱动工具链迭代"演进。Better-Harness 的方法论把 ML 训练的工程严谨性带入了 Agent 开发:数据质量、train/test split、防过拟合、人工 gate——这些在模型训练里是常识,在 Agent 开发里还没有被广泛应用。

对于想构建生产级 Agent 系统的团队,这套思路值得直接参考。