LangGraph 是什么?为什么 Agent 一复杂,很多人就从 LangChain 走向了它
昨天我们先把 LangChain 放回了它该在的位置:它不是让模型更聪明,而是在帮你把模型、工具、上下文和执行流程组织成一个系统。但问题也正是在这里开始出现的。因为当 Agent 不再只是线性执行几步,而是开始带状态、会分支、能回流、需要反复判断时,单纯“链式理解”就不太够了。这时候,很多人就会继续遇到另一个名字:LangGraph。
前一篇我们讲了 LangChain。
核心结论其实很简单:
它擅长把一条调用链组织起来。
这对于很多 LLM 应用已经很有价值。
比如:
- 调一次模型生成内容
- 把输出交给下一步处理
- 接一个搜索或数据库工具
- 把多步流程串起来
如果任务结构相对清楚、步骤顺序也比较稳定,这种链式组织方式很自然。
但问题是,真正的 Agent 往往不会一直这么“线性”。
它常常会出现这些情况:
- 走到某一步要先判断再决定下一步
- 某个工具失败了,要不要重试
- 某个结果不合格,要不要回去重做
- 不同状态下,要走不同分支
- 整个系统需要记住当前进行到哪
这时候你就会发现:
Agent 真正难的地方,不只是把步骤连起来,而是把状态、分支和回流也组织起来。
这也是 LangGraph 出现的背景。
一、先说结论:LangGraph 不是在替代 LangChain,而是在处理更复杂的执行结构
很多人第一次看到 LangGraph,会以为它是“另一个框架”,甚至会问:
那是不是学了 LangGraph,就不用看 LangChain 了?
这种理解不太准确。
更合理的看法是:
LangGraph 不是在否定 LangChain,而是在补足链式结构不够表达的那一部分。
前面讲 LangChain 时,我们强调的是“链”。
链很适合表达这种结构:
- 先做 A
- 再做 B
- 再做 C
但一旦任务变成:
- 先做 A
- 根据 A 的结果决定去 B 还是去 C
- 如果 B 失败,回到 A 或换路径
- 如果结果没过检查,再回到上一步
你就会发现,线性链路已经不够自然了。
这时更适合的思路,不再是“一条链”,而是:
一个由节点、状态和边组成的执行图。
这就是 LangGraph 想解决的问题。
二、为什么很多 Agent 一复杂,就要从“链”走向“图”
因为 Agent 和很多普通流程最大的区别在于:
它不是只执行固定顺序,而是会在过程中不断判断、转向、重试和更新状态。
比如一个更真实的 Agent 流程,可能会这样:
- 先理解任务
- 形成初步计划
- 调工具拿信息
- 检查信息够不够
- 不够就继续查
- 够了再产出结果
- 结果不合格就回去重做某一步
你会发现,这种结构里最重要的已经不是“第几步”,而是:
- 当前处于什么状态
- 下一步该往哪里走
- 哪些情况要回退
- 哪些情况要终止
这就是“图”比“链”更适合的地方。
链更像一条路。
图更像一个路网。
当你的系统需要的不只是往前走,而是要在不同路径之间切换时,图的表达能力就会更强。
三、LangGraph 最适合理解成什么
如果用一句尽量不绕的话来解释,我会建议你把 LangGraph 理解成:
一个用图结构来组织 Agent 执行过程的框架。
这里有三个关键词。
1. 节点
你可以把一个节点理解成系统里的某个动作或处理单元。
比如:
- 分析任务
- 生成计划
- 调用搜索
- 检查结果
- 输出答案
2. 边
边代表节点之间怎么连接,也就是从这一步之后,系统可以走向哪一步。
它可以是固定连接,也可以是带条件的连接。
3. 状态
这是最关键的一层。
因为很多 Agent 的核心,不只是“做了什么”,而是“当前知道了什么、确认了什么、还缺什么”。
状态决定了系统接下来应该往哪走。
所以如果说 LangChain 更容易让人想到“把步骤串起来”,那 LangGraph 更强调的是:
把执行路径和状态流转一起组织起来。
四、LangGraph 为什么特别适合 Agent
因为 Agent 本身就天然带有几类图结构特征。
1. 它经常需要条件分支
不是所有任务都会走一样的路径。
例如:
- 信息足够就直接生成结果
- 信息不够就继续搜索
- 工具失败就改走备用路径
如果没有分支能力,系统就很容易被写成一堆硬编码判断,后面越来越乱。
2. 它经常需要回流和重试
真实任务不会永远一次成功。
一个结果没过检查,常常要回到前一步重做。
一个工具失败,也可能要重试或换工具。
这种“往回走”的能力,本来就是很多 Agent 稳定性的关键。
3. 它经常依赖中间状态
前面做过什么、确认了什么、还缺哪些信息,这些都会影响下一步。
所以 Agent 不是只靠当前输入做决定,而是要靠持续演进的状态做决定。
4. 它更适合做长期可维护的流程设计
当系统逐渐变复杂时,很多问题不是“能不能跑”,而是:
- 能不能看懂
- 能不能改
- 出问题时能不能定位
图结构在这里的价值,不只是更强大,也更容易把系统结构显性化。
五、它和 LangChain 的关系,最容易误解在哪里
最容易误解的一点是,把它们理解成互斥关系。
好像用了 LangGraph,就不需要 LangChain;或者学 LangChain 就等于没必要再看 LangGraph。
其实更现实的理解是:
- LangChain 更像通用的组件和编排基础
- LangGraph 更像在更复杂 Agent 场景下,提供状态化图式执行能力
换句话说,LangGraph 解决的是更靠近“Agent 运行机制”的那一层问题。
所以它们不是简单替代关系,而更像是复杂度提升后的自然延伸。
如果你昨天那篇已经理解了 LangChain 在做“搭骨架”的事,那今天这篇可以把 LangGraph 理解成:
当骨架开始不再只是直线,而变成带分支和回流的结构时,需要更适合的组织方式。
六、为什么很多人会说:LangGraph 更像真正的 Agent 框架
这句话有一定道理,但也容易被说得太绝对。
大家会有这种感受,主要是因为它更贴近 Agent 的几个核心特征:
- 有状态
- 有分支
- 有循环
- 有回流
- 有更明确的运行路径
这些东西,在更高级的 Agent 系统里非常常见。
所以很多人会觉得,到了这一步,系统终于不只是“把几次调用串起来”,而是开始更像一个真正会运行的执行体。
但这并不意味着它就天然更高级、更万能。
框架再合适,也只是表达结构的工具。
真正决定系统好不好用的,仍然是:
- 任务设计得对不对
- 状态定义得清不清楚
- 分支条件合不合理
- 检查和回退机制有没有做好
也就是说,
LangGraph 更像真正 Agent 框架,不是因为名字更酷,而是因为它更适合表达 Agent 的运行结构。
七、什么情况下你才真的需要 LangGraph
不是所有项目一上来都需要它。
如果你现在做的是这种场景:
- 单轮问答
- 简单内容生成
- 线性流程处理
- 一两步工具调用
那用更简单的方式往往就够了。
但如果你开始遇到下面这些问题,LangGraph 的价值就会明显上来:
1. 流程不再是线性的
只要你开始有多个分支路径,就已经不再适合只用单条链去硬扛。
2. 系统要根据中间结果动态转向
不是预先写死每一步,而是要根据执行中的状态判断下一步去哪。
3. 任务里有明显的回流机制
结果不合格要回退、工具失败要重试、信息不足要继续补,这些都更适合图结构表达。
4. 你开始在意系统的可观察、可调试、可维护
图结构的一个重要好处,是更容易把系统路径显性化。
这对排查问题、解释失败、优化流程都很重要。
八、如果只记住一句话,应该记住什么
如果今天你只想记住一句最关键的话,我会建议你记这个:
LangChain 更适合把步骤串起来,LangGraph 更适合把带状态、可分支、可回流的 Agent 运行过程组织起来。
这就是它们最核心的区别。
也是为什么很多人会从 LangChain 自然走到 LangGraph。
不是因为前者错了,而是因为系统复杂度变了。
一旦复杂度变了,组织方式也必须跟着升级。
九、怎么学 LangGraph,才不会一上来又学乱
一个更稳的学习顺序是:
第一步:先别急着看 API,先看它在解决什么结构问题
你先问自己:
- 我的任务有没有状态
- 有没有分支
- 有没有回流
- 有没有中间检查和重试
如果这些问题开始出现,你就能明白它为什么存在。
第二步:把它和前面讲过的 Agent 能力连起来
前面讲过的规划、记忆、评估、调试,其实都和 LangGraph 很相关。
因为图结构不是为了“画得好看”,而是为了更清楚地承载这些能力:
- 规划决定可能路径
- 记忆和状态决定当前处境
- 检查决定是否回流
- 调试决定你能不能看懂系统卡在哪
第三步:把它理解为一种更适合复杂 Agent 的工程表达方式
不要把它学成一个新的名词集合。
真正重要的是理解:
为什么当 Agent 从线性流程,走向状态化执行时,图结构会变得更自然。
如果说昨天那篇是在回答:
怎么把 Agent 的调用链搭起来。
那今天这篇就在回答:
当 Agent 不再只是直线往前跑,而是开始分支、回流、带状态运行时,应该怎么把它组织起来。
这也是 LangGraph 最值得理解的地方。
后面如果继续往下讲,再往下一步就可以自然进入另一个问题:
当 Agent 不只是一个执行体,而开始变成多个角色协作时,为什么大家又会继续看到 AutoGen 和 CrewAI?
因为那时候,问题就不再只是“单个 Agent 怎么跑”,而是“多个 Agent 怎么配合”。
📚 完整学习路径:GitHub 搜索agent-learning-path