Skip to content

Harness Engineering — The Evaluation Problem

房间里的大象: Harness Engineering 的整个体系缺少一个关键环节——如何可靠地验证智能体生成的代码是否真的做了正确的事

The Core Problem

所有 harness engineering 文章都在讨论如何引导约束智能体——更好的 AGENTS.md、更严的 linter、更巧的架构。但它们集体回避了一个根本问题:

你怎么知道智能体做的事情是对的?

不是"代码能编译",不是"测试通过了",而是——它真的解决了用户的问题吗?

Böckeler 在 Fowler 正式版中最诚实地命名了这个问题:行为 Harness 是房间里的大象。但命名问题不等于解决问题。

现有评估方案对比

跨 15 篇核心文章分析,每一篇都尝试了不同的评估方案,没有一篇给出了令人信服的答案:

#来源评估方案能验证什么不能验证什么
1OpenAIlinter + 结构测试代码结构、风格一致性功能正确性
2Böckeler/FowlerGuides×Sensors 三维度分类可维护性(强)、架构适应度(中)行为正确性(弱)
3LangChainContext Rot 感知上下文退化输出质量
4Anthropic分离 Evaluator + Sprint 合同多维度评分Self-eval 倾向过度称赞
5HumanLayerBack-pressure(测试/构建/类型检查)可测试的回归错误需求理解偏差
6Encoding Team Standards三层编码路径团队约定的遵守约定本身是否正确
7Feedback Flywheel观察失败→根因→修复→验证已知的失败模式未知的失败模式
8Meta-Harness自动搜索最优 HarnessHarness 性能依赖可靠的评估函数为前提

三个层次的验证

第一层:可维护性验证(最成熟)

工具链已经很完善:linter、类型检查、代码覆盖率、ArchUnit、OpenRewrite。这些是计算性传感器——确定性的、每次提交都跑、结果可信。

问题不大。OpenAI 的机械化执行和 HumanLayer 的背压杠杆都在这一层运作良好。

第二层:架构适应度验证(中等)

Fitness Functions 可以检测架构漂移:依赖方向、模块边界、性能 SLO。但这里开始出现裂缝:

  • 上下文压缩有 7 种策略、状态管理有多种模式——哪种在什么场景下更好,没有共识
  • Meta-Harness 能自动搜索最优 Harness,但前提是有可靠的评估函数——评估函数本身怎么评估?

第三层:行为正确性验证(最弱——大象所在)

这是整个体系的软肋。核心矛盾:

背压机制只能捕获结构性和回归性错误。 对于"代码能编译和通过测试,但做错了事"的情况,整个体系没有可靠答案。

具体表现:

  1. 测试不等于正确性。 lalitm 的教训最痛:500 多个测试全部通过,但组件设计是完全错误的,需要彻底重做。

  2. Self-evaluation 会失败。 Anthropic 发现智能体评估自己的工作时倾向于过度称赞,"即使质量平庸"。即使使用分离的 Evaluator,Evaluator 本身也是 LLM,也有同样的倾向。

  3. 需求理解偏差无法被机械化检测。 如果智能体对需求的理解本身就是错的,所有 lint、所有测试、所有架构检查都会通过——因为它们验证的是"智能体认为的正确",而不是"用户需要的正确"。

  4. LLM-as-judge 需要校准锚点。 评估体系本身的质量上限受人类投入的制约——但 harness engineering 的目标恰恰是减少人类投入。

为什么这个问题这么难

借用 Böckeler 引用的 Ashby 必要多样性定律

调节器必须至少拥有与被调节系统同等的多样性。

LLM 能生成几乎任何东西——它的输出多样性极高。要可靠地验证这个输出,验证器的能力至少要和生成器一样强。

这就是循环论证: 你需要一个和 LLM 一样聪明的系统来验证 LLM 的输出。如果你有这样的系统,为什么不直接用它来生成?

Anthropic 的分离 Evaluator 本质上是用另一个 LLM 来评估一个 LLM。这在边界情况下有帮助(两个 LLM 犯同样错误的概率低于一个),但不是根本解法。

对 Harness Engineering 适用范围的推论

如果行为验证问题没有通用解法,那 harness engineering 的适用范围是有条件的:

条件Harness Engineering 可靠度例子
需求明确 + 可测试API 实现、数据管道、CRUD
需求明确 + 不可测试UI 设计、用户体验
需求模糊 + 可测试探索性原型
需求模糊 + 不可测试架构设计、产品决策、安全审计

经验验证:AI 在 well-constrained 的任务上卓越(测试编写、重构、API 实现),在需要判断力的任务上失败(架构决策、API 设计、性能优化)。

Three Paths Forward

评估问题不会被某个技术突破一次性解决。它更可能沿着三条路径渐进改善:

  1. 工具链的纵深:从 lint → 变异测试 → 属性测试 → 形式化片段——不断扩大计算性传感器的覆盖范围
  2. 对抗性架构:从单智能体 → Evaluator 分离 → 红蓝对抗 → 多模型交叉验证——通过冗余降低系统性偏差
  3. 人类的精准介入:从全量审查 → 抽检 → 关键节点审查 → 基于异常检测的定向审查——让人类只在最需要的地方出现

"好的 harness 不应以完全消除人类输入为目标,而应将人类输入引导到最重要的地方。" —— Birgitta Böckeler

评估,就是那个"最重要的地方"。

Open Questions

  1. 评估的评估问题: Meta-Harness 自动搜索依赖评估函数,评估函数本身的质量谁来评估?
  2. 人类抽检的可扩展性: 如果最终答案是人类审查,那"吞吐量优先"理念就受到人类注意力的硬约束。
  3. 对抗性评估: 能否用专门来找错的 LLM(红队)来评估另一个 LLM 的输出?
  4. 形式化验证的边界: 对某些领域(密码学、协议、数学证明)可行,但软件工程多数场景不适用。
  5. "足够好"的标准: 什么程度的评估对什么类型的任务足够好?

AI Knowledge Base — 持续积累