Harness Engineering 核心概念详解

文章目录

    • [1. Harness Engineering 的本质定义](#1. Harness Engineering 的本质定义)
      • [1.1 核心定义](#1.1 核心定义)
      • [1.2 诞生的历史时刻](#1.2 诞生的历史时刻)
      • [1.3 "Harness" 的本意](#1.3 "Harness" 的本意)
    • [2. Agent = Model + Harness 核心公式](#2. Agent = Model + Harness 核心公式)
      • [2.1 公式解读](#2.1 公式解读)
      • [2.2 LangChain 工程师的精炼定义](#2.2 LangChain 工程师的精炼定义)
      • [2.3 类比:CPU 与操作系统](#2.3 类比:CPU 与操作系统)
    • [3. Harness 三大支柱详解](#3. Harness 三大支柱详解)
      • [3.1 支柱一:上下文工程(Context Engineering)🎯](#3.1 支柱一:上下文工程(Context Engineering)🎯)
      • [3.2 支柱二:架构约束(Architectural Constraints)🎯](#3.2 支柱二:架构约束(Architectural Constraints)🎯)
      • [3.3 支柱三:熵管理(Entropy Management)🎯](#3.3 支柱三:熵管理(Entropy Management)🎯)
        • 核心命题
        • [OpenAI 的初始方案(不可持续)](#OpenAI 的初始方案(不可持续))
        • [最终方案:让 Agent 清洁 Agent 的烂摊子](#最终方案:让 Agent 清洁 Agent 的烂摊子)
        • [Mitchell Hashimoto 理念的系统化体现](#Mitchell Hashimoto 理念的系统化体现)
    • [4. Harness 核心组件全景](#4. Harness 核心组件全景)
      • [4.1 组件架构图](#4.1 组件架构图)
      • [4.2 关键组件详解](#4.2 关键组件详解)
        • [4.2.1 跨会话状态管理(Cross-Session State)](#4.2.1 跨会话状态管理(Cross-Session State))
        • [4.2.2 上下文压缩(Compaction)](#4.2.2 上下文压缩(Compaction))
        • [4.2.3 自验证循环(Self-Verification Loop)](#4.2.3 自验证循环(Self-Verification Loop))
    • [5. Harness 与传统软件工程的核心区别](#5. Harness 与传统软件工程的核心区别)
      • [5.1 根本性差异](#5.1 根本性差异)
      • [5.2 思维转变](#5.2 思维转变)
    • [6. 关键挑战与解决方案](#6. 关键挑战与解决方案)
      • [6.1 Challenge 1: 无状态问题](#6.1 Challenge 1: 无状态问题)
      • [6.2 Challenge 2: Context Rot](#6.2 Challenge 2: Context Rot)
      • [6.3 Challenge 3: 架构漂移](#6.3 Challenge 3: 架构漂移)
      • [6.4 Challenge 4: 验证缺失](#6.4 Challenge 4: 验证缺失)
      • [6.5 Challenge 5: 费用失控](#6.5 Challenge 5: 费用失控)
    • [7. 核心术语速查表](#7. 核心术语速查表)

1. Harness Engineering 的本质定义

1.1 核心定义

Harness Engineering 是指围绕 AI Agent(特别是 Coding Agent)设计和构建约束机制、反馈回路、工作流控制和持续改进循环的系统工程实践。

它解决的核心问题是:当 AI Agent 拥有了强大的代码生成能力后,如何确保其输出的可靠性、一致性和长期可维护性。

1.2 诞生的历史时刻

复制代码
2026年2月5日
Mitchell Hashimoto(HashiCorp 联合创始人、Terraform 创作者)
首次正式定义:

"每当你发现 Agent 犯了一个错误,
你就花时间设计一个解决方案,
使 Agent 永远不再犯同样的错误。

我称之为 Harness Engineering。"

仅仅六天后,OpenAI 发布了历史性的实验报告:

  • 3 人工程师团队
  • 5 个月时间
  • 借助 Codex Agent 构建了超过 100 万行代码的产品
  • 零行人工手写代码
  • 人均日合并 3.5 个 PR
  • 效率约为传统模式的 10 倍

1.3 "Harness" 的本意

复制代码
┌─────────────────────────────────────────────┐
│                                             │
│   Harness(挽具/驾驭具)                    │
│                                             │
│      🐴 ←─────── 👤                         │
│         (被驾驭者)  (驾驭者)                 │
│                                             │
│   通过约束和引导,让强大的力量为人类服务    │
│                                             │
└─────────────────────────────────────────────┘

核心理念

  • 模型(Model)是强大的非确定性智能
  • Harness 是驾驭这种智能的工程系统
  • 目标不是限制智能,而是让智能有用

2. Agent = Model + Harness 核心公式

2.1 公式解读

复制代码
┌──────────────────────────────────────────────────────────┐
│                                                          │
│                    Agent = Model + Harness               │
│                                                          │
│   ┌──────────────────┐        ┌────────────────────┐   │
│   │                  │        │                    │   │
│   │   Model(模型)   │   +    │  Harness(驾驭具)   │   │
│   │                  │        │                    │   │
│   │  • 大语言模型     │        │  • 约束机制         │   │
│   │  • 提供智能      │        │  • 反馈回路         │   │
│   │  • 非确定性      │        │  • 状态管理         │   │
│   │  • 无状态        │        │  • 验证机制         │   │
│   │                  │        │  • 工具调度         │   │
│   └──────────────────┘        └────────────────────┘   │
│                                          │               │
│                  "模型提供智能,Harness 让智能有用"       │
│                  --- Harrison Chase, LangChain CEO        │
│                                                          │
└──────────────────────────────────────────────────────────┘

2.2 LangChain 工程师的精炼定义

"如果你不是模型,你就是 Harness。"

--- Vivek Trivedy, LangChain 工程师

理解要点

  • Harness 是围绕 LLM 的一切代码、配置和执行逻辑
  • 状态管理 → Harness
  • 工具调度 → Harness
  • 反馈回路 → Harness
  • 验证机制 → Harness
  • 上下文压缩 → Harness
  • 每一样都属于 Harness 的范畴

2.3 类比:CPU 与操作系统

复制代码
传统计算机架构                AI Agent 架构
┌─────────────┐              ┌─────────────┐
│    CPU      │              │   Model     │
│  (计算能力)  │      →       │  (智能核心)  │
└─────────────┘              └─────────────┘
      ↓                           ↓
┌─────────────┐              ┌─────────────┐
│ Operating  │              │  Harness    │
│  System     │      →       │  (驾驭系统)  │
│ (让能力可用) │              │ (让智能有用) │
└─────────────┘              └─────────────┘

"模型是 CPU,Harness 是操作系统------CPU 再强,OS 拉胯也白搭。"
--- Harrison Chase

3. Harness 三大支柱详解

OpenAI 实验报告经过 Martin Fowler 团队的深度分析后,被归纳为三个彼此依存的支柱。理解这三个支柱,就理解了 Harness Engineering 的全部核心。

复制代码
┌─────────────────────────────────────────────────────────┐
│              Harness Engineering 三大支柱               │
├─────────────────────────────────────────────────────────┤
│                                                          │
│           ┌──────────────────────────────┐              │
│           │                              │              │
│           │  上下文工程(Context)        │              │
│           │  "让 Agent 知道该知道的事"   │              │
│           └──────────────────────────────┘              │
│                          │                               │
│           ┌──────────────┴──────────────┐               │
│           │                             │               │
│  ┌────────────────────┐    ┌────────────────────────┐ │
│  │  架构约束(Arch)   │    │  熵管理(Entropy)      │ │
│  │  "让 Agent 不做    │    │  "让 Agent 清理        │ │
│  │   不该做的事"      │    │   自己的烂摊子"        │ │
│  └────────────────────┘    └────────────────────────┘ │
│                                                          │
└─────────────────────────────────────────────────────────┘

3.1 支柱一:上下文工程(Context Engineering)🎯

核心命题

从 Agent 的视角,任何它在运行时无法访问的内容,等同于不存在。

OpenAI 的惨痛教训
复制代码
❌ 错误做法:
团队在 Slack 上就某个架构模式达成了共识,
但没有写进代码仓库。

结果:
Codex Agent 在之后的所有会话中,
完全无法"知道"这个约定,
一次次地走弯路。

✅ 正确做法:
知识必须被推送进仓库,
成为版本控制下的文档。
两层上下文工程方案
复制代码
┌─────────────────────────────────────────────────────────┐
│                   上下文工程架构                        │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  第一层:AGENTS.md(项目导航地图)                       │
│  ├─ 约 100 行,简洁明了                                 │
│  ├─ 每行都是指向深度文档的指针                           │
│  └─ 过长的 AGENTS.md 会挤占任务 Token                   │
│                                                          │
│  第二层:深度文档(知识库)                              │
│  ├─ 架构设计文档(docs/architecture.md)                │
│  ├─ API 文档(docs/api.md)                             │
│  ├─ 编码规范(docs/coding-standards.md)                │
│  └─ 质量评分标准(docs/quality.md)                      │
│                                                          │
└─────────────────────────────────────────────────────────┘
AGENTS.md 设计原则
markdown 复制代码
<!-- ✅ 好的 AGENTS.md:导航地图 -->
## 项目概览
用户认证服务,Spring Boot + PostgreSQL

## 构建命令
- 完整构建:`./gradlew build`
- 运行测试:`./gradlew test`

## 架构约束
- 依赖方向:domain → application → infrastructure
- 详见:docs/architecture.md#dependency-rules

## 编码规范
- 使用懒加载,N+1 用 fetch join 解决
- 详见:docs/coding-standards.md

<!-- ❌ 坏的 AGENTS.md:百科全书 -->
## 架构约束详细说明(10000 字)
...

# 问题:挤占任务 Token,导致性能下降
反直觉的设计原则

约束反而提升效率

当 Agent 面对"可以生成任何东西"的开放空间时,它会浪费 Token 探索死路。而当 Harness 通过文档和规则定义了清晰的边界后,Agent 能更快收敛到正确的解决方案。

3.2 支柱二:架构约束(Architectural Constraints)🎯

核心命题

与其告诉 Agent "写好代码",不如机械地强制执行"好代码"的样子。

OpenAI 的发现

仅靠提示词约束架构边界是不可靠的。他们最终构建了混合执行机制

复制代码
┌─────────────────────────────────────────────────────────┐
│                   混合执行机制                          │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  LLM 驱动的代理审查 + 确定性自定义 Linter                │
│                                                          │
│  ┌──────────────────┐      ┌────────────────────┐      │
│  │                  │      │                    │      │
│  │  Agent 生成代码  │  →   │  Linter 检查       │      │
│  │                  │      │  (纯代码实现)       │      │
│  └──────────────────┘      └────────────────────┘      │
│                                     │                    │
│                                     ↓                    │
│                          ┌────────────────────┐         │
│                          │                    │         │
│                          │  错误信息 =         │         │
│                          │  修复指南           │         │
│                          │  (Teaching Moment) │         │
│                          └────────────────────┘         │
│                                                          │
└─────────────────────────────────────────────────────────┘
精妙设计:错误信息即教学时刻
java 复制代码
// ❌ 触发 Linter 错误的代码:
// domain/UserService.java
import com.example.infra.DatabaseRepository; // 违反架构约束!

// ✅ Linter 输出(包含修复指引):
/*
[ARCH-001] domain 层不得直接引用 infrastructure 层。

原则:保持依赖方向 domain → application → infrastructure

修复建议:
  在 application 层定义 UserRepository 接口,
  由 infrastructure 层实现该接口。

参见:docs/architecture.md#dependency-rules

示例:
  // application/UserRepository.java
  public interface UserRepository {
      Optional<User> findById(Long id);
  }

  // infrastructure/SqlUserRepository.java
  public class SqlUserRepository implements UserRepository {
      // 实现细节
  }
*/
规则库的演进
复制代码
┌─────────────────────────────────────────────┐
│                                             │
│   每一条 Linter 规则背后都是                │
│   Agent 曾经犯过的某个错误                   │
│                                             │
│   规则库随着项目迭代越来越健壮               │
│                                             │
│   这是一个正向的复利飞轮 📈                  │
│                                             │
└─────────────────────────────────────────────┘

3.3 支柱三:熵管理(Entropy Management)🎯

核心命题

AI 生成的代码库,随着时间推移会自然累积"熵"------文档与代码脱节、命名规范漂移、死代码堆积。Harness 需要内置对抗熵增的机制。

OpenAI 的初始方案(不可持续)
复制代码
❌ 人工清理模式:
每周五,整个团队(20% 的工时)
用于手动清理"AI 垃圾代码"。

问题:显然不可持续!
最终方案:让 Agent 清洁 Agent 的烂摊子

建立一组后台垃圾回收 Agent,周期性运行:

复制代码
┌─────────────────────────────────────────────────────────┐
│                  后台垃圾回收 Agent                     │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  🤖 文档一致性 Agent                                      │
│     任务:验证文档与当前代码是否匹配,开修复 PR          │
│     频率:每日                                          │
│                                                          │
│  🤖 约束违规扫描器                                       │
│     任务:发现绕过了早期检查的约束违反                   │
│     频率:每 PR                                         │
│                                                          │
│  🤖 模式执行 Agent                                       │
│     任务:识别并修复偏离既定模式的代码                   │
│     频率:每周                                          │
│                                                          │
│  🤖 依赖审计器                                           │
│     任务:追踪并解决循环或不必要的依赖                   │
│     频率:每周                                          │
│                                                          │
└─────────────────────────────────────────────────────────┘
Mitchell Hashimoto 理念的系统化体现

"每当 Agent 犯一个新类型的错误,就回头加一条约束。"

日积月累:

  • Harness 越来越健壮
  • Agent 能犯的错越来越少
  • 正向的复利飞轮 🔄

4. Harness 核心组件全景

4.1 组件架构图

复制代码
┌─────────────────────────────────────────────────────────────────┐
│                        Harness 架构                              │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │                    上下文工程层                           │   │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │   │
│  │  │ AGENTS.md    │  │ 代码库索引   │  │ 关键文档指针 │  │   │
│  │  └──────────────┘  └──────────────┘  └──────────────┘  │   │
│  └──────────────────────────────────────────────────────────┘   │
│                              │                                  │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │                   工具调度层(Tool Dispatch)             │   │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │   │
│  │  │ 文件操作工具 │  │ 命令执行工具 │  │ 测试运行工具 │  │   │
│  │  └──────────────┘  └──────────────┘  └──────────────┘  │   │
│  └──────────────────────────────────────────────────────────┘   │
│                              │                                  │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │                  反馈回路层(Feedback Loops)             │   │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │   │
│  │  │ 自验证循环   │  │ 错误分析     │  │ 循环检测     │  │   │
│  │  └──────────────┘  └──────────────┘  └──────────────┘  │   │
│  └──────────────────────────────────────────────────────────┘   │
│                              │                                  │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │                  架构约束层(Constraints)                │   │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │   │
│  │  │ 自定义 Linter│  │ 结构测试     │  │ 依赖规则检查 │  │   │
│  │  └──────────────┘  └──────────────┘  └──────────────┘  │   │
│  └──────────────────────────────────────────────────────────┘   │
│                              │                                  │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │                状态管理层(State Management)             │   │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │   │
│  │  │ 进度追踪文件 │  │ 上下文压缩   │  │ 跨会话记忆   │  │   │
│  │  └──────────────┘  └──────────────┘  └──────────────┘  │   │
│  └──────────────────────────────────────────────────────────┘   │
│                              │                                  │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │                 熵管理层(Entropy Management)            │   │
│  │  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │   │
│  │  │ GC Agent     │  │ 文档同步     │  │ 依赖审计     │  │   │
│  │  └──────────────┘  └──────────────┘  └──────────────┘  │   │
│  └──────────────────────────────────────────────────────────┘   │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

4.2 关键组件详解

4.2.1 跨会话状态管理(Cross-Session State)

问题:LLM 天生无状态,每次新会话都是"失忆重启"

解决方案:结构化进度文件

json 复制代码
// .agent-progress.json --- 跨会话状态追踪
{
  "feature": "用户认证模块",
  "status": "in_progress",
  "completed_steps": [
    "✅ 数据库 Schema 设计",
    "✅ UserRepository 接口定义",
    "✅ JWT 工具函数实现"
  ],
  "current_step": "🔄 LoginController 编写中",
  "next_steps": [
    "⬜ 编写单元测试",
    "⬜ 集成测试",
    "⬜ 文档更新"
  ],
  "blockers": [],
  "last_updated": "2026-03-16T14:30:00Z"
}
4.2.2 上下文压缩(Compaction)

问题:Context Rot - 随上下文增长,LLM 指令跟随能力逐渐劣化

策略

  1. 智能摘要:将旧对话历史压缩为关键信息摘要
  2. 工具输出截断:只保留关键信息,全量写磁盘
  3. 分层存储:热数据在上下文,冷数据在外部存储
python 复制代码
# 工具输出截断示例
output = result.stdout + result.stderr
if len(output) > 2000:
    output = output[:1000] + "\n...[截断]...\n" + output[-500:]
4.2.3 自验证循环(Self-Verification Loop)

问题:Agent 如果没有外部强制,根本不会主动测试代码

解决方案:强制 Build-Verify 循环

复制代码
1. Plan(计划):任务分解是否清晰?
      ↓
2. Build(构建):代码是否可编译?测试是否已编写?
      ↓
3. Verify(验证):测试是否全部通过?是否满足任务要求?
      ↓ (失败)
4. Fix(修复):回到步骤 2
      ↓ (成功)
   完成

效果:LangChain 在 Terminal Bench 2.0 上从 52.8% 提升到 66.5%,从全球第 30 名跃升至第 5 名


5. Harness 与传统软件工程的核心区别

5.1 根本性差异

复制代码
┌─────────────────────────────────────────────────────────┐
│          传统软件工程 vs Harness Engineering            │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  传统工程                    Harness 工程               │
│                                                          │
│  确定性算法        ←→      非确定性 LLM                 │
│  (相同输入→相同输出)          (输出可能变化)             │
│                                                          │
│  异常捕获、重试    ←→      分析根因、修改环境            │
│                           (让同类失败不再发生)           │
│                                                          │
│  单元测试、集成测试 ←→      Agent Trace 分析            │
│                           (自验证循环)                  │
│                                                          │
│  Code Review      ←→      Harness 约束 +               │
│                           垃圾回收 Agent                │
│                                                          │
│  算法与数据结构    ←→      环境设计、                   │
│                           反馈回路构建                   │
│                                                          │
│  数据库/缓存      ←→      跨会话进度文件/               │
│                           上下文压缩                     │
│                                                          │
└─────────────────────────────────────────────────────────┘

5.2 思维转变

复制代码
传统软件工程师思维          Harness 工程师思维
┌──────────────────┐      ┌──────────────────┐
│                  │      │                  │
│  "我如何实现?"   │  →   │  "我如何设计     │
│                  │      │   让 AI 实现?"  │
│                  │      │                  │
└──────────────────┘      └──────────────────┘

┌──────────────────┐      ┌──────────────────┐
│                  │      │                  │
│  "代码怎么写?"   │  →   │  "环境如何设计   │
│                  │      │   让代码正确?"  │
│                  │      │                  │
└──────────────────┘      └──────────────────┘

OpenAI 工程团队坦言

"我们最困难的挑战现在集中在设计环境、反馈回路和控制系统上。工程师的工作,从写代码变成了设计让 AI 能写好代码的环境。"


6. 关键挑战与解决方案

6.1 Challenge 1: 无状态问题

问题

  • LLM 天生无状态
  • 每次新会话都是"失忆重启"
  • 同样的错误会一遍遍重演

Harness 解决方案

  • ✅ 结构化进度文件(.agent-progress.json
  • ✅ 跨会话状态持久化
  • ✅ 上下文压缩机制

6.2 Challenge 2: Context Rot

问题

  • 上下文窗口被工具输出、历史记录填满
  • 即使支持 100 万 Token,性能衰减在 25.6 万 Token 左右便出现
  • LLM 指令跟随能力显著下降

Harness 解决方案

  • ✅ 智能上下文压缩(Compaction)
  • ✅ 工具输出截断
  • ✅ 分层存储策略

6.3 Challenge 3: 架构漂移

问题

  • AI 生成的代码库随时间累积"熵"
  • 文档与代码脱节
  • 命名规范漂移
  • 死代码堆积

Harness 解决方案

  • ✅ 确定性自定义 Linter
  • ✅ 后台垃圾回收 Agent
  • ✅ 持续的熵管理机制

6.4 Challenge 4: 验证缺失

问题

  • Agent 如果没有外部强制,根本不会主动测试代码
  • Agent 可能在任务未完成时宣布"成功"
  • 幻觉式成功现象

Harness 解决方案

  • ✅ 强制自验证循环(Build-Verify)
  • ✅ PreCompletionChecklistMiddleware
  • ✅ 最终测试套件验证

6.5 Challenge 5: 费用失控

问题

  • Agent 可能陷入无限重试循环
  • 无人监控的 Agent 可能产生巨额 API 账单
  • 真实案例:$50,000 的一夜损失

Harness 解决方案

  • ✅ API 调用预算监控与硬限制
  • ✅ 循环检测机制
  • ✅ 人类审批节点(Human-in-Loop)
  • ✅ 费用上限告警

7. 核心术语速查表

术语 英文 一句话解释
驾驭工程 Harness Engineering 围绕 AI Agent 构建约束、反馈、控制的系统工程实践
驾驭具 Harness 围绕 LLM 的一切代码、配置和执行逻辑
上下文腐烂 Context Rot 随上下文增长,LLM 指令跟随能力逐渐劣化的现象
项目地图 AGENTS.md 约 100 行的项目导航文件,指向深度文档
上下文压缩 Compaction 智能摘要旧上下文,防止 Context Rot
自验证循环 Self-Verification Loop 强制 Agent 检验自己工作的机制
垃圾回收 Agent GC Agent 周期性运行、对抗代码库熵增的后台 Agent
架构约束 Architectural Constraints 通过 Linter + 测试机械执行的架构规则
可撕裂原则 Rippable Harness 随模型能力提升主动删除不再需要的 Harness 组件
教学时刻 Teaching Moment 错误信息内嵌修复指引的设计模式
相关推荐
Thomas.Sir3 小时前
第十一章:RAG知识库开发之【RAG 的缺陷分析与优化:从入门到实践的完全指南】
python·ai·rag·缺陷分析·效果评估
Agent产品评测局3 小时前
能源行业自动化解决方案选型,安全与降本双提升:2026企业级智能体选型指南
运维·人工智能·安全·ai·chatgpt·自动化
yuhulkjv3355 小时前
豆包导出的Excel公式失效
人工智能·ai·chatgpt·excel·豆包·deepseek·ai导出鸭
OPHKVPS15 小时前
Anthropic 为 Claude Code 推出“自动模式”:AI 编码工具迈向更高自主性
网络·人工智能·安全·ai
yyk的萌15 小时前
AI 应用开发工程师基础学习计划
开发语言·python·学习·ai·lua
程序员鱼皮19 小时前
鱼皮 AI 导航网站,突然起飞了!
人工智能·ai·程序员·编程·ai编程
俊哥V20 小时前
每日 AI 研究简报 · 2026-04-02
人工智能·ai