从链到图:理解LangChain与LangGraph的演进与分工

简单来说,LangChain 是一个用于构建 LLM 应用的程序框架,而 LangGraph 是构建在 LangChain 之上,用于创建具有复杂、有状态工作流的框架。

可以把它们理解为:

  • LangChain:像 乐高积木,提供了丰富的标准化组件(模型、提示、检索器、链等),让你能快速组装一个应用。
  • LangGraph:像 乐高说明书 或 电路图,它定义了这些组件如何以复杂的方式连接和协作,尤其是当需要循环、分支和状态管理时。

一、LangChain:应用组装框架

1.1、核心思想

通过“链”将多个模块串联起来,完成一个复杂的任务。

1.2、主要特色

  1. “链”
  • 这是 LangChain 的核心抽象。一个链就是将多个组件按顺序组合在一起,例如:PromptTemplate -> LLM -> OutputParser
  • 适合线性或有向无环图 的工作流。-

2. 代理

  • 代理是使用LLM作为“大脑”来决定下一步执行什么“工具”的组件。它引入了循环的能力(思考 -> 行动 -> 观察 -> 再思考),但这在原生 LangChain 中相对基础。

3. 应用场景

  • 构建一个简单的问答机器人。
  • 创建一个根据用户查询检索文档并总结的流程。
  • 快速搭建一个连接了各种工具(如搜索引擎、计算器)的代理。

1.3、局限性

  • 对于复杂、有状态、多分支的工作流,用传统的“链”来构建会非常笨重和困难。
  • 代理的循环控制逻辑相对简单,难以实现精细化的流程控制。

二、LangGraph:有状态工作流引擎

1.1、核心思想

受 Netflix 的 Conductor 和 Apache Airflow 等工作流引擎的启发,它明确地将控制流和状态管理作为一等公民。

1.2、主要特色

  1. 图结构
  • 应用被定义为一个图,节点是函数或LCEL的Runnable,边定义了流程的走向。
  • 天然支持循环、条件分支和并行执行。

2. 有状态性

  • 这是与 LangChain 最大的不同。LangGraph 明确维护一个共享状态,所有节点都可以读取和修改这个状态。
  • 状态通过 Pydantic 模型定义,确保了类型安全和清晰的数据结构。

3. 循环和条件

  • 可以轻松实现“在条件A满足时,跳回节点N重试”的逻辑。
  • 这是构建复杂代理的关键。例如,一个代理可以循环使用工具,直到任务完成或达到最大迭代次数。

4. 人机交互

  • 内置了对“中断”的支持,可以暂停工作流,等待人类用户的输入,然后再继续执行。这对于需要人工审核或提供额外信息的流程至关重要。

5. 持久化

  • 可以轻松地保存和加载工作流的状态,实现长对话或长任务的持久化。

1.3、应用场景

  1. 多角色代理:模拟一个团队,有研究员、写手、审核员,他们之间需要协作和循环修改。
  2. 复杂决策流程:根据模型的输出或外部条件,动态决定下一步是调用工具A、工具B,还是结束流程。
  3. 需要回溯或重试的流程:例如,如果工具调用失败,自动重试或选择备用方案。
  4. 需要人工介入的审批流程。

三、LangChain & LangGraph 区别对比

特性LangChainLangGraph
核心抽象 链,代理 图,有状态工作流
控制流 主要是线性/顺序,代理有简单循环 任意控制流(循环、分支、并行)
状态管理 隐式,通过链传递 显式共享状态,通过状态机管理
设计哲学 组装应用:提供构建模块 编排流程:定义模块间的复杂交互
复杂度 适合轻到中度复杂应用 专为中到高度复杂、有状态的应用设计
与对方关系 是基础 构建在 LangChain 之上,增强其能力
posted @ 2025-10-28 13:57  rslai  阅读(9)  评论(0)    收藏  举报