已发布资料基础官方资料 + 个人实践
·15 分钟AI 工具实践
文章/AI 与智能体

从 Context Engineering 到 Graph Engineering:读懂 AI Agent 的四层工程

用一个博客后台 Bug 示例贯穿 Context、Harness、Loop 与 Graph Engineering:解释模型看见什么、如何获得工具与边界、怎样反复行动并验证,以及何时才需要把多个局部循环组织成工作图。

文章目录
  1. 一分钟概览
  2. 先用一位新同事来理解
  3. 1. 先从最小单位开始:一次模型调用
  4. 2. Context Engineering:决定模型此刻看见什么
  5. 2.1 Prompt 只是 Context 的一个子集
  6. 2.2 好 Context 不是“越多越好”
  7. 2.3 Context Engineering 解决不了什么
  8. 3. Harness Engineering:给模型一套可行动的工作环境
  9. 3.1 Harness 不是工具数量
  10. 3.2 Context 与 Harness 的关系
  11. 3.3 Harness 仍然不等于任务完成
  12. 4. Loop Engineering:让行动获得反馈并收敛
  13. 4.1 一个可收敛的 Bug 修复 Loop
  14. 4.2 四种看似在循环、实际没有进展的情况
  15. 4.3 Loop Engineering 解决不了什么
  16. 5. Graph Engineering:组织多个局部 Loop
  17. 5.1 Graph 不是“多开几个 Agent”
  18. 5.2 Graph 与 Loop 的准确关系
  19. 6. 把四层放回同一张系统图
  20. 7. 同一个 Bug,四层分别做了什么
  21. 只有 Prompt
  22. 加入 Context
  23. 放进 Harness
  24. 运行 Loop
  25. 是否升级 Graph
  26. 8. Agent 失败时,先诊断哪一层
  27. 症状一:回答偏题、遗漏约束、引用旧版本
  28. 症状二:知道该做什么,却无法复现或验证
  29. 症状三:改一次就停,或者反复试却不收敛
  30. 症状四:多个子任务互相覆盖,合并后才发现冲突
  31. 症状五:信息、工具、循环和结构都合理,结果仍不稳定
  32. 9. 三种任务,应该停在哪一层
  33. 10. 四个可以直接复用的最小模板
  34. 10.1 Context Packet
  35. 10.2 Harness Checklist
  36. 10.3 Loop Contract
  37. 10.4 Graph Upgrade Questions
  38. 11. 五个最常见的概念误区
  39. 误区一:Context Engineering 就是长 Prompt
  40. 误区二:接入 MCP 就完成了 Harness Engineering
  41. 误区三:Agent 多调用几次工具就是可靠 Loop
  42. 误区四:Graph Engineering 必然等于多 Agent
  43. 误区五:层级越高,系统越先进
  44. 12. 20 分钟练习:给自己的任务画四层地图
  45. 第一步:只写 Context
  46. 第二步:画 Harness 边界
  47. 第三步:写 Loop Contract
  48. 第四步:尝试不使用 Graph
  49. 13. 收藏清单
  50. 参考资料
  51. 官方资料
  52. 延伸说明
阅读提要

用一个博客后台 Bug 示例贯穿 Context、Harness、Loop 与 Graph Engineering:解释模型看见什么、如何获得工具与边界、怎样反复行动并验证,以及何时才需要把多个局部循环组织成工作图。

#Context Engineering#Harness Engineering#Loop Engineering#Graph Engineering#Agent

最近半年,围绕 AI Agent 出现了越来越多带有 Engineering 的词:

text
Prompt Engineering
Context Engineering
Harness Engineering
Loop Engineering
Graph Engineering

单独看每个词都不难,放在一起却很容易混乱:

  • Context Engineering 是不是把 Prompt 写得更长?
  • Harness 是一个新框架,还是 Agent 外面的工具箱?
  • Loop 是让模型不停重试吗?
  • Graph 出现以后,单 Agent 和 Loop 是否已经过时?

我的理解恰好相反:这些概念真正有用的地方,不是创造了一条追逐新名词的路线,而是帮助我们定位 Agent 到底缺了哪一层。

这篇文章是一篇前置概念课。它不会深入讨论状态所有权、并发隔离和图调度算法,而是先建立一张基础地图:

Context 决定模型这一刻能看见什么;Harness 决定它能在什么环境里行动;Loop 决定行动如何持续并收敛;Graph 决定多个局部循环如何协作。

为了避免停留在定义上,全文会反复使用一个基于此前博客后台现象简化出的例子。它用于解释系统分层,不复盘或虚构当时的具体根因:

博客后台的“分类”下拉框没有选项,请让 Codex 找到原因并修好。

我们会逐层观察:只给一句 Prompt 会发生什么,补充 Context 有什么变化,Harness 怎样让模型真正动手,Loop 如何完成验证,最后为什么这个任务通常根本不需要 Graph。

项目说明
内容类型AI Agent 基础概念与系统原理
适合读者会使用 ChatGPT、Codex 或 Claude,但还分不清 Context、Harness、Loop 和 Graph 的读者
前置要求不要求会写 Agent 框架,不要求了解 LangGraph
阅读时间速读约 8 分钟,完整阅读约 15-20 分钟
跟做时间约 20-30 分钟
可带走产物Agent 四层诊断卡、Context Packet、Loop Contract 和升级决策表
资料核对日期2026-07-24
事实范围OpenAI、Anthropic 与 LangGraph 官方资料用于解释已有实现;四层模型是本文的教学整理,不是行业标准

先说明边界

Context EngineeringHarness Engineering 已经进入多家模型厂商的工程讨论;Loop EngineeringGraph Engineering 的使用方式仍更偏社区实践标签。不同团队会把其中一部分合并到“Agent architecture”“orchestration”或“runtime”里。

因此,本文提供的是一张便于理解和排错的地图,不是在宣布统一术语。

一分钟概览

如果只记住六句话,可以保存下面这些:

  1. 模型不会自动知道你的项目;它只能根据当前推理请求中可见的信息做判断。
  2. Prompt 是 Context 的一部分,Context 还包括规则、文件、历史、工具说明、实时证据和中间状态。
  3. Harness 不是更长的 Prompt,而是围绕模型搭建的运行环境、工具接口、权限边界、状态与反馈设施。
  4. Loop 是 Harness 中反复发生的“推理 → 调工具 → 读取结果 → 再判断”,必须有验证和停止条件。
  5. Graph 不会替代 Loop;它负责组织多个 Agent、函数、验证器和人工节点,其中很多节点内部仍在运行 Loop。
  6. 遇到失败先判断缺的是信息、行动能力、反馈闭环还是协作结构,不要一开始就增加 Agent 数量。

图 1:AI Agent 的四层工程图 1:AI Agent 的四层工程

图 1:四层分别增加信息、执行、时间和拓扑控制。它们是包含与协作关系,不是四代互相淘汰的技术。移动端可点击图片放大。

先用一位新同事来理解

如果把模型想成一位刚加入项目、能力不错但不了解现场的新同事:

  • Model 是他的通用知识与推理能力;
  • Context 是这次任务摆在桌上的需求、代码、规范和现场证据;
  • Harness 是电脑、账号、工具、权限、工作区和反馈系统;
  • Loop 是“查看现状、动手、检查结果、继续修正”的工作节奏;
  • Graph 是多人协作时的职责、交接、依赖和审批关系。

新同事再聪明,没有项目材料也会猜;材料再完整,没有工具和权限也只能提建议;能动手但从不检查,就会把半成品当成完成;只有任务真的需要多人分工时,才值得建立更复杂的协作图。

全文可以先用两个简化公式定位:

text
Agent ≈ Model + Context + Tools + Loop + Guardrails

Graph ≈ Nodes(Agent / Function / Human)
      + Edges + Shared State + Routing + Gates

公式不是框架定义,只是提醒我们:Agent 已经是模型与运行系统共同形成的行为;Graph 又是在更高一层组织多个执行单元。

1. 先从最小单位开始:一次模型调用

理解这四层之前,要先把“模型”和“Agent”分开。

一次简化的模型调用可以写成:

text
输入信息 + 模型参数 → 推理 → 文本或工具调用

模型的参数里包含训练得到的通用能力,但它不会凭空知道:

  • 你的博客源码放在哪个目录;
  • 当前分支是否有未提交修改;
  • “分类下拉为空”对应哪个组件;
  • 浏览器控制台刚刚报了什么错;
  • 项目规定不能直接修改生产数据库;
  • 上一次工具调用到底返回了什么。

这些都必须通过当前请求、可访问环境或工具结果进入它的可见范围。

这里有一个常被忽略的事实:Agent 应用可以保存会话和文件,模型本身每次做判断时,仍然只能使用这一次推理实际收到的上下文。

OpenAI 在拆解 Codex agent loop时展示了这个过程:Harness 先组织 instructions、工具定义、用户输入、环境信息和历史结果,再把它们发送给模型;模型要求调用工具后,Harness 执行工具,把结果追加到后续输入,再次请求模型。

所以,模型能力很重要,但“这一轮到底给它看了什么”同样重要。这就是 Context Engineering 的入口。

2. Context Engineering:决定模型此刻看见什么

Anthropic 对 Context Engineering 的定义可以概括为:为模型的下一步推理,策划和维护一组最合适的信息。它不是简单地把所有资料塞进上下文窗口,而是持续做选择。

2.1 Prompt 只是 Context 的一个子集

用户输入:

text
修复博客后台分类选择没有选项的问题。

这是 Prompt,但它还不是一份足够的工作上下文。

一个编码 Agent 在执行任务时看到的 Context 可能包括:

Context 组成在这个 Bug 中的例子
系统与项目规则不能覆盖用户现有修改;修改后必须运行 Lint
用户目标恢复分类下拉选项
当前环境工作目录、操作系统、当前分支
项目知识AGENTS.md、目录结构、数据模型
任务文件下拉组件、分类 API、表单状态代码
实时证据页面截图、控制台错误、网络请求响应
工具说明如何搜索文件、控制浏览器、运行测试
过程状态已排除哪些假设、刚修改了什么、测试是否通过

因此:

text
Context ≠ Prompt

Context = 指令 + 任务材料 + 项目知识 + 工具定义
        + 实时观察 + 历史结果 + 当前状态

2.2 好 Context 不是“越多越好”

上下文窗口有限,更重要的是注意力也有限。

把整个仓库、所有聊天记录和几十页规范一次性塞进去,会出现三个问题:

  1. 相关信息被淹没。 真正决定 Bug 的三段代码与数百个无关文件拥有相似的视觉权重。
  2. 旧信息与新事实冲突。 文档说分类来自静态配置,代码已经改成数据库查询。
  3. 过程噪声不断累积。 每次失败的完整日志都被保留,后续判断越来越困难。

所以 Context Engineering 的核心动作不是“添加”,而是下面这组循环:

text
选择 → 组织 → 注入 → 使用 → 压缩或丢弃 → 再补充

图 2:Context Packet 的组成与过滤图 2:Context Packet 的组成与过滤

图 2:Context Packet 不是资料仓库的副本,而是为“下一步决定”筛选出的最小充分信息。

我会用五个问题检查一份 Context:

问题判断标准
相关吗它会改变下一步判断吗?
够用吗是否缺少做出决定所需的关键证据?
新鲜吗它描述的是当前代码和当前状态吗?
可信吗是运行结果、官方规范,还是未经验证的猜测?
节省吗能否用摘要、索引或按需读取代替整份注入?

2.3 Context Engineering 解决不了什么

即使把相关组件、API 响应和错误日志都给模型看,它仍然可能只能告诉你:

“可能是请求没有触发,建议检查 useEffect 的依赖。”

它还没有真正打开文件、修改代码、运行测试或重新操作浏览器。

Context 让模型看得更清楚,但不自动给它手、工作台和安全边界。

这就进入 Harness Engineering。

3. Harness Engineering:给模型一套可行动的工作环境

Harness 原本就有“把能力连接、约束并投入使用的装置”这一含义。在 Agent 语境中,可以把它理解成模型外面的运行系统。

OpenAI 的 Harness Engineering 实践强调了几类工作:让仓库知识对 Agent 可读,提供可以直接使用的工具和可观察信号,用规则与测试机械地约束边界,并把失败反馈重新编码进环境。

一个简化 Harness 通常包含:

text
Context Builder   选择本轮给模型什么
Tool Registry     定义模型能调用什么
Executor          真正执行命令、浏览器操作或 API 调用
Sandbox/Approval  限制能读写哪里,何时需要人工批准
State Store       保存会话、计划、中间产物和检查点
Observation       把文件、日志、截图和测试结果返回给模型
Compaction        控制长任务中的上下文增长
Tracing/Evals     记录过程,并判断系统是否真的变好

图 3:Agent Harness 的剖面图 3:Agent Harness 的剖面

图 3:模型负责在当前 Context 下做决定;Harness 负责准备输入、执行动作、限制权限并返回真实观察。

3.1 Harness 不是工具数量

给 Agent 接入 100 个工具,不等于 Harness 设计得好。

一个有用的工具至少要做到:

  • 名称和描述能让模型判断什么时候调用;
  • 输入输出有稳定结构,而不是难以解析的一大段文本;
  • 失败时返回可恢复的信息;
  • 权限范围明确;
  • 结果能再次进入 Context;
  • 高风险动作不能只靠模型“自觉谨慎”。

回到分类下拉 Bug,一个最低可用的编码 Harness 可能只需要:

text
读文件、搜索代码、修改文件
运行开发服务器和测试
控制浏览器并查看页面
读取控制台与网络请求
限制工作目录
保留 Git diff

工具不算多,但已经形成了完整工作面。

3.2 Context 与 Harness 的关系

这两个概念会重叠,因为 Harness 负责构建和维护 Context。

可以这样区分:

text
Context Engineering 关心:下一次判断应该看见什么?
Harness Engineering 关心:谁来准备这些信息,怎样行动,边界在哪里?

例如:

  • AGENTS.md 的内容属于 Context;
  • Harness 负责发现并按作用域加载 AGENTS.md
  • 测试输出属于 Context;
  • Harness 负责执行测试、截断噪声并返回退出码;
  • 浏览器截图属于 Context;
  • Harness 负责启动页面、控制浏览器和保存截图。

3.3 Harness 仍然不等于任务完成

现在 Agent 已经有工具了,但如果运行方式是:

text
看一眼代码 → 修改一个文件 → 宣布完成

它依然可能没有复现 Bug,也没有确认修复是否有效。

工具只是能力。要让能力围绕目标持续工作,还需要 Loop。

4. Loop Engineering:让行动获得反馈并收敛

Agent Loop 是 Agent 最核心的运行机制之一。

OpenAI 对 Codex Loop 的简化描述是:

text
用户输入
  ↓
模型推理
  ↓
输出最终回答,或请求工具调用
  ↓
Harness 执行工具
  ↓
工具结果进入新的模型输入
  ↓
继续推理

这个过程可能在一次用户对话回合中重复很多次。

但从工程角度看,“模型还在调用工具”只是最小循环。一个可靠的任务 Loop 还应该有目标、状态、验证和停止条件:

text
Observe → Decide → Act → Observe → Verify
                         ↑           ↓
                         └── Retry ──┘
                               ↓
                         Stop / Escalate

图 4:Agent Loop 的执行与停止机制图 4:Agent Loop 的执行与停止机制

图 4:Loop 的价值不在“多跑几轮”,而在每轮都获得新证据,并能够通过、重试或升级给人工。

4.1 一个可收敛的 Bug 修复 Loop

分类下拉问题可以被组织成:

  1. Observe: 在浏览器复现下拉为空,记录控制台和网络请求。
  2. Decide: 根据证据定位数据是否没有请求、请求失败或渲染被过滤。
  3. Act: 做最小修改。
  4. Observe: 重新加载页面,读取新的请求与 DOM。
  5. Verify: 分类选项可见;已有分类能正确回显;Lint 与构建通过。
  6. Stop: 验收条件全部满足。
  7. Retry: 若失败,只根据新证据修正假设。
  8. Escalate: 需要生产数据、账号权限或产品决策时交还给人。

这里最重要的不是步骤数量,而是每轮必须产生信息增量。

4.2 四种看似在循环、实际没有进展的情况

重复同一个猜测。

没有新增日志、文件或测试结果,只是换一种说法再次尝试。

用作者身份自我验收。

同一段上下文刚写完代码,马上说“看起来没问题”,却没有运行真实检查。

没有停止条件。

即使验收已经通过,仍继续重构和润色;或者连续失败后也不升级给人。

把动作次数当成质量。

调用了 30 次工具不代表比 5 次更可靠。关键是证据是否减少了不确定性。

因此,一个简单的 Loop Contract 应该提前写出:

yaml
goal: 分类下拉恢复可选项
observe:
  - 页面 DOM
  - 控制台错误
  - 分类接口响应
act:
  - 只修改与根因直接相关的文件
verify:
  - 至少出现一个分类选项
  - 编辑已有文章时分类正确回显
  - lint 和 build 通过
stop:
  success: 所有 verify 条件通过
  failure: 连续两轮没有新证据
escalate:
  - 需要生产数据库权限
  - 现有产品规则互相冲突

4.3 Loop Engineering 解决不了什么

单 Loop 很适合目标明确、上下文相对统一、修改范围可控的任务。

但如果任务变成:

同时检查前端表单、后台分类 API、历史数据迁移和线上权限配置;各部分要独立验证,最后才能发布。

一个 Agent 把所有内容塞在同一段历史里,会开始面临:

  • 不同子任务互相污染上下文;
  • 有些工作可以并行,却被迫串行;
  • 同一个角色既实现又验收;
  • 发布必须等待多个真实依赖;
  • 某个分支失败后,不清楚应该重跑哪里。

这不是“再循环几轮”就一定能解决的问题。此时才需要考虑 Graph。

5. Graph Engineering:组织多个局部 Loop

Graph Engineering 关注的不再只是一个 Agent 下一步做什么,而是:

text
有哪些独立职责?
它们之间的真实依赖是什么?
每个节点读取和写入什么状态?
谁负责验证?
失败后重跑哪个局部?
哪个动作必须等待人工批准?

一张 Agent 工作图可以包含:

  • 会调用模型和工具的 Agent 节点;
  • 只执行脚本的确定性函数;
  • 测试、静态分析和策略校验器;
  • 等待人工判断的批准节点;
  • 多个节点之间传递的结构化状态;
  • 节点内部各自运行的 Loop。

图 5:Graph 如何组织多个局部 Loop图 5:Graph 如何组织多个局部 Loop

图 5:Graph 增加的是职责与依赖结构。研究、实现和验证节点可以各自有局部 Loop,发布仍由明确闸门控制。

5.1 Graph 不是“多开几个 Agent”

假设我们把分类 Bug 拆成三个 Agent:

text
Agent A:检查前端
Agent B:检查 API
Agent C:检查数据库

如果三个 Agent:

  • 收到完全相同的模糊任务;
  • 不知道彼此输出格式;
  • 下游不消费上游结果;
  • 最后由第四个 Agent随意拼接;

这只是并发聊天,不是一张工程化工作图。

Graph 至少要把依赖写清楚:

text
Reproduce
   ├── Frontend diagnosis ─┐
   ├── API diagnosis ──────┼── Root-cause verifier
   └── Data diagnosis ─────┘
                              ↓
                         Minimal fix
                              ↓
                      Browser + CI verify
                              ↓
                         Human release gate

而且,这个图是否值得存在,要由任务决定。

对于一个只涉及前端状态初始化的小 Bug,单 Agent Loop 通常更简单、更快。只有当检查确实独立、上下文需要隔离、依赖必须显式管理或风险需要独立验证时,Graph 才开始提供净收益。

5.2 Graph 与 Loop 的准确关系

可以把二者想成时间控制与结构控制:

text
Loop:同一个职责怎样随时间反复行动,直到停止。
Graph:多个职责怎样按依赖、路由和权限互相连接。

所以,不要把二者理解成:

text
错误:Graph 比 Loop 更高级,因此应该取代 Loop。

更准确:
Graph = 节点与依赖的组织结构
      + 节点内部的局部 Loop
      + 确定性函数、验证器和人工节点

简单任务完全可以只有一个 Loop,没有 Graph;Graph 中也并非每个节点都需要模型。

6. 把四层放回同一张系统图

现在可以给四层一个更精确的位置:

主要控制对象核心问题常见产物典型失败
Context信息下一步该看见什么Prompt、Context Packet、索引、摘要、记忆缺信息、信息过期、噪声过多
Harness执行环境怎样安全地观察和行动工具、Sandbox、Approval、状态、Trace、Evals工具不可用、权限失控、结果不可读
Loop时间与反馈怎样持续行动并停止状态机、重试、验证器、停止条件无限重试、无验证、没有信息增量
Graph职责与依赖多个局部过程怎样协作节点、边、共享状态、路由、人工闸门假依赖、写入冲突、并发污染、成本失控

这四层不是严格的代码目录。实际框架常把它们混在一起:

  • Codex CLI 的 Harness 内部实现 Agent Loop,也管理 Context;
  • LangGraph 用 State、Node 和 Edge 表示工作流,但每个节点内部仍可调用一个完整 Agent;
  • Claude Code 的工具、权限、Skills 和上下文压缩属于 Harness 的不同部分;
  • 一个普通脚本也可以成为 Graph 节点,不需要模型参与。

文章把它们拆开,是为了排错时能问对问题。

7. 同一个 Bug,四层分别做了什么

下面把分类下拉 Bug 从头走一遍。

只有 Prompt

text
修复分类下拉没有选项的问题。

模型只能依据常见经验猜测。输出可能合理,但没有项目证据。

加入 Context

text
目标:恢复分类下拉选项。
页面:/admin/posts
现象:下拉展开后只有搜索框,没有选项。
相关材料:截图、表单组件、分类接口响应、项目规则。
验收:已有分类可选择,编辑文章能正确回显。

模型可以形成更贴近项目的判断,但仍可能只给建议。

放进 Harness

Agent 现在能够:

  • 打开真实页面;
  • 搜索组件和 API;
  • 读取请求结果;
  • 修改工作区文件;
  • 运行 Lint 和构建;
  • 在越权或生产操作前请求批准。

模型从“顾问”变成能在受控环境中行动的执行者。

运行 Loop

Agent 按“复现 → 定位 → 修改 → 重新加载 → 验收”循环,直到通过或触发停止条件。

任务开始具备闭环。

是否升级 Graph

先问:

  • 是否真的有多个能独立推进的子任务?
  • 是否需要上下文隔离?
  • 是否存在必须等待的真实依赖?
  • 是否需要独立验证或人工发布权?

如果答案都是否,停在单 Loop 就够了。

这一步很关键:四层地图不是让你每次都把系统搭到第四层,而是帮助你停在刚好够用的位置。

8. Agent 失败时,先诊断哪一层

看到 Agent 失败,很多人的第一反应是换模型、重写 Prompt 或增加 Agent。可以先用下面这张诊断卡。

症状一:回答偏题、遗漏约束、引用旧版本

优先检查 Context:

  • 关键文件是否真的进入可见范围;
  • 指令是否互相冲突;
  • 当前状态是否被旧对话淹没;
  • 是否应该按需检索,而不是一次加载所有资料。

症状二:知道该做什么,却无法复现或验证

优先检查 Harness:

  • 是否缺浏览器、日志、数据库只读查询或测试工具;
  • 工具输出是否稳定可解析;
  • 工作目录和权限是否正确;
  • Agent 是否能看到真实运行状态。

症状三:改一次就停,或者反复试却不收敛

优先检查 Loop:

  • 是否有明确 Verify;
  • 每次失败是否带来新证据;
  • 是否设置最大轮次、超时和成本;
  • 什么时候应该停止并交还给人。

症状四:多个子任务互相覆盖,合并后才发现冲突

优先检查 Graph:

  • 边是否代表真实数据依赖;
  • 节点是否有清晰输入输出;
  • 是否有唯一写入者;
  • 验证器是否独立;
  • 并行工作区是否隔离。

症状五:信息、工具、循环和结构都合理,结果仍不稳定

这时才更有理由检查:

  • 模型是否具备任务所需能力;
  • 任务是否本身缺少可判定标准;
  • 环境是否存在不可观察的外部状态;
  • 是否需要人工专业判断。

框架不能弥补不可判定的问题,更多 Agent 也不会自动创造事实。

9. 三种任务,应该停在哪一层

任务建议层级原因
总结一篇已经提供全文的文章Prompt + Context输入固定,不需要外部行动
修复一个可本地复现的前端 BugContext + Harness + 单 Loop需要读代码、改文件、运行与验证
跨前端、后端和数据迁移完成一次高风险发布Graph + 多个局部 Loop + Human Gate存在独立职责、真实依赖和不可逆动作

还可以用一个更保守的升级顺序:

text
一次模型调用
  ↓  缺少任务信息
补 Context
  ↓  需要观察或改变外部世界
加 Harness
  ↓  需要根据结果继续行动
设计 Loop
  ↓  出现多个独立职责、依赖或治理边界
设计 Graph

每次升级都会带来成本:

升级新收益新成本
更多 Context判断更有依据Token、噪声、过期信息
更强 Harness可以真实行动权限、安全、维护、可观测性
更长 Loop可以纠错和验证时间、费用、漂移、停止困难
更复杂 Graph并行、隔离、治理调度、状态、合并、调试复杂度

如果说不清新增收益,就先不要升级。

10. 四个可以直接复用的最小模板

10.1 Context Packet

markdown
# Task Context

## Goal
最终要改变什么?

## Current State
现在观察到了什么?

## Relevant Sources
哪些文件、日志、接口或文档直接影响判断?

## Constraints
哪些内容不能改?权限和风险边界是什么?

## Acceptance
用什么真实信号证明完成?

## Open Questions
还缺哪些信息?哪些只是猜测?

10.2 Harness Checklist

markdown
- [ ] Agent 能读取必要输入
- [ ] Agent 能观察真实运行状态
- [ ] 工具输入输出稳定且可解析
- [ ] 写入范围受到限制
- [ ] 高风险动作需要批准
- [ ] 每个动作都能返回结果
- [ ] 日志和 Trace 不泄露敏感信息
- [ ] 失败可以恢复或安全停止

10.3 Loop Contract

markdown
Goal:
Observe:
Decide:
Allowed Actions:
Verify:
Retry With New Evidence:
Success Stop:
Failure Stop:
Escalate To Human:
Budget:

10.4 Graph Upgrade Questions

markdown
1. 是否有至少两个真正独立的职责?
2. 并行是否能带来可测量收益?
3. 下游是否真的消费上游输出?
4. 是否需要隔离上下文或工作区?
5. 是否需要独立验证器?
6. 是否存在必须由代码或人工掌握的权力?
7. 单 Agent Loop 的基线问题是什么?

如果第 1、3、7 题都答不清楚,通常还不适合升级 Graph。

11. 五个最常见的概念误区

误区一:Context Engineering 就是长 Prompt

长 Prompt 只是更多文本。Context Engineering 还包括按需检索、状态维护、来源选择、工具结果、压缩和遗忘。

误区二:接入 MCP 就完成了 Harness Engineering

MCP 可以提供工具和资源接口,但 Harness 还要处理执行、权限、状态、反馈、停止、日志和评估。连接能力只是其中一部分。

误区三:Agent 多调用几次工具就是可靠 Loop

如果没有验收标准、预算和信息增量,多轮只是更昂贵的随机游走。

误区四:Graph Engineering 必然等于多 Agent

Graph 节点可以是普通函数、测试、检索、人工审批或单个 Agent。很多可靠工作图会刻意把确定性判断留给代码。

误区五:层级越高,系统越先进

一个稳定的单 Loop 往往比一张依赖不真实、状态不清楚的多 Agent 图更可靠。复杂度只有在解决具体约束时才有价值。

12. 20 分钟练习:给自己的任务画四层地图

选一个你最近真的会交给 Codex 或 Claude Code 的任务,例如:

text
给博客增加文章搜索
修复登录后的跳转问题
整理一份带引用的行业调研
把重复发布流程做成 Skill

然后完成四步。

第一步:只写 Context

列出目标、当前状态、相关资料、约束和验收标准。

删除所有“看起来有用、但不会改变下一步判断”的材料。

第二步:画 Harness 边界

写出 Agent 必须观察和调用的工具,以及明确禁止的操作。

至少保留一个真实验证信号。

第三步:写 Loop Contract

明确每一轮怎样获得新证据,什么情况通过、失败或升级给人。

把最大轮次或时间预算写出来。

第四步:尝试不使用 Graph

先问单 Agent Loop 能否完成。

只有发现上下文隔离、真实并行、独立验证或权限治理需求时,才画节点和边。

练习完成后,你应该能用一句话解释自己的系统:

text
我给 Agent 的 Context 是 ______;
Harness 允许它 ______,禁止它 ______;
Loop 通过 ______ 判断继续或停止;
目前不需要 / 需要 Graph,因为 ______。

如果这四个空都能填清楚,概念就已经从名词变成了设计判断。

13. 收藏清单

最后把全文压缩成一张检查表。

Context

  • 模型是否看到了完成下一步所需的最小充分信息?
  • 信息是否相关、当前、可信,并且没有被噪声淹没?

Harness

  • Agent 是否有观察、行动和验证所需的工具?
  • 权限、Sandbox、批准和敏感信息边界是否明确?

Loop

  • 每轮是否产生新证据?
  • 是否有验证、预算、停止和人工升级条件?

Graph

  • 是否存在真实独立职责和依赖?
  • 节点输入输出、写入权、验证器和人工闸门是否清楚?

总原则

text
缺信息,先修 Context。
不能行动,检查 Harness。
不能收敛,设计 Loop。
协作失控,再考虑 Graph。

如果你已经能分清这四层,下一步可以阅读更深入的《Graph Engineering:从单 Agent 循环到可验证的工作图》。那篇文章会继续讨论真实依赖、Diamond Pattern、共享状态、独立验证器、预算、并发隔离和人工闸门。

参考资料

官方资料

延伸说明

  • 本文四层模型是为了教学和故障定位做的归纳,不是上述厂商共同发布的标准。
  • Graph Engineering 的术语来源、社区讨论和框架映射,已经在进阶篇中单独整理。