老波|ClawHunt-爪寻AI · 2026年8月10日 17:30 · 广东


本文是「Graph Engineering系列」第1篇/共10 篇。

它同时属于我们写给生产环境 Agent 从业者的 AI 工程指南系列。

2026年7月18日前后那一两天,AI agent 这条线上没有发生任何一件称得上发布的事——没有新模型、没有新框架大版本、没有新协议。

但从那两天起,英文技术圈开始普遍用一个词来称呼一件他们已经做了两年多的事:Graph Engineering,图工程。

图片展示了Graph Engineering的概念,背景为深色科技风格。左侧大字“Graph Engineering”下方有“Connect specialized agents, route intelligently, and let state flow.”字样。右侧有四个机器人,分别代表RESEARCHER、WRITER、REVIEWER、PUBLISHER,它们通过箭头连接,形成流程。底部有“Shared State”及相关内容说明,展示了任务、笔记、草稿、任务、笔记、草稿、任务、笔记、草稿、任务、笔记、草稿等状态流转。此图直观呈现了图工程中连接专业代理、智能路由及状态流动的流程。

关于本文的材料等级:引爆帖的日期,各二手来源分别记为 7 月17 日和 18日,X原帖在本次调研中无法抓取,本文取 18-19 日这个窗口。文中涉及的7月 18-20日时间线与所有推特言论,均转引自 AI Builder Club 的《Graph Engineering Guide(2026)》,我未找到独立一手存档,请一律按二手材料对待。整条时间线上唯一能逐句核对原文的一手材料,是 LangChain 官方博客(2026-07-22)。

这在软件行业不新鲜。「微服务」出现时大家已经拆了好几年单体,「DevOps」被叫出来之前运维和开发早就在同一个房间里吵架了。词晚于事,是常态。

问题在于,词一旦被叫出来会同时发生两件事:一批人因此看清了自己在做什么,另一批人因此开始卖课。这篇文章的任务,是把前者从后者里择出来。

一、先给一句能落地的定义

Graph Engineering是指:把多个专职 agent 或确定性步骤接成一张有向图一一节点负责干活,边负责路由,一个共享状态对象沿着边流动。

它服务的场景只有一个:单个 agent 跑一个循环已经不够用了。

三个零件的直觉,可以用最经典的入门结构来体会——研究员、写手、审校:

• 节点是干活的单元。可以是一个专职 agent(研究员收集材料、写手出稿、审校挑刺),也可以是一段确定性代码(调一次 API、查一次库、做一次格式化)。判断标准是单一焦点:这个节点只干一件事。

• 边是路由逻辑。研究员做完流向写手,是直连边;审校打完分,通过就流向发布、不通过就流回写手,这是条件边,而且是一条回边。

• 共享状态是沿边流动的那个对象,它一路累积:{task}一 {task,notes} {task, notes,draft}一 {task,notes,draft, verdict}。

把一堆 agent 变成一个系统的,是节点之间那条被显式定义的信息通道。它有两种主流形态:LangGraph&用的是一个沿边流动的共享状态对象,AutoGen GraphFlow 用的是 agent 之间的消息广播。形式不同,作用相同—一没有这条通道,你只有三个互不相干的组件,各自对着自己的 prompt 说话。下面这段代码用 LangGraph 的共享状态形态举例,因为它把「谁写了什么」摆在明面上,最容易看清。

如果你想今天就把这样一张图跑起来,而不是先纠结这个词——多 runtime 的编排可以直接交给 Awwo 工作台(原 SuperClaw)。

落到代码上是这样(本文 Python 示例基于 Python ≥3.10 + LangGraph 1.x / autogen-agentchat

0.7. / ADK Python 2.0,API 随版本会变,以官方文档为准;三个节点函数这里用桩代替,结构展开见第 4篇,可直接运行的完整版留到第 6篇):

图片展示了一段Python代码,用于构建一个名为StateGraph的图结构。代码定义了State类,包含task、notes、draft、verdict等属性,还定义了researcher、writer、reviewer等函数。通过g = StateGraph(State)实例化StateGraph,添加节点如researcher、writer、reviewer等,以及边如START到researcher、researcher到writer等,还设置了条件边和回边。最后调用g.compile()编译。该代码与上文提到的不到三十行代码,节点、边、共享状态、回边全在其中的内容相呼应,展示了图工程相关运行时能力的实现。

不到三十行,节点、边、共享状态、回边全在里面——而这段代码用的 LangGraph,在「图工程」这个词出现的两年半之前就能跑。所以「图工程所要求的运行时能力早就是现成的」这句话,靠的不是代码短,是时间先后,下一节展开。

顺带把一件容易含糊的事说清楚:拓扑上,单个 1oop 可以画成一张退化到极简的图——一个节点,加一条指向自己的边。但退化到一个节点之后,「节点各有分工」和「路由被显式声明」这两件事同时消失了,所以本文讲的图工程并不针对这种情形—一它是叠在 100p 上面的一层,不是取代它。这个判断有一手出处: LangChain 官方博客(2026-07-22)原话是「Loop engineering isn't an alternative to graphs, so much as a simple version of them.」(循环工程不是图的替代品,而是图的一个简单版本。)

那 loop 和 graph 到底怎么划界?AI Builder Club 指南里转引了一条 @shannholmberg 的发言(X 原帖本文未能独立核实):区别在于路径由谁决定—一是 agent,还是你。

loop 把路径选择权交给 agent,由它自己决定下一步调哪个工具、要不要再来一轮;graph 则由你显式声明哪些路径合法,agent 只在节点内部保留运行时自由度。这条判据什么比「按 agent 数量分」「按用没用框架分」更好用,怎么在代码里五分钟读出来,第 3篇展开。

一句话:loop 是把决策权外包给模型,graph 是把决

策权收回一部分给自己。

二、第一条澄清:这不是知识图谱,也不是

GraphRAG。

据我在中文技术社区的观察,看到「图」这个字最常见的联想是知识图谱——过去几年中文语境里的「图」,几乎被知识图谱和 GraphRAG 占满了。如果你不在此列,这一节可以快速略过;如果在,这个联想会让你后面全部读歪,必须先拆掉。

知识图谱做的是数据建模。图工程做的是执行建模。再直白一点:知识图谱里的图是名词,图工程里的图是动词。

图片展示了知识图谱/GraphRAG与图工程的关键区别。知识图谱的节点是实体,边是关系断言;图长期驻留在存储里,可反复查询;谁在遍历它由检索器/查询引擎;出错意味着事实错、关系连错;优化目标是召回率、事实准确性。而图工程的计算单元是计算单元(agent、函数、工具调用),触发条件是触发条件(「A完成后激活B」);图随任务实例创建,可持久化以支持挂起/恢复;谁在遍历它由调度器/运行时(LangGraph、ADK);出错意味着流程走错、状态被写乱;优化目标是延迟、成本、可审计性、故障隔离。

「图什么时候存在」那一行是程度差别,不是有无差别——执行图的状态可以被检查点(checkpoint)存很久(见后文 interrupt()挂起/ 恢复),但它存在的目的是完成一次执行,不是被反复查询。

关键差别在最后两行。知识图谱的失败是认知失败——你查到的东西不对。图工程的失败是执行失败——上游节点辛苦写进 notes 的资料,被下游节点整段覆盖,不报错、不留痕,而你一周之后才在一份缺了半截依据的日报里发现。

两者不冲突,还经常同时出现在一个系统里:你的执行图里那个叫「检索」的节点,内部完全可以在跑 GraphRAG。但那是节点内部的实现细节,跟这个节点在图里的位置、入边条件、往共享状态里写什么,是两个正交的问题。

如果你只从这篇文章里记住一件事,记这个:你查的图和你跑的图,不是一张图。

三、另外两条澄清:不是新能力,也不是默认选项

第二条澄清:词是新的,能力不是

这一点值得逐条摆证据,因为它决定了后面那个付费判断该怎么问。在这个词被叫出来之前,能干这件事的东西已经一大堆:

• LangGraph(LangChain 出品)的核心抽象就叫 stateGraph,官方定位是「构建、管理、部署长时运行有状态 agent 的低层编排框架与运行时」。它比这个词早了两年半。它的执行模型也不是原创—一超步(super-step)调度那套思路来自 Google 的 Pregel论文(2010)和更早的 BSP 模型。

• 微软 AutoGen的 GraphFlow: DiGraphBuilder 加节点加边,支持条件边、扇出(fan-out)/ 扇入(fan-in)、带出口的循环,同样早于 2026年7月:

图片展示的是微软AutoGen的GraphFlow代码示例,用于构建图引擎流程。代码从导入相关模块开始,创建DiGraphBuilder和GraphFlow实例,添加writer、reviewer、summarizer节点,设置边条件,指定入口节点,最后构建图并设置终止条件。该图片与上下文紧密相关,是对微软AutoGen的GraphFlow功能的代码实现展示,直观呈现了其构建图引擎流程的能力,与上下文提到的GraphFlow早于2026年7月的背景信息相契合。

• Google ADK 2.0 把执行模型从层级式 agent executor 换成了图引擎,Agent、Tool、 Function 都是图里的节点 (Python 2.0 于 2026-05-19 GA,Go 2.0 于 2026-06-30 GA)。官方文档里是这样声明的:

图片展示的是Google ADK 2.0官方文档中关于执行模型的代码示例。代码从导入Workflow模块开始,定义了名为“routing_workflow”的根Agent,其边缘包含链式直连边和条件边。链式直连边由“START”节点指向“process_message”和“router”节点。条件边则在“router”节点处,根据返回的Event(route=...)进行选路,分别指向“response_bug”和“response_logistics”节点。该图片与上下文紧密相关,直观呈现了文档中提到的图引擎执行模型相关内容。

• A2A(Agent2Agent):agent 之间以对等方身份互相委派与协作的开放协议(跨信任边界是它最有价值的场景,但协议本身不以组织边界为前提,企业内部跨团队、跨部署单元同样适用),2025-04-09 由 Google 发布,2025-06-23 捐给 Linux Foundation,2026年3月发布v1.0。至少在标准化这条线上,企业侧动手比推特上的宣告早了一年多;至于实际采用规模有多大,本文没有一手数据,留到第7篇与第10篇再谈。(顺手拆掉一个常见混淆:A2A 连的是 agent 与 agent, MCP(Model Context Protocol, Anthropic 于2024 年11月发布)连的是 agent 与工具、数据源—一分层不是竞品,第7篇展开。)

再往前一层,这些也都不原创:DAG 编排有 Airflow (2014),持久化执行有 Temporal,状态机有 xState、有 Petri 网、有几十年的自动机理论,节点隔离和监督树有 Erlang/OTP 的 actor 模型。有向图和状态机是计算机科学的老家具,不是2026年的新发明。

所以7月 18-19 日那两天真正发生的事,是命名,不是发布。

顺着这条把付费问题的问法也校正一下:判断该不该为这个词花钱,不是问「它新不新」,而是问卖给你的是运行时能力,还是切分决策。运行时能力你已经免费拥有了—一就是上面这四个东西,为它付费没有道理。切分决策值不值得付费,得等第五节把它和框架的边界划清之后再判断。

第三条澄清:这不是默认选项,它会引入分布式系统级的复杂度

「分布式系统级复杂度」是个结论,我觉得它需要证据。四条来自真实框架文档和 issue 的证据:

1.并发写冲突。两个并行节点同时往共享状态写,谁赢?LangGraph 的答案是:你必须给字段声明 reducer(就是上面那个 Annotated[list[str], add])。不声明的后果分两种—一并行写当场抛 InvalidUpdateBrror,串行写则被下一个节点原样盖掉,不报错、不留痕;后者才是最难查的那一类。运行时为什么非要你显式声明不可,第6篇展开。

2. 扇入语义。三条边指向同一个节点,是三条都到齐才激活,还是任意一条到就激活?AutoGen 为此提供了 activation_group 与 activation_conditi on(取值 "a11" / "any"),让你能表达「A 和B 都到齐,或者C单独到」这类混合条件。这是写单 loop 时永远不会遇到的问题。

3. 死路与假命中。一旦引入条件边,你就同时接手了两类新错误:所有出边条件都不满足时图走进死胡同,以及判据建在自由文本上时的误命中。纪律只有一句——条件边判据只读结构化字段、出边必须留兜底(两类成因与代码见第 4篇)。

4. 恢复的幂等性。LangGraph 的 interrupt()挂起之后恢复,节点是从头重跑的—一挂起点之前的任何副作用(发邮件、扣款、写库)都会再来一遍,官方给的对策是把副作用挪到 interrupt()之后、拆成独立节点,或改用 upsert 之类的幂等写法。Google ADK 那边则有一条硬性禁令:不要在生命周期之外直接改从 SessionService 取回的 session.state,官方说明这会绕过事件追踪,制造 race condition 与 lost update。

这四条不是随「上图」一次性到齐的,是随你用的拓扑逐项累加的:一旦图里出现并行分支,你接手的是并发控制和激活语义;一旦出现条件边,你接手的是死路排查;一旦引入 HITL 中断,你接手的是幂等设计。本文开头那个 researcher writer -> reviewer 的串行图带一条回边,既无并行写入、无多入边扇入,也没有挂起点—一四条里它只碰得到第3条。所以「上图会引入分布式复杂度」这句话要按拓扑折算,不能整包吓人。

外加一个很少被提的成本问题:图会通过扇出放大 loop 的缺陷成本。这里不是说「并行比串行贵」——同样五件事串行做也要烧五份 token,总量未必更多;并行独有的是发现得晚和峰值高这两项。放大到底是多少倍,第9篇有算式和金额表。

所以判断标准应该是保守的。这里先给结论:把几个节点合成一个 agent 的循环之后,如果并行度、上下文隔离、强制力与可审计性、可单独重试或挂起的位置——这四样一个都没丢,那就该坍缩回一个 loop(完整判据留到第5 篇)。「帮我总结这份 PDF」正是这一类:不需要做成「取件 切块一摘要一审校一格式化」的五节点图,那只是把开销做进去了,没解锁任何单 loop 做不到的事。

节点在哪台机器上跑是另一个问题——真要自己扛下来,可以看 Kimi K3 开源权重本地部署指南。

四、一个词是怎么在两三天里结晶的

时间线很短:2026年7月18到19日这个词在 X 上被反复使用、扩散开,20日前后是回应和反冲。再提醒一次:本节所有人物与言论都是二手转引(出处见开头那段说明),当故事读,别当证据用—一 MarkTechPost 2026-07-29 那篇梳理就明说,这个词的出处至今没有定论(原文:the term's provenance is unresolved)。

导火索是一句提问。OpenClaw 作者 Peter Steinberger 抛出一句「我们到底还在聊 100p,还是已经切到 graph 了?」,由 @sairahul1 转述进更大的圈子。是问句,不是宣告—一有二手快讯把它转述成「宣布循环工程(loop engineering)时代终结」,那是失真。

框架由 @rohit4verse 补上。他给了后续文章反复引用的那个比喻:agent 正在从 while 循环毕业成组织架构图—一专职节点并行跑,状态在它们之间流动。@Vaibhavsisinty 把它描述成一场静悄悄的转变,@svpino 则直接喊出「Loop Engineering 已死, Graph Engineering 万岁」。

这个比喻之所以有效,不在于准确(组织架构图是树, agent graph 是带环的有向图),而在于它换掉了参照系。脑子里装着「while 循环」时,你本能地问「这轮该干嘛、什么时候跳出」;换成「组织架构图」,问题立刻变成「谁负责什么(节点的单一焦点)、谁向谁汇报(边的方向与条件)、失败往哪走(兜底边与故障隔离)」。后面这组才是多 agent 系统真正的设计问题。但这个比喻的有效期只到「换参照系」这一步止:再往前推,比如照着树去理解层级或问责,它就会误导你——agent graph 是带环的有向图,没有唯一上级。

反冲来得同样快。@RhysSullivan、@DavidKPiano、@PawelHuryn、@NathanFlurry 四个人各给了一条批评,逐条驳论留到第10篇。这里只提与本篇直接相关的那一条:@NathanFlurry 吐槽这些「图工程」帖子居然一个字都没提 A2A——他是对的,上一节那条 A2A 时间线就是佐证。

顺着这个分歧,我建议把「词」和「转变」分开看,落到两行:

图片展示了关于“图工程”定位的分析。上方提问“新吗?”和“真实吗?”后,左侧内容为“把协作设计当成一项独立于框架的技能来教”,并标注“新”和“真实”。下方内容为“‘图工程’这个词本身的承重能力”,标注“有水分”。该图与上下文紧密相关,是对“图工程”定位的过滤器,明确指出“独立于框架的技能”定位是新的且值得学习,而“图工程”这个词本身有水分,不值得为它付费。

这两行就是我的过滤器:「独立于框架的技能」这个定位是新的,值得花时间学;词本身有水分,不值得为它付费。协作设计这件事从来不新,新的是把它从各家框架的「使用技巧」章节里拎出来、当成一门可迁移的手艺—这个区分是下一节的落点。

五、最该受益的那个人,公开表示了怀疑

这个系列的悬念,来自一个你最不会预料到的人。

Harrison Chase 是 LangChain 的联合创始人兼 CEO,LangGraph 出自他和他的团队。按理说这波浪潮的最大受益者就是他—一所有人突然用一个新词,来描述他两年多前就写好的框架在做的事。

而他7 月20日在 X 上的回应是怀疑:大意是他不太清楚图工程指什么,现在也还是不清楚,感觉基本就是 LangGraph。(这条推文同样转引自 AI Builder Club 指南,X 原帖未能独立核实,日期与措辞以该二手汇编为准。)有意思的是紧接着的转折:两天后,2026年7月22 日,LangChain 官方博客发了一篇《3 Years of Graph Engineering with LangGraph》,姿态从怀疑转成了「这词是 buzzword,但 buzzword 的出现总有原因,而这件事我们已经做了三年」。(LangGraph 首个公开版本是 2024年1月,到 2026年7月是两年半;「三年」是 LangChain 自己从更早的内部工作起算的口径—一这个半年的口径差,本身就是「认领」动作的一部分。)还有一个不该被略过的细节:这篇博客的署名是 Sydney Runkle 与 Harrison Chase。也就是说,认领这个词的,正是两天前说「我也不知道这是什么」的同一个人。

从个人怀疑到官方认领只隔了两天一一但这说明不了词在技术上有价值。最直接的解释是抢占叙事所有权的商业反射,和推特上那波淘金热是同一种动作,只是更体面。它唯一能证明的是:一个词一旦形成,连最有资格说「我们早就在做」的人,也得先接受它当坐标系才能被听见。这是传播事实,不是技术事实。

Harrison 那句话值得当成整个系列的问题起点,因为它同时是对的和不完整的。

对的部分很好确认:技术上,图工程要的一切能力 LangGraph 都有,AutoGen 有、ADK 有、Temporal 某种意义上也有。新的只有词汇和教学框架,不是运行时。

不完整的部分在于:框架给了你能力,但没有替你做决策。

LangGraph 会逼你写 state schema,但不会告诉你这个 state 该放什么、谁有写权限、哪些字段需要 reducer。ADK 给了你并行原语,但不会告诉你这三路研究到底该不该并行、汇合节点该怎么综合冲突的结论。AutoGen 给了你条件边,但不会提醒你留兜底边。

框架决定「能不能做」,图工程要回答的是「该不该做、怎么切、切成几块」。这套决策以前散落在各框架文档里,被当成某个框架的使用技巧;现在被拎出来当成一项独立于框架的工程技能—一就是上一节表格里那新增的一行,也是这个词唯一真实的贡献。

至于它能不能撑起十篇文章,接下来九篇就是我给出的答案。

六、系列地图

1. 本篇—图工程到底是什么:一个2026年7月才有名字的老东西

2. 从提示词到图:AI工程的五层栈,你现在在第几层——五层是累积不是替代,跳过下层,图只会以更华丽的方式失败

3. Loop 还是 Graph:判别标准其实只有一条——路径由谁决定,以及怎么在代码里读出来

4. Agent Graph 解剖:节点、边、共享状态—一三要素的设计决策与常见错法,含边的四种形态与状态对象设计

5. 什么时候该上图:六个信号,和一个坍缩测试——附反模式,默认答案是「你不需要图」

6. LangGraph 实战:把研究员一写手一审校这张图真正跑起来—— reducer、Send 扇出、检查点与人工审批

7. 另外三条路:AutoGen GraphFlow、 Google ADK 与 A2A 协议 ——框架横评,以及边跨出公司之后

8. Reviewer 节点:整张图里最值钱的那一个——为什么最值钱的是那个不生产任何东西的节点

9.生产环境的四个坑:状态漂移、故障隔离、成本失控、看不见

10.争议与终局:这个词是不是又一波垃圾内容,以及你的开工清单

这个系列的其余九篇,会随发布陆续加入 ClawHunt 文章索引。

本篇要点

• 图工程 =节点干活、边路由、共享状态沿边流动;只在单 agent 单循环不够用时才该动用。

• 它跟知识图谱 /GraphRAG 是两码事:那是数据建模,这是执行建模;知识图谱的图是名词,图工程的图是动词。你查的图和你跑的图不是一张图。

• 能力早就存在(LangGraph / AutoGen GraphFlow / ADK 2.0/ A2A,再往前是 Airflow、状态机、actor 模型),2026年7月 18-19 日发生的是命名,不是发布;顺带分清: A2A 连的是 agent 与 agent,MCP 连的是 agent 与工具和数据,互补不是竞品。

• 上图的代价是真的,但按拓扑逐项累加:有并行才有并发写冲突与扇入激活语义,有条件边才有死路与子串误命中,有中断才有恢复幂等;扇出还会放大缺陷成本(发现得晚+峰值高)。过不了坍缩测试,就该坍缩回一个 loop(完整判据见第 5 篇)。

• 据 AI Builder Club 转述,Harrison Chase 本人对这个词表示怀疑;两天后 LangChain 官方博客(可核实的一手材料,且由他本人联署)认领了它。他说对的部分是运行时不新,不完整的部分是框架从不替你做切分决策。

下一篇:第2篇:从提示词到图:AI 工程的五层栈,你现在在第几层

如果想要及时关注这个系列更新以及了解更多信息,欢迎关注公众号,或访问访问 clawhunt.store。

这类前沿技术调研也可以按需外包——市场上就有现成的 AI 调研服务。

参考与出处

Shirley,《Graph Engineering Guide (2026)》,AI Builder Club, 2026-07-20发布/ 07-27 更新。本文中所有推特言论与 7月18-20 日时间线均转引自此文。

https://www.aibuilderclub.com/blog/graph-engineering-guide-2026

LangChain,《3 Years of Graph Engineering with LangGraph》,Sydney Runkle 与 Harrison Chase, 2026-07-22。 https://www.langchain.com/blog/3-years-of-graph-engineering-with-langgraph

Asif Razzad,《Prompt Engineering vs Loop Engineering vs Graph Engineering》,MarkTechPost, 2026-07-29(文中指出该词出处至今未定)。

https://www.marktechpost.com/2026/07/29/prompt-engineering-vs-loop-engineering-vs-graph-engineering/

LangGraph 官方文档(StateGraph、reducer、 interrupt/resume 与幂等): https://docs.langchain.com/oss/python/langgraph/over vieW、 https://docs.langchain.com/oss/python/langgraph/inte rrupts

LangGraph 错误页 INVALID_CONCURRENT_GRAPH_UPDATE(并行写无 reducer 的 key 抛 InvalidUpdateError):

https://docs.langchain.com/oss/python/langgraph/erro rs

AutoGen GraphFlow 用户指南 (DiGraphBuilder、 activation_group / activation_condition、条件边为子串四配、experimental 声明): https://microsoft.github.io/autogen/stable//user-guide/agentchat-user-guide/graph-flow.html

AutoGen issue #6551「GraphFlow fails to find next speaker when conditional edge is added」: https://github.com/microsoft/autogen/issues/6551

AutoGen - Microsoft Agent Framework 迁移指南(Workflow vs GraphFlow): https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-autogen/

Google ADK 2.0总览与发布日期:https://adk.dev/2.0/;图工作流:https://adk.dev/graphs/; Sessions/State: https://adk.dev/sessions/state/

A2A 协议规范与 v1.0 发布公告(2026年3月): https://a2a-protocol.org/latest/specification/、 https://a2a-protocol.org/latest/announcing-1.0/

Model Context Protocol 规范: https://modelcontextprotocol.io/

Malewicz 等,《Pregel: A System for Large-Scale Graph Processing》,SIGMOD 2010