Agent 工程别再混为一谈:Harness、Loop、Graph 三层架构到底怎么分?

Agent 工程别再混为一谈:Harness、Loop、Graph 三层架构到底怎么分?
导读
很多团队把 Agent Harness、Loop 和 Graph 混成了同一个概念。本文基于 X Article《Agent Harness Engineering vs. Loop Engineering vs. Graph Engineering》,用一个清晰的三层模型解释它们分别解决什么问题:Harness 负责环境与运行基础设施,Loop 负责重复执行和反馈验证,Graph 负责把流程拓扑、分支、汇合与状态迁移显式化。真正可用的 Agent,不是只换一个更强的模型,而是把环境、反馈和流程一起工程化。

🧭 先给结论:环境、反馈、流程

Agent 工程里最容易出现的误解,是把所有“让 Agent 更可靠”的代码都叫成一个东西。

有人把工具调用叫 Agent Loop,有人把多步骤流程画成 Graph,也有人把系统提示词和记忆模块叫 Harness。它们确实都围绕同一个模型,都可能包含“循环”,也都会影响最终可靠性,但解决的是不同层级的问题。

可以先记住这组三句话:

  • Harness Engineering:搭建模型运行的机器;
  • Loop Engineering:设计重复工作与反馈验证的循环;
  • Graph Engineering:把工作流的拓扑结构显式化。

更简洁地说:

Harness 管环境,Loop 管反馈,Graph 管流程。

Agent 工程别再混为一谈:Harness、Loop、Graph 三层架构到底怎么分?

图:原文用“environment → feedback → flow”概括三层工程关系。

这三个词目前还没有完全统一的行业标准。尤其是 Loop Engineering,它是实践者在 2026 年逐渐使用的新说法;Graph Engineering 也更接近一种实用工程方法,而不是一个边界严格的学术领域。

但这种区分非常有用,因为它能防止“Agent”这个大词掩盖真正的设计问题。

🏗️ Harness Engineering:模型之外的整个工作环境

一个裸的语言模型只能根据输入生成输出。它不会天然拥有以下能力:

  • 创建和修改文件;
  • 维护一个项目的长期状态;
  • 运行测试套件;
  • 查看浏览器页面;
  • 调用企业 API;
  • 遵守审批规则;
  • 重启失败的任务;
  • 在多个会话之间记住进度。

这些能力来自模型所处的环境,也就是 Harness。

在 LangChain 的定义里,Agent 可以理解为“模型 + Harness”,而 Harness 就是模型之外的代码、配置和执行逻辑。OpenAI Agents SDK 也从运行时角度描述了类似的核心:Runner 调用模型、执行工具调用、处理 handoff、携带状态,并且只有在真正达到终止条件时才停止。

Harness 通常包含什么?

一个严肃的 Agent Harness,至少会处理以下六类问题:

1. Context Injection:上下文注入

包括系统指令、检索结果、对话状态、技能、任务策略和权限规则。

2. Action Surfaces:行动接口

包括 API、浏览器、Shell、代码解释器、数据库和兼容 MCP 的工具。

3. Persistence:持久化

包括文件、检查点、会话、进度日志、Git 历史和长期记忆。

4. Execution Control:执行控制

包括超时、重试、预算、模型路由、子 Agent、审批门和并发控制。

5. Safety and Governance:安全与治理

包括权限、隔离、Allowlist、Secret 管理和人工授权。

6. Observability:可观测性

包括 Trace、工具输入输出、状态迁移、成本、延迟和评测结果。

Agent 工程别再混为一谈:Harness、Loop、Graph 三层架构到底怎么分?

图:Harness 不是一段循环代码,而是围绕模型的完整运行系统。

因此可以做一个很实用的判断:

把模型从架构图里拿掉之后,剩下的工具、数据访问、状态存储、沙箱、中间件、评估器、重试策略和 UI,基本都属于 Harness。

为什么 Harness 比提示词更重要?

两支团队使用同一个基础模型,最后效果可能完全不同。

一支团队给模型准备了干净的工具、稳定的工作区、受限的权限、可观察的状态和清晰的终止条件;另一支团队只给了一个模糊提示词和不稳定的 API 包装层。模型智力相同,但工作环境不同,结果当然也会不同。

这就是 Harness Engineering 的核心价值:它把模型能力转化成可重复运行的系统能力。

🔄 Loop Engineering:让 Agent 不要“一次回答就算完成”

每个会使用工具的 Agent,其实都带着一个小循环:

  1. 调用模型;
  2. 查看结果;
  3. 执行工具;
  4. 把观察结果输入模型;
  5. 重复,直到返回最终答案。

当工程师开始有意识地设计、叠加和管理这些循环时,就进入了 Loop Engineering。

它的重点不是“多写一个 while 循环”,而是回答几个问题:

  • 下一次循环由什么触发?
  • 循环的目标状态是什么?
  • 下一轮需要保留哪些信息?
  • Agent 可以改变什么、调用什么、花费多少?
  • 失败后应该提供什么反馈?
  • 什么条件下必须停止?

一个合格的 Loop 有七个部件

Trigger:触发器

可能是用户请求、定时任务、测试失败、新数据到达或评估器反馈。

Goal:目标

必须是一个具体的可判断状态,而不是“继续改进”这种模糊命令。

State and Memory:状态与记忆

下一轮需要知道什么?哪些内容不必重新播放?哪些中间结果需要持久化?

Action Policy:行动策略

Agent 可以修改什么、调用什么、委派什么任务,以及可以花费多少预算?

Evidence:证据

包括测试、Schema 校验、引用、Diff、指标或人工审核。

Feedback:反馈

反馈不能只是“失败了”,而要告诉 Agent 为什么失败、下一步可能修正什么。

Stopping Rule:停止规则

成功、预算耗尽、超时、不可恢复错误或需要人工升级,都应该是明确的终止条件。

不要围绕“自信”循环,要围绕“证据”循环

这是原文最值得记住的一句话:

不要让 Agent 围绕自信程度循环,要让它围绕证据循环。

“Agent 说自己完成了”不是停止条件。

更可靠的停止条件应该是:

  • 测试通过;
  • 链接可以访问;
  • Schema 校验通过;
  • 代码 Diff 符合预期;
  • 指标达到阈值;
  • 审核者确认交付。
Agent 工程别再混为一谈:Harness、Loop、Graph 三层架构到底怎么分?

图:一个典型的验证循环,会把模型产物交给外部检查器,而不是只听模型自己宣布成功。

验证循环、事件循环和改进循环

验证循环

Agent 创建一个产物,运行确定性检查或评估器,获得明确反馈;只有在证据失败时才继续修改。

事件驱动循环

当定时任务、Webhook 或新文档到达时唤醒 Agent。

改进循环

分析 Trace 和失败原因,修改指令或工具,再测试新版本是否确实更好。

这些循环的代价也必须计算:每多一个评估器、审查者或重试,就可能增加一次模型调用或工具执行。好的工程不是循环越多越好,而是在失败代价高于验证代价的地方增加循环。

🕸️ Graph Engineering:把“下一步能运行什么”画清楚

Loop 主要关心重复执行和反馈;Graph 关心的是工作流拓扑:当前节点完成后,哪个组件被允许运行?

在 Graph Engineering 中:

  • 节点代表步骤或组件;
  • 边代表允许的下一步;
  • 分支代表条件判断;
  • 汇合代表多路任务重新合并;
  • 状态迁移代表流程如何前进;
  • 受控循环代表哪些路径可以返回之前的节点。

这让流程从一段隐含在代码里的控制逻辑,变成可以检查、测试和审计的显式图结构。

Agent 工程别再混为一谈:Harness、Loop、Graph 三层架构到底怎么分?

图:Harness 提供能力,Graph 路由工作,Loop 负责在条件不足时重新执行。

一个研究报告 Agent 的例子

假设我们要构建一个研究报告 Agent,它可能包含这样的 Graph:

任务拆解
   ↓
并行检索多个来源
   ↓
来源质量筛选
   ↓
证据聚合
   ↓
草稿生成
   ↓
事实核查
   ↓
人工审核
   ↓
发布或退回修改

这里有三种不同的工程问题:

  • 浏览器、搜索工具、文档系统和权限属于 Harness;
  • 当来源不足或事实核查失败时重新检索,属于 Loop;
  • 并行检索、质量筛选、聚合和审核的先后关系,属于 Graph。

如果把这些都塞进一个大提示词,模型也许能在演示中完成任务,但流程很难审计;如果把所有问题都写成一个无限重试循环,又可能造成费用失控、状态污染和无法终止。

🧩 三层架构的区别,用一张表看懂

Agent 工程别再混为一谈:Harness、Loop、Graph 三层架构到底怎么分?

图:原文对三种方法的关注点、构建模块和主要风险进行对比。

维度
Harness Engineering
Loop Engineering
Graph Engineering
主要问题
Agent 在什么环境中运行?
如何持续工作并获得反馈?
下一步允许哪个节点运行?
核心对象
模型之外的运行时
受控的重复循环
有向图、节点和边
常见模块
工具、记忆、沙箱、权限、路由
触发器、目标、证据、反馈、停止条件
节点、边、分支、汇合、状态迁移
典型失败
模型无法访问能力、状态丢失、权限过大
无限重试、反馈不清、成本失控
路径不明确、死循环、状态难以追踪
最适合
搭建 Agent 平台和工作环境
让任务通过验证不断改进
编排复杂的多步骤工作流
主要风险
平台过于笨重或不透明
过度循环、成本和延迟上升
过度工程化、图复杂到难以维护

这张表也说明,三种工程方法不是互相替代关系,而是可以叠加:

Graph:决定流程怎么走
  ↓
Loop:决定失败后怎么反馈和重试
  ↓
Harness:提供工具、状态、权限和执行环境

实际系统里,它们通常是嵌套的。一个 Graph 节点内部可能运行一个 Loop;整个 Graph 又必须运行在 Harness 提供的环境中。

🧪 什么时候该用哪一种?

当 Agent 缺能力:先做 Harness

适合使用 Harness Engineering 的情况包括:

  • Agent 无法访问必要工具;
  • 无法回到上一次的进度;
  • 无法安全读取或写入文件;
  • 任务执行结果无法审计;
  • 不同环境下行为不一致;
  • 需要模型路由、权限管理、沙箱或人工审批。

如果问题是“Agent 根本没有能力完成任务”,增加重试循环通常无效,应该先补齐运行环境。

当 Agent 会做但经常失败:增加 Loop

适合使用 Loop Engineering 的情况包括:

  • 代码需要运行测试;
  • 文档需要检查链接和引用;
  • 数据需要经过 Schema 校验;
  • 结果需要评估器打分;
  • 任务会因为外部状态变化而重新触发;
  • 模型第一版结果经常需要修订。

这里的重点是给 Agent 提供可操作的反馈,而不是让它凭感觉继续思考。

当流程变复杂:使用 Graph

适合使用 Graph Engineering 的情况包括:

  • 有多个明确阶段;
  • 需要并行执行和最后汇合;
  • 不同条件进入不同分支;
  • 某些节点必须人工审批;
  • 任务可能回退到特定节点,而不是从头再来;
  • 不同团队需要共同维护流程。

如果流程只有两个简单步骤,硬画成复杂 Graph 反而会增加维护负担。

🧱 Harness 的具体边界:它不是“一个系统提示词”

很多 Agent 项目把系统提示词写得很长,就认为自己已经完成了 Harness。其实 Harness 的边界远大于 Prompt。

一个更完整的 Harness 还应该管理:

  • 上下文压缩;
  • 多会话状态;
  • 文件系统和 Git 历史;
  • 子 Agent 派生;
  • 模型切换;
  • 预算和限流;
  • 工具输入输出日志;
  • Secret 访问;
  • 权限和人工确认;
  • 任务恢复和重新投递。

例如,长时间、多会话的代码任务不能只依赖上下文压缩。更好的工作系统会创建初始化器、进度文件和 Git 历史,并要求每一轮增量完成工作。这样,即使进入新的上下文,Agent 仍然能知道已经完成了什么、还有什么没有完成。

这不是更好的 Prompt,而是更好的工作环境。

Agent 工程别再混为一谈:Harness、Loop、Graph 三层架构到底怎么分?

图:模型嵌入在更大的上下文、控制、行动、持久化和验证系统中。

🧠 从模型崇拜转向系统工程

这三个概念背后,其实是同一个趋势:Agent 的竞争越来越不只是基础模型竞争。

同一个模型,可以被放进完全不同的系统:

  • 一个系统给它完整工具和受限权限;
  • 一个系统给它可靠状态和清晰反馈;
  • 一个系统把流程拆成可审计的图;
  • 另一个系统只给它一个聊天框。

最终效果自然不同。

这并不是说基础模型不重要。模型决定了系统的能力上限,但 Harness、Loop 和 Graph 决定了有多少模型能力能够稳定兑现。

可以把最终效果粗略理解为:

Agent 可靠性
≈ 模型能力 × 环境质量 × 反馈质量 × 流程清晰度

这个公式不是严格的数学定律,但它提醒我们:任何一个乘数接近零,系统都会失效。

⚠️ 最常见的四种误区

误区一:把更长的 Prompt 当作 Harness

Prompt 只能描述规则,不能替代文件系统、权限、工具、持久化和可观测性。

误区二:把无限重试当作 Loop Engineering

没有目标、证据、预算和停止规则的循环,只是故障放大器。

误区三:所有流程都画成 Graph

简单任务不需要复杂编排。Graph 的价值来自显式控制,而不是图本身的复杂程度。

误区四:让 Agent 自己判断“我完成了”

模型的自我评价不能替代外部证据。测试、校验、引用、Diff 和人工审核才是可靠的完成条件。

🛠️ 一个实用的落地顺序

如果团队准备把一个 Demo Agent 变成生产系统,可以按以下顺序推进:

第一步:先补 Harness

确认模型能访问什么工具、读写哪些数据、使用哪些权限、如何保存状态,以及失败后如何恢复。

第二步:再补 Evidence

为任务定义可验证的完成标准,例如测试通过、JSON 合法、引用可访问、指标达到阈值。

第三步:围绕证据设计 Loop

只有在证据失败时继续循环,并把失败原因压缩成下一轮可执行的反馈。

第四步:把复杂流程显式化为 Graph

当任务出现分支、并行、汇合、人工审批或回退时,使用节点和边表达流程。

第五步:最后做成本与延迟优化

减少无效重试,设置预算和超时,按任务选择模型,必要时把确定性步骤从模型中移到普通代码里。

🏁 结语:可靠 Agent 的核心不是“更会说”,而是“更能完成”

Harness、Loop 和 Graph 三个概念,实际上是在回答三个不同问题:

  1. 模型有什么能力可以使用?——这是 Harness;
  2. 结果不好时如何继续变好?——这是 Loop;
  3. 整个工作流下一步怎么走?——这是 Graph。

把三者混在一起,系统会显得“很 Agent”,但很难解释、测试和维护;把三者分开,工程团队就能更准确地定位问题:

  • 是环境缺能力?
  • 是反馈不充分?
  • 是流程没有显式定义?
  • 是停止条件不清楚?
  • 还是权限和状态管理出了问题?

最终,一套生产级 Agent 架构大致可以这样理解:

Harness 提供环境,Loop 提供反馈,Graph 提供方向。

模型仍然是核心发动机,但真正决定它能否在文件、API、客户和生产代码上可靠工作的,是发动机周围那套被认真设计过的工程系统。

© 版权声明
THE END
喜欢就支持一下吧
点赞155 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片