1313
1414但真正上手做项目后,这些想法很快会被现实打脸。LLM 的输出天然不确定,单次生成往往不达标,工具调用随时可能失败,上下文窗口还有硬上限。你需要的不是“跑一遍就完事”的线性流程,而是一套能** 动态决策、自动修正、可控收敛** 的执行机制。
1515
16- 今天这篇文章就来梳理 AI 工作流中三个核心概念——** Workflow、Graph、Loop** ,帮你建立从概念到实现的完整认知。本文约 1w 字,建议收藏,通过本文你将搞懂:
16+ 今天这篇文章就来梳理 AI 工作流中三个核心概念——** Workflow、Graph、Loop** ,帮你建立从概念到实现的完整认知。本文约 1.9w 字,建议收藏,通过本文你将搞懂:
1717
18181 . ** 为什么 AI 系统需要工作流** :单轮对话和固定流程为什么不够用?动态决策、自动修正、可控收敛分别解决什么问题?
19192 . ⭐ ** Workflow、Graph、Loop 三者的层次关系** :Workflow 是目标与过程,Graph 是结构与载体,Loop 是图上的控制模式——三者如何协作?
22225 . ⭐ ** 从概念到代码** :Spring AI Alibaba 和 LangGraph 的概念映射表 + 完整的“生成→审核→修改”工作流代码实现。
23236 . ** 工作流设计的分水岭** :高抽象 vs 低抽象,Node、Edge、State 的抽象原则。
2424
25- > ** 📌 系列阅读** :本文是 AI Agent 系列的一部分,相关文章:
25+ > ** 系列阅读** :本文是 AI Agent 系列的一部分,相关文章:
2626>
2727> - [ AI Agent 核心概念:Agent Loop、Context Engineering、Tools 注册] ( https://javaguide.cn/ai/agent/agent-basis.html )
2828> - [ 大模型提示词工程实践指南] ( https://javaguide.cn/ai/agent/prompt-engineering.html )
3535
3636单轮对话虽然可以回答问题,但很难稳定地** 交付结果** 。在真实场景中,一个完整任务往往不仅仅是“生成答案”,还包含检索信息、调用工具、输出结构化结果、质量检查、失败重试,以及在结果不满意时进行多轮修正。这些行为本身就是系统结构的一部分,靠一段超长 Prompt 解决不了,需要一种** 可分支、可循环、可观测** 的执行路径。
3737
38- 传统软件流程通常是确定性的:输入固定、步骤固定、输出相对稳定。但 LLM 的特点恰恰相反——它“能力很强,但不完全稳定”。它可能答非所问、格式错误、产生幻觉,或者在调用工具时失败。这就引出了三个核心问题:
38+ 传统软件流程通常是确定性的:** 输入固定、步骤固定、输出相对稳定** 。但 LLM 的特点恰恰相反——它“能力很强,但不完全稳定”。它可能答非所问、格式错误、产生幻觉,或者在调用工具时失败。这就引出了三个核心问题:
3939
40401 . 下一步并不唯一,需要根据当前结果动态决策路径;
41412 . 当结果不理想时,系统需要自动修正,而不是直接失败;
@@ -113,7 +113,7 @@ AI 工作流与传统工作流的关键差异在于:路径选择依赖于运
113113| next_step | String | 控制流跳转节点(可选,部分框架如 Spring AI Alibaba 通过此字段配合条件边实现路由;其他框架如 LangGraph 通过条件边函数返回值路由,无需此字段) | 当前执行 |
114114| output | String | 最终输出结果 | 结束 |
115115
116- 如果只看 Node 和 Edge,我们会得到一张“ 能跑起来的路径图”;而把 State 一起放进来,我们才真正拥有了一张“可以在运行时做决策的图” 。
116+ 如果只看 Node 和 Edge,我们会得到一张” 能跑起来的路径图”;加上 State,这张图才能在运行时做决策 。
117117
118118总之图结构比线性结构更贴近 AI 系统的真实形态,因为很多 AI 应用的控制流本来就是图,只是早期常被临时写成 ` if-else ` 、重试逻辑或分散在不同模块里的状态机。
119119
@@ -142,7 +142,7 @@ AI 场景里,第二类通常更有代表性。因为“跑几次”往往不
142142
143143如果没有这些约束,Loop 很容易从“自我修正”变成“无限打转”。
144144
145- 仍然放回文章审核的例子里,Loop 不只是“多试几次”,它是“审核结论驱动下一跳”。只有当评分未达标、且还没超过最大轮次时,流程才会从 ` ReviewNode ` 回到 ` ReviseNode ` ;一旦达到阈值或触发边界条件,就应该退出并给出结果。这时我们看到的就不只是循环,而是一种可控的回溯机制 。
145+ 仍然放回文章审核的例子里,Loop 不只是“多试几次”,它是“审核结论驱动下一跳”。只有当评分未达标、且还没超过最大轮次时,流程才会从 ` ReviewNode ` 回到 ` ReviseNode ` ;一旦达到阈值或触发边界条件,就应该退出并给出结果。到这里,循环已经变成了一种可控的回溯机制 。
146146
147147## 五、概念整合:把 Workflow、Graph、Loop 串起来
148148
@@ -339,7 +339,7 @@ public static CompiledGraph buildWorkflow(ChatModel chatModel) throws GraphState
339339
340340![ 高抽象与低抽象工作流对比] ( https://oss.javaguide.cn/github/javaguide/ai/workflow/abstraction-comparison.svg )
341341
342- 上图可以看到高抽象工作流将四个判断节点抽象成一个判断节点:评估是否达标。如果使用低抽象,那么当我们需要减少/添加新的判断节点时,需要花费时间去阅读源码寻找对应的节点。好的工作流不在于步骤多少,而在于 Node、Edge、State 的抽象是否经得起复用与扩展 。
342+ 上图可以看到高抽象工作流将四个判断节点抽象成一个判断节点:评估是否达标。如果使用低抽象,那么当我们需要减少/添加新的判断节点时,需要花费时间去阅读源码寻找对应的节点。好的工作流关键看 Node、Edge、State 的抽象能否经得起复用与扩展,和步骤多少关系不大 。
343343
344344很多初学者设计工作流时,容易把每一步都写成具体动作,例如:调用模型生成文案;检查标题长度;检查语气是否合适;判断是否需要补资料;再调用模型修改。这样做短期可用,但流程会越来越碎,复用性也很差。更成熟的方式是把流程抽象到更稳定的结构层:
345345
@@ -409,7 +409,7 @@ Loop 会自然放大 token 与延迟。设计时要提前思考:
409409
410410## 九、总结
411411
412- 用这套视角看问题,工作流就不只是可视化画布上的箭头图,而是一种工程建模能力 。常见演进方向包括:
412+ 用这套视角看问题,工作流就是一种工程建模能力 。常见演进方向包括:
413413
414414- ** Agent 化** :节点从「固定脚本」变成「能自主选工具、拆子目标」的执行单元,但底层仍需要清晰的图与状态边界,否则难以观测与兜底。
415415- ** 多智能体协作** :多个角色分工、对话或委托;与 CrewAI、LangGraph 多子图等思路一致,难点往往在** 共享 State 的权限** 与** 冲突解决** 。
@@ -421,4 +421,4 @@ Loop 会自然放大 token 与延迟。设计时要提前思考:
421421 - ** 工具调用的权限边界** :遵循最小权限原则,每个节点只能访问其任务所需的工具,高风险操作(删除、发送)需通过人机协同节点确认。
422422 - ** 输出内容安全过滤** :LLM 输出在进入下游系统(数据库、前端渲染、Shell 命令)前必须经过校验,防止注入攻击、隐私泄露和幻觉传播。
423423
424- 工作流框架会换代,但「图结构 + 状态 + 可控循环」这层抽象会持续存在,所以我们需要深入思考这种思想,摒弃框架思维 。
424+ 工作流框架会换代,但「图结构 + 状态 + 可控循环」这层抽象会持续存在。理解这套底层机制,比追逐具体框架更有价值 。
0 commit comments