Harness Engineering

前言:Harness Engineering 的诞生

作者 杨艺韬 · 3,464 字

一个令人不安的事实

2026 年,AI Agent 是整个软件行业投入最集中的方向之一。

Claude Code 已成为 Anthropic 增长最快的产品线;Cursor 被硅谷的工程师称为"最好的 AI 编辑器";Devin 声称能独立完成软件工程任务;AutoGPT 变体层出不穷;LangChain 的 Star 数突破 100,000。每一周,都有新的 Agent 产品发布,声称"会改变一切"。

但在这股热潮背后,有一个被刻意回避的事实:

绝大多数 Agent 项目在 demo 阶段惊艳全场,到生产环境就一地鸡毛。

数据会说话。这不是印象流,几家可以点名的机构给出了方向一致的数字:

三条数据的口径并不相同:联想/IDC 统计的是 POC 的转化率,Gartner 预测的是 agentic 项目的取消率,RAND 转述的是 AI 项目的整体失败率。它们不能相加,也不该互相印证成一个"行业失败率"。放在一起只说明一件事:从能跑到能上线之间,隔着一层系统性的东西。

为什么会这样?不是模型不够强。GPT-5、Claude Opus 4.5、Gemini 3、DeepSeek-R1 的能力已经远超两年前的想象。问题出在模型之外——出在"驾驭模型"的那一层工程上

我把这层工程叫做 Harness Engineering

什么是 Harness Engineering

Harness 的英文原意是"马具"——缰绳、马鞍、马镫的总和。一匹烈马再强壮,没有马具也骑不动。

大模型就是这匹烈马。它的原始能力惊人:能写代码、会推理、懂多语言、支持 toolcall。但把这些能力安全、可靠、可观测地组织成一个真实的产品——这不是模型能自己做到的事。它需要一整套工程。

这套工程至少涵盖 9 个维度

mindmap
  root((Harness<br/>Engineering))
    工具设计
      粒度决策
      接口稳定性
      错误边界
    提示词架构
      System Prompt 分层
      指令冲突消解
      prompt template 管理
    上下文工程
      有限 context 的高效利用
      历史对话压缩
      长文档分块
    状态与记忆
      短期 vs 长期
      session 状态机
      记忆检索
    权限与沙箱
      能做什么
      不能做什么
      隔离策略
    多 Agent 协调
      任务分解
      并发执行
      结果合成
    Human-in-the-Loop
      何时插入人类
      中断和恢复
      人机协作 UX
    可观测性
      决策追踪
      错误定位
      行为回放
    评估与测试
      成功率度量
      回归测试
      对抗性测试

这张图里每一个分支,都对应本专栏的一个或几个章节。它们没有一个是模型能自己解决的——全都是工程问题。

为什么叫 "Harness" 而不是 "Framework"

Framework(框架)这个词被用滥了。市面上每一个 LangChain、Semantic Kernel、LlamaIndex 都把自己叫 framework。但问题是:

Framework 是可替换的,Harness 是不可替换的。

你可以今天用 LangChain、明天切 LangGraph、后天换自研——framework 一换,一半代码要重写。但 Harness Engineering 讲的那些设计原则不会过时:

Framework 是工具,Harness Engineering 是方法论。前者帮你解决具体问题,后者帮你判断什么是正确的问题

为什么现在写这个专栏

本专栏的背景素材来自杨艺韬讲堂过去一年的系列源码专栏:

沿着这些专栏反向归纳,会发现一个反复出现的信号——Agent 工程这个领域的知识极度碎片化:

这个专栏试图填补这个空白:讲方法论,而不是讲某个框架

本专栏的材料来源

方法论必须有实例支撑。本专栏的素材来自四个真实项目:

项目 版本 代码规模 本专栏用途
Claude Code 2026.3.31 快照 ~38 万行 TS(src/.ts 实测 379997 行) 全专栏主要案例(工具、权限、记忆、编排)
LangGraph 1.1.6 ~6.1 万行 Py(libs/ 排除 tests 实测 61283 行) 状态机、中断、checkpointer 实现参考
LangChain langchain-core 1.2.26 系 ~14.7 万行 Py(libs/core+langchain+langchain_v1 排除 tests 实测 147303 行) 工具抽象、Agent 基础组件对比
OpenClaw 2026.3.x(开源项目) ~67 万行 TS(全仓实测,含测试与扩展) Provider 路由、热切换、Gateway 架构

口径说明:上表每个数字都注明了统计范围,因为"多少万行"离开范围就没有意义——含不含测试、含不含 vendor、含不含 partner 包,结论可以差出一倍。Python 侧两个数字可以这样复现:

# LangGraph
git clone https://github.com/langchain-ai/langgraph.git && cd langgraph
find libs -name '*.py' -not -path '*/tests/*' -print0 | xargs -0 wc -l | tail -1

# LangChain(checkout 到与《LangChain 设计与实现》同一基准快照)
git clone https://github.com/langchain-ai/langchain.git && cd langchain
git checkout langchain-core==1.2.26
find libs/core libs/langchain libs/langchain_v1 -name '*.py' -not -path '*/tests/*' -print0 | xargs -0 wc -l | tail -1

版本说明:LangChain 与 LangGraph 的 1.0 于 2025 年 10 月 17 日同日 GA。本专栏采用 1.x 分支,与《LangChain 设计与实现》专栏的基准快照保持一致;本专栏中出现的 StateGraphinterrupt/Commandlanggraph.storelangchain_core.* 等 API 均以 1.x 为准。涉及 0.x 时代的写法(如 AgentExecutor)只在讲历史演进时出现,并会明确标注。

Claude Code 是引用最多的案例——它是目前少数可以近距离观察的、复杂度足够高的生产级 Agent Harness,其工具系统、权限模型、记忆机制、多 Agent 协调的设计都极具参考价值。本专栏中引用的 Claude Code 行为、prompt、数据结构来自对其公开文档、官方博客、技术分享的研究,以及作者对其可观测行为(CLI 交互、工具调用模式、错误处理策略等)的工程还原;部分实现细节基于作者获得的源码快照进行分析,会在相关章节注明。

本专栏的八篇结构

全专栏 22 章(含前言),分成八篇:

graph TB
    subgraph "第一篇 · 开篇(ch00-01)"
        P0[ch00 前言<br/>你在读的这一章]
        P1[ch01 为什么是 Harness]
    end
    subgraph "第二篇 · 架构基础(ch02-04)"
        P2[ch02 架构模式]
        P3[ch03 Agent 主循环]
        P4[ch04 上下文工程]
    end
    subgraph "第三篇 · 工具工程(ch05-07)"
        P5[ch05 工具设计]
        P6[ch06 工具编排]
        P7[ch07 工具错误恢复]
    end
    subgraph "第四篇 · 提示词架构(ch08-10)"
        P8[ch08 Prompt 架构]
        P9[ch09 指令优先级]
        P10[ch10 Few-shot、CoT 与动态提示策略]
    end
    subgraph "第五篇 · 状态与记忆(ch11-13)"
        P11[ch11 短期记忆与上下文压缩]
        P12[ch12 长期记忆与知识管理]
        P13[ch13 多轮对话与会话状态机]
    end
    subgraph "第六篇 · 安全与权限(ch14-15)"
        P14[ch14 权限模型]
        P15[ch15 沙箱与隔离]
    end
    subgraph "第七篇 · 协调(ch16-17)"
        P16[ch16 多 Agent 协作]
        P17[ch17 Human-in-the-Loop]
    end
    subgraph "第八篇 · 生产化(ch18-21)"
        P18[ch18 评估与测试]
        P19[ch19 可观测性]
        P20[ch20 成本控制与性能优化]
        P21[ch21 设计模式总结]
    end
    P1 --> P2 & P3 & P4
    P4 --> P5 & P6 & P7
    P7 --> P8 & P9 & P10
    P10 --> P11 & P12 & P13
    P13 --> P14 & P15
    P15 --> P16 & P17
    P17 --> P18 & P19 & P20 & P21
    style P0 fill:#3b82f6,color:#fff,stroke:none
    style P21 fill:#10b981,color:#fff,stroke:none

八篇是一条自洽的工程 pipeline——从底层架构到顶层运营。你可以线性读完、也可以按问题驱动跳读。

每一章的写作节奏

本专栏每一章都按同一个节奏组织:

  1. 问题域:这一章解决的是什么工程问题?为什么它很难?
  2. 设计意图:理想的解法应该具备哪些特征?
  3. 真实系统的实现:Claude Code / LangGraph / OpenClaw 是怎么做的?为什么这样选?
  4. 可迁移的方法论:从具体实现提炼出来的、跨框架跨语言的工程原则

注意第 4 步——可迁移性是本专栏的核心承诺。具体代码会过时,但"工具粒度应该按最小可撤销操作设计"这样的原则不会过时。如果你读完一章只记住了某个 framework 的 API 调用,那我们都失败了。

读者画像

本专栏为以下几类人写:

你不需要是 Python/JavaScript 大神。但需要:

一个约定:重原则、轻代码

本专栏重方法论、轻具体框架。真实系统的分析难免会引用源码路径、字段名或版本号;这些细节仅用于理解设计意图,不是需要记忆的 API 规范。我会引用大量代码作为案例,但这些代码不是让你照抄——是让你理解"它为什么这样设计"。

这意味着:

当你关闭这个专栏,脑子里留下的应该是"Agent 系统应该怎么设计"的思维框架,而不是"具体某个 API 怎么用"的记忆。前者保值 10 年,后者保值 3 个月。

一次写作的诚实披露

这个专栏由我一个人写成,但它的素材来自无数前人的工作:

如果说这个专栏有什么独特价值,那就是把这些碎片连成一张完整的工程地图。地图上的每一块石头都不是我挖出来的,但地图是我画的。


起步

Agent 工程是一门年轻的学科。它的最佳实践还在快速演进。任何敢说"我已经把它搞明白了"的人都是骗子——包括我自己。本专栏试图捕捉的是当前阶段(2026 年)的最佳共识。五年后回头看,某些章节可能会显得幼稚。那没关系——好的方法论是阶梯,踩上去达到下一层后拆掉就好。

如果你读完这个专栏后觉得"我现在对 Agent 工程有了清晰的判断框架"——就是它的全部目标。

下面从第 1 章开始。


延伸阅读的推荐起点