首页 › LLM大语言模型 › 大模型技术工程 › Graph 工程 › 一文搞懂 Graph Engineering(图工程)14步拆解

一文搞懂 Graph Engineering(图工程)14步拆解

🔍多数开发者构建多步骤智能体时,最终产出仅为线性串行流程:任务按次序依次执行,后序步骤需等待前序任务完成。实践中近半数等待环节属于不必要的阻塞。这类线性实现缺少路由分支、并行调度能力,本质是顺序排队执行:单上下文、串行处理任务。一旦上下文窗口占满,极易出现任务状态丢失。​

​

本文提供一套包含 14 个要点的工程路线图,指导开发者将线性流程重构为智能体图拓扑:支持大规模子智能体集群协同、结果交叉校验,达成单体智能体无法实现的复杂任务能力。​

​

​

节点即作业,边即流向​

图结构由两类基础要素构成:​

•

节点是具备清晰边界的执行单元,可以是智能体或是独立任务,拥有明确输入与输出。 ​

•

边表征依赖关系:上游节点输出向下游节点传递数据。 ​

​

很多开发者存在典型误区:单纯以执行顺序定义连接关系。例如「文档总结,随后查询天气」,两个任务不存在数据互通,不具备有效边。线性脚本强行串行,引入无效等待。​

​

​

⭕

判定标准:针对流程中每一处顺序执行逻辑,确认后继任务是否消费前序输出;若无数据消费,则不存在有效边,等待逻辑应当移除。​

​

​

飞书文档 - 图片

​

​

代码块​

Python

Draw it as boxes and arrows. A box is an agent() call. ​

An arrow is a variable passed from one call’s return into another’s ​

prompt. If you can’t draw the arrow - if no variable crosses - the two ​

boxes are independent, and independence is the thing you’ll exploit ​

for the rest of this course.​

​

​

线性脚本是退化图结构​

A→B→C→D 这类串行流程,本质是仅存在单条通路的退化图,每个节点仅有一条入边、一条出边。 该方案可正常运行,但执行延迟高、容错性差。链式结构无冗余机制,任一节点阻塞,下游全部任务停滞。​

​

飞书文档 - 图片

​

​

⭕

图工程首要能力就是重构串行链路:逐条审视节点间箭头,识别不存在数据传输的顺序依赖;移除无效连接后,串行链路将拆分为多个独立节点并发执行,输出汇聚至下游节点。​

​

​

为所有节点定义接口契约​

无法标准化输入输出的节点,难以实现并行调度。​

💡 解决方案是建立执行契约:限定输入范围、标准化输出结构,单一节点仅承担一类职责。 输入由外部显式传入,禁止从共享上下文隐式读取;输出具备可校验的数据结构,下游节点无需额外解析。​

​

飞书文档 - 图片

​

​

⭕

在动态工作流中,契约通过 JSON Schema 强制约束。调用agent()并绑定结构范式后,子智能体必须输出合规结构化数据;校验在工具层自动执行,格式异常时自动重试,避免无结构自由文本带来的解析成本。这也是可嵌入图拓扑的节点,与仅面向人工阅读的智能体节点的核心区别。​

​

​

代码块​

JavaScript

​

​

将边视作数据契约​

边不等于「B 在 A 之后执行」,而是一份数据流转约定:上游产出指定结构数据,下游节点按照该结构完成消费。以数据流而非时序定义边,具备两大优势:快速判断依赖有效性;接口不变前提下,可替换两端节点,不破坏整体拓扑。​

​

​

扇出、汇聚之间的数据规整(扁平化、去重、过滤)通过原生 JavaScript 实现,无需启动智能体处理。 图架构一大成本优势:大量开发者耗费 Token 处理链路数据规整,而依托代码实现的边逻辑零模型开销。​

​

⭕

工程准则:切勿新建智能体做结果合并。扁平化、去重等数据规整属于管道逻辑,由代码即时完成,无需消耗 Token。若每条数据链路都依赖智能体处理,将产生大量无效算力开销。​

​

​

使用 parallel 实现扇出调度​

面对 N 个相互独立任务(多数据源检索、批量文档审阅、多条路径审计),应当放弃串行执行,采用扇出模式并发调度。 在并行流程中,Codex 接收一组任务函数,批量启动子智能体并发运行,最终统一返回结果数组。并行能力内置两项容错特性:​

屏障机制:等待全部任务单元执行完毕,再进入下一阶段,保障下游获取完整数据集;​

异常隔离:任务抛出异常仅返回 null,不会造成整批任务失败。​

​

​

执行结果建议统一执行filter(Boolean)过滤失效任务。系统会根据并发上限自动排队,支持批量提交上百个子任务。​

​

代码块​

JavaScript

phase('Research');​

​

// 9个数据源,启动9个智能体并发执行​

const raw = await parallel(​

SOURCES.map((s) => () =>​

​

扇出调度逻辑由编排代码承载,不占用模型对话上下文。每个子智能体持有独立上下文,仅返回最终结论。依托该机制,系统可横向扩展至数百个子智能体,不会造成主会话上下文溢出;编排层全程不消耗 Token。​

​

通过屏障节点完成扇入汇聚​

扇出必须配套汇聚逻辑。扇入节点接收全部上游分支输出,执行依赖全局数据集的操作:跨数据源去重、优先级排序、空结果提前终止等。​

​

⭕

屏障节点直接影响整体耗时,遵循原则:仅当下游阶段必须获取全部上游数据时,启用屏障。​

​

​

​

仅做列表扁平化等单元素独立转换,直接使用代码内联处理,无需设置屏障。 判定标准:如果执行链路为「并行→数据转换→并行」,且转换逻辑不存在跨元素依赖,应当采用流水线模式,移除屏障阻塞。​

​

代码块​

JavaScript

// 链路处理:原生JS实现,无智能体、零Token消耗​

const flat = collected.flatMap((c) => c.items);​

log(`Collected ${flat.length} items`);​

​

​

标准拓扑:菱形架构(拆分→并发执行→结果合并)​

扇出搭配扇入,形成复杂智能体系统最核心的菱形拓扑。 单个节点拆解任务,多节点并行处理,最终由汇聚节点整合输出。​

​

⭕

广泛适用于市场调研、依赖审计、代码评审、调研报告生成场景,更换指令与数据源即可复用。 ​

标准范式可总结为:任务展开→数据归约→结论综合。展开环节拓宽信息广度;归约依靠轻量化代码压缩数据;最终由智能体完成综合输出。​

​

​

​

掌握菱形拓扑后,设计重心将从「如何增加执行步骤」转向「识别合理拆分点与汇聚点」,这是系统规模化的关键。​

​

基于运行时条件实现边路由​

图拓扑不局限于静态结构,部分路径选择依赖节点运行结果。路由节点读取标准化输出,动态选择下游分支:例如工单分级分发、风险差异判定,选择快速评审或完整审计流程。​

​

​

在动态工作流中,路由逻辑由 JavaScript 条件语句实现。​

​

⭕

智能体负责风险分级判定,代码完成分支调度;相同判定结果每次运行路径保持一致,具备确定性。 智能体输出决策结论,编排脚本保障流程稳定;不会出现模型随机跳过指定流程的不可控情况,所有分支逻辑必须预先定义在拓扑内。​

​

​

代码块​

JavaScript

​

​

在链路边缘增设校验器​

图架构的核心价值不在于扩充智能体数量,而是依靠结构化机制提升结果可信度。​

​

​

校验节点部署在数据流入下游之前,负责验证、过滤无效结论,仅通过校验的数据允许继续流转。 三类成熟校验范式:​

​

⭕

对抗性校验:启动多个独立智能体对同一结论进行质疑,多数校验通过方可保留;​

多视角校验:校验单元分配独立评估维度(正确性、安全性、可复现性),依靠视角多样性捕捉同质校验遗漏问题;​

​

该模式已落地于 Bun 运行时迁移项目,通过多智能体对抗审查完成代码评审。​

​

​

节点隔离,限制故障扩散​

线性链路故障具备级联效应,单个节点失效阻断全流程;图架构需要将故障约束在对应节点内部。parallel()内任务异常仅返回空值,其余正常节点可持续输出,配合filter(Boolean)实现基础容错。 另一类隐性风险是并行节点资源互相干扰(例如多智能体并发读写文件)。​

​

⭕

解决方案为运行环境隔离:分配独立工作树,各智能体在沙盒内执行,最终统一合并变更。环境隔离属于可选安全机制,仅在存在并行写入冲突的拓扑中启用。​

​

​

​

​

引入收敛可控的循环拓扑​

部分探索类任务(漏洞挖掘、未知范围信息检索)需要迭代执行,单次发现可能衍生更多待处理目标,需引入循环结构,实现受控回溯。循环最大风险:无法收敛,持续生成任务耗尽算力预算。​

​

​

推荐「直至无新增信息」收敛模式:持续启动检索节点,连续 N 轮无新发现时终止。设计重点:去重逻辑需要覆盖所有已扫描目标,而非仅确认有效结果。否则被剔除的无效目标会反复触发检索,循环永久运行。​

​

代码块​

JavaScript

const seen = new Set(); ​

const confirmed = []; ​

​

​

节点分层调度不同规格模型​

并非全部节点都需要使用高阶大模型。图拓扑能够清晰区分任务类型:提取字段、工单分类属于标准化重复任务;报告汇总、结论裁决需要深度推理判断。 低成本模型承载标准化任务,高阶模型保留给强推理场景,优化推理成本。​

​

​

​

⭕

动态工作流默认继承会话所用模型,支持在单次agent()调用单独指定模型规格。大规模任务调度前,可将扇出内重复节点下沉至低成本模型,汇聚节点保留高性能模型;不改动拓扑结构,即可优化整体 Token 开销。​

​

​

拓扑结构直接决定延迟与算力成本​

图拓扑并非形式装饰,是影响运行时延的核心要素。​

​

⭕

开发者常混淆parallel()与pipeline():​

•

parallel()内置屏障,所有任务等待最慢单元完成后,才启动下一阶段;​

​

​

​

工程默认优先选用pipeline();仅当阶段必须获取全部前置数据(全局去重、批量对比、整体提前退出),才启用屏障。不能为简化代码、形式上划分阶段而引入屏障,同步阻塞会带来可量化的额外时延。任务逻辑分离 ≠ 需要同步执行。​

​

支持自动拓扑生成:动态布线​

对于需求无法预先完整拆解的任务,无需手动绘制静态图。依托动态工作流,开发者仅描述目标,Claude 自动生成编排脚本:任务拆解、选择扇出策略、调度子智能体集群、整合最终结论,生成适配本次任务的专属流程,摆脱固定拓扑约束。​

​

​

​

⭕

三种启用方式:​

在提示词中声明workflow,自动生成对应工作流;​

调用预制打包工作流,/deep-research为生产可用图谱:范围界定→并行检索→信息拉取→对抗校验→综合输出,完全匹配本文框架;​

开启超代码模式,会话内复杂任务自动规划工作流。​

​

单次运行效果达标后,按下 s 键将编排脚本保存至.claude/workflows/目录,纳入版本管理,支持按名称重复执行,项目协作成员可直接复用整套拓扑。​