免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

Graph Engineering 来了:Claude Code 让 Agent 从一条直线变成一张图

发布日期:2026-08-14 06:45:58 浏览次数: 1730
作者:Seebin

微信搜一搜,关注“Seebin”

推荐语

Agent 编排从线性流程到图结构的革命性进化!Graph Engineering 拆解 Claude Code 14 步,解决传统流程低效脆弱难题。
核心内容:
1. 传统 Agent 线性流程的依赖传递与脆弱性问题
2. Graph Engineering 核心:节点(工作单元)与边(数据依赖)
3. 实现 Graph Engineering:重画链、节点契约(schema 验证)、边的数据契约

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

昨天刷到一条推文,782 赞、1948 收藏、31 万阅读,作者 @0xCodez 用一篇长文把 Claude Code 的 Dynamic Workflows 拆成了 14 个可复用的架构步骤。

标题叫「Graph Engineering with Claude」。

我花了一小时把这 14 步啃完,发现它讲的不是工具用法,而是一个更大的东西:Agent 的编排思维,正在从「一条线」进化成「一张图」。

9/10 搭过 Agent 的人,排出来的流程长这样:先做 A,再做 B,然后 C,最后 D。每个步骤乖乖等上一个跑完才启动。

问题是一半的箭头根本不传数据。「总结文件」和「查天气」之间没有依赖关系,但你把它们排成了一条链,天气就必须等总结跑完才开始。链越长越脆弱:C 卡住,D 永远不会执行,A 的结果困在上游出不来。

这是一条直线,不是一张图。

节点做思考,边传递结果

Graph Engineering 的核心概念只有两个:节点和边。

节点是一个工作单元——一个 Agent,一个明确的任务,一个输入对应一个输出。是一条依赖关系:这个节点的输出,喂给那个节点的输入。仅此而已。

多数人犯的错,是把「然后」当成了边。「先总结文件,然后查天气」——这两件事之间没有「然后」,因为天气不读总结的输出。没有数据流动,就没有边,等待就是浪费。

每一个「然后」都要问一句:下一步读不读上一步的输出?不读,就没有边,直接并行。

你写的线性脚本,是一个退化的图

当你写「做 A,再做 B,再做 C」的时候,你其实画了一个图——一条不分叉的链,每个节点恰好一条进边、一条出边。

它能跑对。但它跑得慢、扛不住错,因为链没有冗余:C 卡了,D 永远不跑,A 的结果困死在上游。

Graph Engineering 的第一个技能,就是重画这条链。对每个箭头问那个问题——这一步的输出,下一步真的读吗?砍掉几条不传数据的箭头,链就塌缩成更宽的形状:几个可以同时跑的独立节点,汇入一个需要它们全部结果的汇聚节点。

给每个节点一个契约

你无法推理的节点,你也无法并行。解法是契约:输入有界、输出有界、只做一件事。

输入是节点读取的任何东西——显式传入,绝不能从共享窗口里假设。输出是一个确定的形状,最好经过验证,这样下游节点可以消费它而不用猜。

在 Claude Code 的 workflow 里,契约靠 schema 执行。当你给 agent() 传一个 JSON schema,Claude spawn 出的 subagent 被强制返回经过验证的结构化数据——验证发生在 tool-call 层,格式不对 Claude 会自动重试,而不是扔给你一段自由文本让你祈祷能解析出来。

这就是「节点 Claude 能接进图」和「节点只能靠人读输出才能用」的区别。

边也是数据契约

边不只是「B 在 A 后面」。它是关于什么数据穿过的一个承诺:A 产出这个形状,B 被设计来消费这个形状。

当你用数据而不是顺序来命名边,两件事变简单了:你能立刻看出这条边是不是真的(数据真的在流动吗?),而且你可以在两端换掉节点而不破坏图——只要形状不变就行。

实际操作中,边活在纯 JavaScript 里。扇出和合成之间的 reduce 步骤——flatten、dedupe、filter——就是代码操作数据形状。不需要 Agent。图思维的一个安静胜利:大量被人们烧 token 做的事情,其实只是边操作,而边是免费的。

给每个节点一个契约

你无法推理的节点,你也无法并行。解法是契约:输入有界、输出有界、只做一件事。

输入是节点读取的任何东西——显式传入,绝不能从共享窗口里假设。输出是一个确定的形状,最好经过验证,这样下游节点可以消费它而不用猜。

在 Claude Code 的 workflow 里,契约靠 schema 执行。当你给 agent() 传一个 JSON schema,Claude spawn 出的 subagent 被强制返回经过验证的结构化数据——验证发生在 tool-call 层,格式不对 Claude 会自动重试,而不是扔给你一段自由文本让你祈祷能解析出来。

这就是「节点 Claude 能接进图」和「节点只能靠人读输出才能用」的区别。

边也是数据契约

边不只是「B 在 A 后面」。它是关于什么数据穿过的一个承诺:A 产出这个形状,B 被设计来消费这个形状。

当你用数据而不是顺序来命名边,两件事变简单了:你能立刻看出这条边是不是真的(数据真的在流动吗?),而且你可以在两端换掉节点而不破坏图——只要形状不变就行。

实际操作中,边活在纯 JavaScript 里。扇出和合成之间的 reduce 步骤——flatten、dedupe、filter——就是代码操作数据形状。不需要 Agent。图思维的一个安静胜利:大量被人们烧 token 做的事情,其实只是边操作,而边是免费的。

菱形拓扑:分叉 → 并行 → 合并

把分发和汇聚拼在一起,就得到了所有严肃 Agent 图的主力拓扑:菱形

一个节点拆任务,多个节点并行干活,一个节点合并结果。市场扫描、依赖审计、代码审查、研究报告——换掉数据源和 prompt,骨架一样。

它的标准形态叫 fan out → reduce → synthesize:扇出去收集广度,用纯代码压缩信息密度,用最后一个 Agent 写出最终答案。

对抗性验证:让 Agent 互相挑刺

真正让 Graph 有杠杆效应的,不是更多 Agent,而是能包裹在 Agent 外面的结构。

一个验证节点坐在边上,结果被允许传到下游之前,它的工作就是试着推翻这个发现。活下来了,通过;推翻了,它永远到不了最终答案。

三种验证模式值得掌握:

对抗性验证——给每个发现派 N 个独立的「怀疑者」,prompt 让它们反驳,多数存活才保留。多视角验证——每个验证者用不同镜头:正确性、安全性、可复现性。多样性比 N 个相同检查更能抓住故障。裁判团——从不同角度生成 N 个方案,用并行裁判打分,从赢家出发、嫁接亚军的精华。

运行时路由:图不必是固定的

不是每张图都是固定的。有时候走哪条边,取决于节点发现了什么。

一个路由节点检查结果,决定哪条下游路径被触发——分类工单,然后分支到对应处理器;检查 diff 大小,然后决定快速审查还是全量审计。在 workflow 里,这就是对节点验证输出的一个 JavaScript if 或 switch。

确定性在这里是特性,不是限制。 路由的决策可以由 Claude 驱动(一个 subagent 做分类),但路由本身是 Claude 写的代码——所以对同样的分类,它每次都跑出同样的结果。你在节点处得到 Claude 的判断力,在边处得到脚本的可靠性。不会出现「Claude 自己决定跳过审计」的意外——因为跳过必须被写进图里,而它没有。

运行时路由:图不必是固定的

不是每张图都是固定的。有时候走哪条边,取决于节点发现了什么。

一个路由节点检查结果,决定哪条下游路径被触发——分类工单,然后分支到对应处理器;检查 diff 大小,然后决定快速审查还是全量审计。在 workflow 里,这就是对节点验证输出的一个 JavaScript if 或 switch。

确定性在这里是特性,不是限制。 路由的决策可以由 Claude 驱动(一个 subagent 做分类),但路由本身是 Claude 写的代码——所以对同样的分类,它每次都跑出同样的结果。你在节点处得到 Claude 的判断力,在边处得到脚本的可靠性。不会出现「Claude 自己决定跳过审计」的意外——因为跳过必须被写进图里,而它没有。

隔离故障,别让一个节点毒死整张图

在链里,一个失败会级联——C 死了,D 不跑,整条线停。在图里,失败应该被锁在节点内。

parallel() 里抛异常的 thunk 会 resolve 成 null,八个好 Agent 正常返回,一个坏的被丢掉。.filter(Boolean) 就是故障隔离墙。

更隐蔽的故障是节点互相踩踏——多个 Agent 并行写文件会冲突。解法是隔离:每个 Agent 在自己的 git worktree 里跑,做完再干净合并。

加一个循环——但让它收敛

有时候你不知道任务有多大,直到你已经在里面了:未知规模的发现、bug 扫描中找到一个 bug 会暴露三个。这需要循环——一条控制好的边,指回前面的节点。

危险显而易见:不收敛的循环就是无限循环,Agent 一直 spawn 到预算花光。

能收敛的模式叫 loop-until-dry:持续 spawn 查找器,直到连续 K 轮没有新发现,然后停止。一个决定成败的细节——几乎所有人第一次都会犯的错——是你对什么去重。必须对所有已见结果去重,而不是只对确认结果去重。 否则被拒绝的发现每轮都会重新出现,循环永远不会跑干,你造了一台花钱重新发现相同死胡同的机器。

加一个循环——但让它收敛

有时候你不知道任务有多大,直到你已经在里面了:未知规模的发现、bug 扫描中找到一个 bug 会暴露三个。这需要循环——一条控制好的边,指回前面的节点。

危险显而易见:不收敛的循环就是无限循环,Agent 一直 spawn 到预算花光。

能收敛的模式叫 loop-until-dry:持续 spawn 查找器,直到连续 K 轮没有新发现,然后停止。一个决定成败的细节——几乎所有人第一次都会犯的错——是你对什么去重。必须对所有已见结果去重,而不是只对确认结果去重。 否则被拒绝的发现每轮都会重新出现,循环永远不会跑干,你造了一台花钱重新发现相同死胡同的机器。

模型分层:不是每个节点都需要最强大脑

图让一件事变得显而易见:不是每个节点都需要你的最强模型。

有些节点是重复性、有界的——提取字段、分类工单;有些节点承载真正的判断——写报告、裁决发现。把无聊的节点跑在便宜模型上,把昂贵的 token 花在真正需要判断力的地方。

一个 agent() 调用的 model 选项,就能让 Claude 把特定节点路由到不同模型。大跑之前先查 /model,把扇出的重复节点降级,合并节点保持最高级——这根杠杆能把 token 饥渴的图从昂贵变成经济。

默认用 Pipeline,慎用 Barrier

parallel() 是 barrier——所有节点跑完才返回,最慢的那个决定总耗时。pipeline() 是流式的——每个项目独立跑完所有阶段,快的先完成,不用等慢的。

默认选 pipeline()。 只有当一个阶段真正需要所有上游结果同时在场——跨集合去重、基于总数的提前退出——才用 barrier。「代码更整洁」「阶段感觉更独立」不是理由。barrier 的延迟是真实的、可测量的、被浪费的。

让 Claude 自己画图

终极操作:停止手工画图。

Dynamic Workflows 让 Claude 自己写编排脚本——拆解任务、选择分发策略、spawn 协调的 Agent 舰队、合成结果。你得到的是一张为这次运行量身定制的图,而不是一张你希望它能用的固定流程。

三种入口:在 prompt 里说「workflow」,Claude 就会为任务写一个。跑保存好的 /workflows——deep-research 就是一个真实在生产里跑的图:scope → parallel search → fetch → adversarial verify → synthesize。或者开启 ultracode,Claude 为每个实质性任务自动规划 workflow。跑得好,按 s 保存脚本到 .claude/workflows/——版本控制、可按名重跑、任何 clone 仓库的人都能启动。

6 个本周就能搭的图

安全扫描。 Claude 为每个路由文件 spawn 一个 subagent,各自寻找缺失的认证检查,然后一轮验证器确认每个发现再出报告。单个上下文永远装不下的广度。

带引用的研究报告。 用 /deep-research 就能跑的图:scope → parallel search → fetch → adversarial verify → synthesize。Claude 把问题拆成不同角度,并行搜索,去重来源,然后用三个怀疑者对抗验证每条声明,最后写报告。

逐文件移植模块。 Bun 的做法,放大到你的仓库。Claude 把翻译扇出到各个文件,每个文件跑测试作为门槛,失败的循环回去——对抗性审查抓住单次遗漏的问题。

对抗性 diff 审查。 Claude 按 diff 大小路由:小改动一次快速通过,大改动触发全量并行审计,审查者各有不同镜头——正确性、安全性、性能——然后裁判团合成最终意见。

定时生态扫描。 保存一次,永远重跑。Claude 并行检查多个来源——releases、博客、讨论——在 barrier 处按影响力排序,写 digest。版本控制在 .claude/workflows/ 里,按名启动。

未知规模的发现。 你不知道有多少 bug。Claude 并行跑查找器,每轮对所有已见结果去重,验证存活者,持续循环直到两轮没有新发现——然后停止。

6 个本周就能搭的图

安全扫描。 Claude 为每个路由文件 spawn 一个 subagent,各自寻找缺失的认证检查,然后一轮验证器确认每个发现再出报告。单个上下文永远装不下的广度。

带引用的研究报告。 用 /deep-research 就能跑的图:scope → parallel search → fetch → adversarial verify → synthesize。Claude 把问题拆成不同角度,并行搜索,去重来源,然后用三个怀疑者对抗验证每条声明,最后写报告。

逐文件移植模块。 Bun 的做法,放大到你的仓库。Claude 把翻译扇出到各个文件,每个文件跑测试作为门槛,失败的循环回去——对抗性审查抓住单次遗漏的问题。

对抗性 diff 审查。 Claude 按 diff 大小路由:小改动一次快速通过,大改动触发全量并行审计,审查者各有不同镜头——正确性、安全性、性能——然后裁判团合成最终意见。

定时生态扫描。 保存一次,永远重跑。Claude 并行检查多个来源——releases、博客、讨论——在 barrier 处按影响力排序,写 digest。版本控制在 .claude/workflows/ 里,按名启动。

未知规模的发现。 你不知道有多少 bug。Claude 并行跑查找器,每轮对所有已见结果去重,验证存活者,持续循环直到两轮没有新发现——然后停止。

Prompt Engineering → Loop Engineering → Graph Engineering

如果 Prompt Engineering 是「怎么写一句话让 AI 做对事」,Loop Engineering 是「怎么让 Agent 的每次循环可观测、可中断、可改进」——那 Graph Engineering 是第三层:怎么编程多个 Agent 组织本身的结构。

Prompt 是句子。Loop 是循环。Harness 是 Agent 站的地板。但工作的形状——什么先跑、什么能同时跑、什么必须等一切结束——这个形状是一张图。

多数人会继续把步骤排成一条线,因为那符合我们打字的方式。学会画图的人,会跑一支舰队——并且永远不会注意到其他人卡在天花板下面。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅