工作流里的节点、边、状态和条件分支分别是什么?

工作流里的节点、边、状态和条件分支分别是什么?
这道题考的是工作流引擎的四大核心概念。简单来说:节点是执行任务的"工人",边是连接工人的"传送带",状态是工人共享的"工作台",条件分支是传送带上的"岔路口"。搞清楚这四个概念,你对工作流的理解就入门了。
板块1:节点——工作流中的"工人"
节点就是工作流里的执行单元,它的工作流程很固定:读取状态 → 执行逻辑 → 更新状态。
想象工厂流水线,每个工位上的工人就是节点。工人A负责把原材料放到传送带上,工人B负责焊接,工人C负责质检。每个人只干自己的事,干完就把活儿传给下一个人。
常见的工作流节点包括:
- 生成节点:生成初稿、生成回复、生成报告
- 处理节点:文本处理、数据转换、格式校验
- 检索节点:向量检索、数据库查询、API调用
- 人工节点:审批节点、审核节点、人工输入
节点设计的核心原则是职责单一。一个节点最好只做一件事,这样方便维护和调试。你要是把生成、校验、修改全塞进一个节点,出问题了都找不到是哪一步出错。

板块2:边——连接节点的"传送带"
边是控制流的抽象,决定节点之间怎么连接、工作流往哪走。
还是用工厂类比:传送带把工人A的成品送到工人B的工位。但现实中的传送带不只有一种,有普通的直线传送,有会根据质检结果自动分流的分支传送,还有能把产品送回上游重做的循环传送。
工作流里的边分几种类型:
顺序边:固定顺序执行,A完了执行B,B完了执行C,没得选。
条件边:根据状态值决定走哪条路。比如"评分≥60分"走通过路径,"评分<60分"走拒绝路径。
回边:特殊的条件边,用于循环迭代。审核不通过就沿回边回到修改节点,重新来过。
分发边:一个节点完成后,同时触发多个下游节点并行执行。适合"同时做A和B,最后汇总"这种场景。
理解边的关键是:边定义了"从哪到哪",但不定义"什么时候到"——那是状态决定的。

板块3:状态——节点间的"工作记忆"
状态是跨节点共享的上下文,保存工作流执行过程中的关键数据。
想象工人共用一本笔记本,上面记录着当前任务的进度、上下文信息、各节点的处理结果。每个节点执行时都从这本笔记本读数据,处理完再把结果写回去。
常见的状态字段包括:
user_input:用户输入的原始问题messages:对话历史,追加模式context:从知识库检索到的相关上下文draft:生成的初稿内容review_result:审核结果final_output:最终输出
状态更新有两种策略:
覆盖:直接替换旧值。比如用户修改了问题,那user_input就直接被新值覆盖。
追加:添加到列表。比如messages字段,每次对话都往列表里加一条记录,而不是替换掉之前的。
这里有个坑要提醒:并行节点同时写入同一字段会产生竞态问题。比如分发边触发A和B两个节点同时更新result字段,后写入的会覆盖先写入的。解决办法是设计时避免这种情况,或者约定好追加模式。

板块4:条件分支——工作流的"岔路口"
条件分支是工作流的决策点,决定在什么条件下走哪条路。
在质量检测口,质检员根据产品是否达标决定:放行进入下一个工序,还是打回上游返工。这个"是否达标"就是条件,质检口就是分支节点。
AI工作流和传统工作流在分支处理上有明显区别:
AI工作流(LangGraph/Spring AI):结果不确定,可能需要循环迭代。条件在设计时定义,但走哪条边要等运行时看状态值。比如生成了一个回答,得看评分决定是直接输出还是修改重试。
传统工作流(明道云):确定性高,分支条件通常设计时就确定。比如"申请金额>1万"走审批流程,"≤1万"自动通过。
分支还有两种模式:
- 并行分支:满足条件的分支都执行。比如同时触发"发送邮件"和"记录日志"两个节点。
- 唯一分支:只执行第一个匹配的。比如条件判断从上往下匹配,执行完一个就退出,不再看后面的。
循环是特殊的条件分支。审核节点的回边就是典型:审核不通过 → 回到修改节点 → 重新生成 → 再次审核,形成迭代循环。循环有计数循环(最多N次)和条件循环(满足条件继续)两种。

面试怎么答
基础版(直接背):
节点是执行单元,负责读取状态、执行逻辑、更新状态,一个节点职责单一。边是控制流,决定节点间的执行路径,包括顺序边、条件边、回边、分发边。状态是共享上下文,保存工作流执行过程中的数据,跨节点传递。条件分支通过条件边实现,运行时根据状态值选择执行路径,支持并行分支和唯一分支两种模式。
加分版(能说清楚原理):
AI工作流和传统工作流的核心区别在于结果确定性。AI工作流因为结果不确定,往往需要循环迭代,比如生成回答→评分→不达标就修改重试。传统工作流确定性高,分支条件设计时就确定。另外要注意状态更新的竞态问题:多个并行节点写入同一字段时,需要选择覆盖或追加策略,避免数据丢失。
一句话总结
节点是干活的,边是指定路线和路径的,状态是干活过程中共享的数据,条件分支是根据状态值决定走哪条路的岔路口。
