LangGraph vs 普通链式调用
先给结论
只要你的流程还是单向、固定、几步就能讲清楚,继续用普通链式调用。
当流程开始出现分支、循环、状态累积、失败重试或人工介入时,再考虑 LangGraph。
LangGraph 不是“更高级的链”,而是处理复杂流程组织问题的工具。
一句话区分
- 普通链式调用适合线性任务
LangGraph适合有状态、可分支、可恢复的工作流
快速对比
| 维度 | 普通链式调用 | LangGraph |
|---|---|---|
| 流程结构 | 线性 | 图结构 |
| 状态表达 | 隐含在调用过程里 | 显式状态对象 |
| 分支与重试 | 可以做,但会逐渐变乱 | 天然更适合表达 |
| 调试视角 | 看单条链路 | 看节点、状态和转移 |
| 适合阶段 | 早期原型、固定任务 | 多路径、长流程、需要恢复的系统 |
什么时候继续坚持普通链
- 用户请求类型比较单一
- 整个过程可以稳定描述成 3 到 5 步
- 失败处理很简单,不需要复杂回退
比如:
- 主题输入后生成学习摘要
- 问题输入后检索资料再回答
- 把固定的结构化结果渲染成页面模块
这些任务即使很重要,也不代表必须引入图结构。
什么信号说明该升级到 LangGraph
- 你开始写很多
if/else决定下一步 - 某一步失败后,需要根据情况重试或走兜底逻辑
- 流程依赖多个中间结果,而且后面步骤要读这些状态
- 你需要看见系统究竟走了哪条路径
如果这些信号已经出现,继续硬撑在线性链里,维护成本通常只会越来越高。
结合 AI 学习助手主线来看
适合普通链的阶段
V1学习计划生成- 基础 RAG 问答
- 固定格式的结构化输出
更适合 LangGraph 的阶段
- 先判断问题类型,再决定走目录查询、RAG 还是工具调用
- 检索失败后进入兜底或澄清路径
- 需要记录节点执行历史,便于调试和观测
这正是第 8 章引入 LangGraph 的原因: 不是为了换一种写法,而是因为系统复杂度已经超过普通链最舒服的区间。
常见误判
误判 1:流程一复杂就必须上 LangGraph
不一定。
如果复杂度还可以通过少量稳定链和外层普通代码管理,就不必过早引入图。
误判 2:LangGraph 会让结果更聪明
不会直接让模型更聪明。
它改善的是流程可控性、状态可见性和复杂逻辑组织方式。
误判 3:普通链没法做条件判断
当然可以做,只是当判断越来越多时,可读性和可维护性会明显下降。
一个实用决策法
如果你现在还能把系统画成一条箭头:
输入 -> 处理 -> 输出
那就继续用链。
如果你已经不得不画成:
输入 -> 分类 -> 路由 -> 执行 -> 失败重试/澄清 -> 汇总
那就是 LangGraph 更合适的信号。
对应回看章节
- 想看线性流程的最小形态: 第 3 章:第一个链式应用
- 想看为什么复杂系统要显式状态和节点: 第 8 章:LangGraph 工作流