Skill 与工作流

有向无环图工作流(DAG)

也叫: DAG · 有向无环图

DAG 工作流是把工作流建模成一张有向无环图:步骤可以分出并行的分支,之后再汇合回一条路径,而且任何一条路径都不会绕回自己。

开始分支 A分支 B汇合 → 结束
互不依赖的分支并行执行,最后汇合回一条路径。

普通的 pipeline 是一条直线:一个阶段接一个阶段,按顺序走。只要每一步都真的依赖前一步,这样没问题。但现实中经常不是这样:拉取测试结果和拉取 lint 结果这两件事互不依赖,但后面的“部署”这一步需要这两个都跑完才能开始。DAG(有向无环图)工作流就是用来表达这种关系的——步骤是节点,依赖关系是有方向的边,分支可以先各自跑,之后再汇合回一条路径,工作流才继续往下走。

“无环”这一点和“能分支”同样重要:DAG 里没有环。一旦有一条边从步骤 A 指向步骤 B,就不会再有边从 B 指回 A。这是故意设的约束——它保证整张图有明确的起点和终点,执行过程不会绕圈子卡住。如果确实需要循环、需要回到之前的状态,那是另一种模式(参见 state-machine-agent),不是 DAG 该干的事。

正因为如此,这种结构在构建系统和编排工具里很常见——它能让互不依赖的工作并行跑,这是严格线性的 pipeline 做不到的,同时还保证整个流程一定会跑完,不会卡死。

怎么运作

执行通常从没有未满足依赖的节点(图的起点)开始跑,如果编排引擎支持,这些节点还能并行执行。一个有多条入边的节点——也就是汇合点——要等它依赖的所有分支都跑完,才会开始执行,执行完之后,图又变回一条单一路径继续往下走。

举个例子

一个类似 CI 的智能体工作流:开始 → 并行跑 lint 检查(分支 A)和测试(分支 B)→ 两边都跑完后汇合 → 部署。不管 lint 和测试哪个先跑完,部署都要等两边都结束才会开始。

和相关概念的区别

DAG 工作流和普通 pipeline 的区别:pipeline 是一条不分支的线性链;DAG 允许互不依赖的分支并行跑,再在汇合点合并回一条路径,这是普通 pipeline 没法表达的结构。

常见误解

常被以为: DAG 工作流可以绕回去重跑前面的某一步。
实际上: 按定义 DAG 里没有环——不会有路径绕回去。重试、回退这类行为属于另一种模式,比如 state-machine-agent,或者是 DAG 之外单独写的重试逻辑。

常见问题

什么是 DAG 工作流?
把工作流建模成节点(步骤)和有向边(依赖关系)组成的图,可以分出并行分支再汇合,但不会有路径绕回之前的步骤。
为什么要用 DAG 而不是普通 pipeline?
当有些步骤互不依赖、可以并行跑,但后面某一步需要它们全部跑完才能开始时,普通线性 pipeline 表达不了这种关系,DAG 可以。

最近核实: 2026-08-28

相关术语