一文讲清 Chain、LCEL、LangGraph 和 Workflow 的关系
很多人在学习 LangChain 或 LangGraph 时,最容易混淆的就是这几个概念:
- Chain 是什么?
- LCEL 是什么?
- LangGraph 又是什么?
- Workflow 和它们到底是什么关系?
表面上看,它们都像是在“搭 Agent”,但实际上分工并不一样。理解这几个概念的边界,才能真正知道一个 Agent 系统到底是怎么跑起来的。
这篇文章想做的事情很简单:先把 Chain、LCEL、LangGraph、Workflow 分别讲清楚,再把它们之间的关系串起来。
一、Chain:完整的端到端调用链
最基础的概念其实是 Chain。
所谓 Chain,本质上就是一次完整的端到端输入输出流程。也就是:用户给输入,系统经过一系列处理,最后产出结果。
一个典型的 Chain 可以长这样:
1 | |
简单一点时,也可能只是:
1 | |
如果再复杂一些,Chain 里还可以继续塞进:
- 知识库检索
- 工具调用
- 输出解析
- 后处理逻辑
所以你可以把 Chain 理解成:
把多个处理步骤串起来,形成一个完整调用过程。
Chain 关注的核心问题是:
从输入到输出,这条链路怎么走完?
二、LCEL:组织组件流水线的表达方式
LCEL 可以理解为 LangChain 里一种专门写“链”的方式。
它最核心的特点就是:把组件像管道一样串起来。
例如:
1 | |
或者:
1 | |
这种写法非常直观,所以很多人会把 LCEL 理解成“新版写 Chain 的方式”。这个理解不算错,但还可以更准确一点:
LCEL 是一种声明式的链式表达语言,用来组织组件流水线。
它特别适合做这些事情:
- Prompt 模板拼接
- 模型调用
- 输出解析
- 简单工具接入
- 线性的数据流处理
所以 LCEL 的强项在于:
- 写起来简洁
- 组件复用方便
- 非常适合标准化、线性的处理流程
如果要压缩成一句话:
LCEL = 组件级别的流水线编排工具。
三、LangGraph:面向 Agent 的流程编排器
如果说 LCEL 擅长的是“线性流水线”,那么 LangGraph 擅长的就是“复杂流程控制”。
一个真实 Agent 往往不是一次 prompt | llm 就能结束的,它常常需要:
- 先思考一下
- 判断当前结果对不对
- 不对就回退重试
- 再调用工具
- 拿到工具结果后继续推理
- 必要时暂停,等待用户输入
- 保存中间状态
- 甚至让多个角色协作完成任务
这些都不是简单的线性链路,而是一个带状态、带分支、可能循环的执行图。
这正是 LangGraph 要解决的问题。
LangGraph 可以理解为:
一个专门为 Agent 设计的流程编排器。
它的核心能力一般包括:
- State:保存执行过程中的状态和记忆
- Node:定义每一个步骤
- Edge:定义步骤之间怎么流转
- Conditional Edge:根据条件决定下一步走哪里
- Loop:支持反复思考、反复调用
- Human-in-the-loop:支持中途暂停,等待用户介入
所以,LangGraph 更适合解决这类问题:
- 多步推理
- 反思与重试
- 工具循环调用
- 多智能体协作
- 长流程状态管理
- 可恢复执行
四、LCEL 和 LangGraph 到底是什么关系
很多人最困惑的就是这里。
一句话讲清楚:
LCEL 是组件流水线,LangGraph 是流程编排器。
LangGraph 可以调用 LCEL,而 LCEL 往往只是 LangGraph 图中的一个节点。
也就是说,两者不是竞争关系,而是上下层关系。
你可以这样理解:
- LCEL 负责把某一个具体步骤做好
例如“把 prompt、llm、parser 串成一个处理单元” - LangGraph 负责决定整个流程怎么走
例如“先检索,再推理,不行就调用工具,失败就重试,成功就结束”
所以:
- LCEL 解决的是单步处理
- LangGraph 解决的是多步流程控制
你甚至可以把 LangGraph 中的某个 Node,直接写成一个 LCEL Chain。
例如:
- 节点 A:检索知识库
- 节点 B:调用一个 LCEL 链做总结
- 节点 C:判断是否需要继续调用工具
- 节点 D:输出最终答案
这时候,LCEL 就是 LangGraph 图中的一个可复用处理单元。
五、LangGraph 到底解决了什么问题
如果只用 LCEL,你能做的通常是:
1 | |
这类流程本质上是线性的。
但真实 Agent 往往不是这样的,它更像:
1 | |
甚至可能还要:
1 | |
这时候问题已经不再是“怎么把几个组件串起来”,而是:
- 下一步到底该走哪条路?
- 什么时候该循环?
- 什么时候该结束?
- 中间状态要怎么保存?
- 出错之后怎么恢复?
- 用户中途插话怎么办?
这些问题,LCEL 本身并不擅长处理,而 LangGraph 从设计上就是为这些需求准备的。
所以可以总结为:
LCEL 更擅长处理
- 线性流程
- 固定步骤
- 明确输入输出
LangGraph 更适合处理
- 非线性流程
- 条件分支
- 循环反思
- 多角色协作
- 中断与恢复
- 持久状态
六、Workflow 才是决定 Agent 水平的关键
这里还有一个非常容易被忽略的点:
真正决定 Agent 是否聪明、是否稳定的,不是框架本身,而是你写的 Workflow。
很多人以为用了 LangGraph,Agent 就自动变聪明了。其实不是。
LangGraph 只是一个框架,它提供的是基础能力:
- State:让你存状态
- Node:让你拆步骤
- Edge:让你连接流程
但它不会替你设计业务逻辑。
比如下面这些关键问题,框架都不会替你决定:
- 什么时候查知识库?
- 什么时候调用工具?
- 什么时候让模型先规划再执行?
- 什么时候进入多轮迭代?
- 什么时候结束?
- 出错了怎么兜底?
- 结果质量不好时要不要重试?
- 不同任务类型该走哪条路径?
这些,统统都属于 Workflow 设计。
也就是说:
框架只提供能力,Workflow 才提供智能。
一个 Agent 做得稳不稳定、聪不聪明,核心不在于你用了 LCEL 还是 LangGraph,而在于你有没有把流程设计好。
七、一句话总结四者关系
最后用最简单的话收一下。
Chain
是一次完整的端到端调用链。
LCEL
是写 Chain 的一种组件流水线方式,适合线性流程。
LangGraph
是流程编排器,适合带状态、分支、循环和多智能体的复杂 Agent。
Workflow
是你自己设计的业务执行逻辑,决定 Agent 到底聪不聪明、稳不稳定。
八、一个最直观的理解方式
你可以把它们类比成“做菜”:
- Chain:做出一道菜的完整过程
- LCEL:把“切菜 → 下锅 → 调味”串成流水线
- LangGraph:决定先做哪道菜、失败要不要重做、下一步做什么
- Workflow:整套厨房作业流程设计,决定这家餐厅水平高不高
所以真正的关系是:
Chain 是结果形态,LCEL 是线性组装方式,LangGraph 是流程控制框架,Workflow 是你自己设计的核心逻辑。
九、适合放在文末的结论
如果你的任务只是:
- Prompt
- 调模型
- 拿结果
那 LCEL 往往就够了。
但如果你的任务开始出现下面这些需求:
- 多轮思考
- 工具反复调用
- 条件分支
- 中间状态保存
- 多角色协作
- 人工介入
那你就已经进入了 LangGraph 的适用范围。
不过无论你用不用 LangGraph,最终决定 Agent 上限的,始终不是框架,而是你设计出来的 Workflow。
真正把这些关系理顺之后,你会发现:Agent 系统里最重要的不是“选哪个词”,而是能不能把“组件、流程、状态、业务逻辑”放回同一张图里理解。