从链到图:理解LangChain与LangGraph的演进与分工
简单来说,LangChain 是一个用于构建 LLM 应用的程序框架,而 LangGraph 是构建在 LangChain 之上,用于创建具有复杂、有状态工作流的框架。
可以把它们理解为:
- LangChain:像 乐高积木,提供了丰富的标准化组件(模型、提示、检索器、链等),让你能快速组装一个应用。
- LangGraph:像 乐高说明书 或 电路图,它定义了这些组件如何以复杂的方式连接和协作,尤其是当需要循环、分支和状态管理时。
一、LangChain:应用组装框架
1.1、核心思想
通过“链”将多个模块串联起来,完成一个复杂的任务。
1.2、主要特色
- “链”
- 这是 LangChain 的核心抽象。一个链就是将多个组件按顺序组合在一起,例如:PromptTemplate -> LLM -> OutputParser。
- 适合线性或有向无环图 的工作流。-
2. 代理
- 代理是使用LLM作为“大脑”来决定下一步执行什么“工具”的组件。它引入了循环的能力(思考 -> 行动 -> 观察 -> 再思考),但这在原生 LangChain 中相对基础。
3. 应用场景
- 构建一个简单的问答机器人。
- 创建一个根据用户查询检索文档并总结的流程。
- 快速搭建一个连接了各种工具(如搜索引擎、计算器)的代理。
1.3、局限性
- 对于复杂、有状态、多分支的工作流,用传统的“链”来构建会非常笨重和困难。
- 代理的循环控制逻辑相对简单,难以实现精细化的流程控制。
二、LangGraph:有状态工作流引擎
1.1、核心思想
受 Netflix 的 Conductor 和 Apache Airflow 等工作流引擎的启发,它明确地将控制流和状态管理作为一等公民。
1.2、主要特色
- 图结构
- 应用被定义为一个图,节点是函数或LCEL的Runnable,边定义了流程的走向。
- 天然支持循环、条件分支和并行执行。
2. 有状态性
- 这是与 LangChain 最大的不同。LangGraph 明确维护一个共享状态,所有节点都可以读取和修改这个状态。
- 状态通过 Pydantic 模型定义,确保了类型安全和清晰的数据结构。
3. 循环和条件
- 可以轻松实现“在条件A满足时,跳回节点N重试”的逻辑。
- 这是构建复杂代理的关键。例如,一个代理可以循环使用工具,直到任务完成或达到最大迭代次数。
4. 人机交互
- 内置了对“中断”的支持,可以暂停工作流,等待人类用户的输入,然后再继续执行。这对于需要人工审核或提供额外信息的流程至关重要。
5. 持久化
- 可以轻松地保存和加载工作流的状态,实现长对话或长任务的持久化。
1.3、应用场景
- 多角色代理:模拟一个团队,有研究员、写手、审核员,他们之间需要协作和循环修改。
- 复杂决策流程:根据模型的输出或外部条件,动态决定下一步是调用工具A、工具B,还是结束流程。
- 需要回溯或重试的流程:例如,如果工具调用失败,自动重试或选择备用方案。
- 需要人工介入的审批流程。
三、LangChain & LangGraph 区别对比
| 特性 | LangChain | LangGraph |
|---|---|---|
| 核心抽象 | 链,代理 | 图,有状态工作流 |
| 控制流 | 主要是线性/顺序,代理有简单循环 | 任意控制流(循环、分支、并行) |
| 状态管理 | 隐式,通过链传递 | 显式共享状态,通过状态机管理 |
| 设计哲学 | 组装应用:提供构建模块 | 编排流程:定义模块间的复杂交互 |
| 复杂度 | 适合轻到中度复杂应用 | 专为中到高度复杂、有状态的应用设计 |
| 与对方关系 | 是基础 | 构建在 LangChain 之上,增强其能力 |

浙公网安备 33010602011771号