Harness Engineering:AI 编码智能体的置信度工程实践

April 28, 2026
April 28, 2026

作者:Birgitta Böckeler,Thoughtworks 杰出工程师,AI 辅助交付专家(20+ 年开发经验)。原文发表于 2026 年 4 月 2 日,Martin Fowler 网站。

一、背景:为什么需要 Harness Engineering?

AI 编码智能体(coding agent)带来了一个根本性信任问题:LLM 是非确定性的,它不理解你的代码上下文,它以 token 的方式思考。作为软件工程师,我们天然对 AI 生成的代码存在信任屏障。

Birgitta Böckeler 在本文中提出了一个心智模型,核心公式:

Agent = Model + Harness

Harness(中文可译为「挽具」或「控制系统」)指的是智能体中除了模型本身之外的一切——系统提示词、代码检索机制、编排系统,以及用户为自己用例构建的外部 harness。

不同上下文中 Harness 的含义

图 1:术语「Harness」在不同上下文中的含义各不相同

二、核心框架:前馈 + 反馈 = 自我纠正

Harness 的设计围绕两个核心机制:

Guide(前馈控制)

在智能体行动之前进行引导,提前预判并预防不良行为。前馈控制提高智能体第一次就做对的概率。

Sensor(反馈控制)

在智能体行动之后观察结果,帮助其自我纠正。高效的 sensor 会输出专门为 LLM 优化过的信号——例如自定义 linter 消息包含自我纠正指令,这是一种正向的 prompt injection

只有反馈没有前馈 → 智能体会不断重复相同错误
只有前馈没有反馈 → 智能体会制定规则但从不知道这些规则是否有效

Harness 工程总览

图 2:Harness 工程总览——前馈(Guide)、反馈(Sensor)与 Steering Loop

三、计算的 vs 推断的:两种执行类型

Guide 和 Sensor 各有两种执行类型:

类型特性示例
Computational(计算的)确定性,CPU 执行,毫秒级,结果可靠测试、linter、类型检查、结构分析
Inferential(推断的)语义分析,GPU/NPU 执行,较慢且非确定性AI 代码评审、「LLM as judge」

计算型 Sensor 足够便宜,可以在每次变更时运行。推断型 Sensor 虽然更贵且非确定性,但在使用足够强的模型时,可以显著提高信任度。

四、时序策略:保持质量左移

持续集成的团队面临的挑战是如何根据成本、速度和关键性,将测试、检查和人工审查分布到开发时间线上。当目标是持续交付时,每一个提交状态最好都是可部署的——你希望检查尽可能左移,发现问题越早,修复成本越低。

变更生命周期中的前馈与反馈

图 3:变更生命周期中的前馈与反馈分布

持续漂移与健康 Sensor

除了变更生命周期,还需要持续运行的 Sensor 来监控累积性漂移:

  • 死代码检测
  • 测试覆盖质量分析
  • 依赖漏洞扫描
  • 运行时反馈:监控 SLO 降级并提出改进建议

持续反馈传感器示例

图 4:持续反馈传感器示例

五、Harness 的三种类型

Harness 类型

图 5:Harness 的三种类型

1. Maintainability Harness(可维护性 Harness)

这是目前最容易构建的 harness 类型,因为有大量现成的工具可用。

Birgitta 将常见编码智能体失败模式映射到了不同 Sensor 上:

  • 计算型 Sensor 可靠捕获:重复代码、循环复杂度、缺失测试覆盖、架构漂移、风格违规
  • LLM 可部分解决(但成本高、非确定性):语义重复代码、冗余测试、暴力修复、过度工程
  • 两者都难以可靠捕获:问题误诊、过度工程、不必要的功能、对指令的误解——这些需要在人工监督下解决

2. Architecture Fitness Harness(架构 Fitness Harness)

定义和检查应用架构特性的 Guide 和 Sensor,本质上是 Fitness Functions

  • 前馈:Skills 传递性能需求 → 性能测试反馈性能改善或退化
  • 前馈:描述可观测性编码规范(日志标准)→ 调试时要求智能体反思日志质量

3. Behaviour Harness(行为 Harness)

这是最难的部分——如何引导和感知应用的功能行为是否符合预期?

当前大多数高自主性编码智能体的做法:前馈用功能规格说明,反馈靠 AI 生成的测试套件是否通过。这种方法对 AI 生成测试的信任还不够。

Thoughtworks 一些同事在特定领域使用 approved fixtures 模式取得了不错效果,但适用范围有限。

六、Steering Loop:人在循环中的角色

人类在 harness 系统中的角色是持续迭代和改进 harness——每当某个问题多次出现,就改进前馈或反馈控制,使其在未来减少发生概率甚至完全预防。

Steering loop 中也可以用 AI 来改进 harness:

  • 智能体可以帮助编写结构性测试
  • 从观察到的模式生成规则草案
  • 搭建自定义 linter 的脚手架
  • 从代码库考古中创建操作指南

七、Ashby 定律与 Harness 模板

Harness 模板

图 6:企业常见的 80% 服务拓扑 → 未来的 Harness 模板

Ashby 必要多样性定律:调节器的多样性必须至少与被调节系统一样多。LLM 可以产生几乎任何东西,但承诺一个拓扑会收窄这个空间,使全面的 harness 更容易实现。

企业级团队通常有覆盖 80% 需求的服务拓扑(API 业务服务、事件处理服务、数据仪表盘)。这些拓扑未来可能演化为 Harness 模板——一组捆绑的 Guide 和 Sensor,将编码智能体约束到特定拓扑的结构、规范和技术栈上。

八、核心洞察与实践建议

「好的 harness 的目标不一定是完全消除人类输入,而是将人类输入引导到最需要人类判断的地方。」

人类开发者带来的隐性 harness:吸收了规范和良好实践、感受到复杂性的认知痛苦、知道自己的名字会出现在提交记录上、理解团队正在努力实现什么。

编码智能体没有这些:没有社会责任感、没有对 300 行函数的厌恶感、没有「我们这里不这样做」的直觉、没有组织记忆。

九、行业案例

  • OpenAI 团队:用自定义 linter 和结构性测试强制执行分层架构,定期「垃圾回收」扫描漂移并让智能体建议修复
  • Stripe:pre-push hooks 基于启发式运行相关 linter,「shift feedback left」是关键策略,blueprints 将反馈传感器集成到智能体工作流中
  • Mutation testing 和结构性测试:之前未被充分利用,现在正在复兴的计算型反馈传感器

十、开放问题

  • 如何保持 harness 的内聚性,避免 Guide 和 Sensor 相互矛盾?
  • 当指令和反馈信号指向不同方向时,智能体能做出合理的权衡吗?
  • 如果 Sensor 从不触发,这是高质量的信号还是检测机制不足?
  • 我们需要一个类似于代码覆盖率的方法来评估 harness 的覆盖率和质量
  • 构建这个外部 harness 正在成为一项持续的工程实践,而非一次性配置

附录:论文信息

项目内容
标题Harness engineering for coding agent users
作者Birgitta Böckeler
机构Thoughtworks
发表Martin Fowler Articles,2026-04-02
标签generative AI

一点思考

这篇文章最有价值的地方在于它将工程思维(测试、linter、Fitness Functions)与 AI 时代的新问题(非确定性、自我纠正)做了一个系统性整合。

「Agent = Model + Harness」这个公式简洁但深刻:模型的能力有上限,但 harness 的工程改进空间几乎是无限的。随着更多团队积累经验,harness engineering 很可能成为软件工程的一个正式子领域。