支持私有云部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


用LangChain还是LangGraph?官方终于站出来表态了

发布日期:2025-03-16 20:02:42 浏览次数: 1869 来源:PyTorch研习社
推荐语

探索构建LLM应用的两大流行框架,LangChain和LangGraph的区别与应用场景。

核心内容:
1. LangChain和LangGraph在构建LLM应用中的角色和区别
2. LangChain的基础组件及其应用方式
3. LangGraph的工作流组织方式和核心优势

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

无论是个人还是企业,当我们想要使用 LLM(大模型)的功能开发出有趣或者有价值的应用时,第一个技术问题通常是“使用什么工具?”


在本文中,我们将深入探讨用于构建 LLM 应用程序的两个最流行的框架:LangChain 和 LangGraph。


现在生成式 AI 的开发正处于井喷时期,几乎每天都会出现各种新框架和新技术,所以各位在阅读本文时请记住,今天是正确的,明天可能就不正确了!






LangChain 和 LangGraph 的基础组件  




通过理解每个框架的不同基础元素,你将更深入地理解它们在处理某些核心功能方面的关键区别。本节的描述并未穷尽列出每个框架的所有组件,而是为理解它们的整体方法差异提供了一个坚实的基础。


LangChain


使用 LangChain 主要有两种方式:预定义命令的顺序链(Chain)和 LangChain Agent。这两种方式在工具和编排方式上有所不同。采用预定义的线性工作流,而 Agent 则充当一个协调者,可以进行更具动态性(非线性)的决策。

  • Chain(链):一系列步骤的组合,这些步骤可以包括调用 LLM、Agent、工具、外部数据源、过程式代码等。链可以分支,即根据逻辑条件将单一流程拆分为多个路径。

  • Agent 或 LLM:LLM 本身能够生成自然语言响应,而 Agent 则结合了 LLM 与额外能力,使其能够进行推理、调用工具,并在调用工具失败时重复尝试。

  • Tool(工具):是可以在链中被调用的代码函数,或由 Agent 触发,以与外部系统交互。

  • Prompt(提示词)包括系统提示词(用于指示模型如何完成任务以及可用工具)、来自外部数据源的注入信息(为模型提供更多上下文)、以及用户的输入任务。


LangGraph


LangGraph 采用了一种不同的方法来构建 AI 工作流。正如其名称所示,它以图(Graph)的方式编排工作流由于其在 AI Agent、过程式代码和其他工具之间的灵活处理能力,它更适用于线性链、分支链或简单 Agent 系统难以满足需求的复杂应用场景。LangGraph 设计用于处理更复杂的条件逻辑反馈循环,比 LangChain 更加强大。

  • Graph(图)是一种灵活的工作流组织方式,支持调用 LLM、工具、外部数据源、过程式代码等。LangGraph 还支持循环图(Cyclical Graph),即可以创建循环和反馈机制,使得某些节点能够被多次访问。

  • Node(节点)表示工作流中的步骤,例如 LLM 查询、API 调用或工具执行。

  • Edge(边)和 Conditional Edge(条件边):边用于连接节点,定义信息流向,使一个节点的输出作为下一个节点的输入。条件边允许在满足特定条件时,将信息从一个节点流向另一个节点。开发者可以自定义这些条件。

  • State(状态)表示应用程序的当前状态,随着信息在图中流动而更新。状态是一个开发者定义的可变 TypedDict 对象,包含当前执行图所需的所有相关信息。LangGraph 会在每个节点自动更新状态。

  • Agent 或 LLM:图中的 LLM 仅负责对输入生成文本响应。而 Agent 能力则允许图中包含多个节点,分别代表 Agent 的不同组件(如推理、工具选择和工具执行)。Agent 可以决定在图中采取哪条路径、更新图的状态,并执行比单纯文本生成更多的任务


相比之下,LangChain 更适合线性和基于工具的调用,而 LangGraph 更适合复杂的、多路径和具有反馈机制的 AI 工作流




各框架在核心功能处理方式上的区别  




LangGraph 和 LangChain 在某些能力上有所重叠,但它们处理问题的方式有所不同。LangChain 主要关注线性工作流(通过链)不同的 AI Agent 模式,而 LangGraph 则专注于创建更灵活、细粒度的、基于流程的工作流,其中可以包含 AI Agent、工具调用、过程式代码等。


总体而言,LangChain 的学习曲线相对较低,因为它提供了更多的抽象封装预定义配置,这使得 LangChain 更容易应用于简单的使用场景。而 LangGraph 则允许对工作流设计进行更细粒度的定制,这意味着它的抽象程度较低,开发者需要学习更多内容才能有效使用


工具调用(Tool Calling)


LangChain


在 LangChain 中,工具的调用方式取决于是在链中按顺序执行一系列步骤,还是仅使用 Agent 能力(不在中明确定义)

  • 在链中,工具是作为预定义步骤包含的,这意味着它们并不一定是由 Agent 动态调用的,而是在链设计时就已决定了调用哪些工具。

  • 当 Agent 不在链中定义时,Agent 具有更大的自主性,它可以根据自己可访问的工具列表,决定调用哪个工具以及何时调用


链方式的流程示例



Agent 方式的流程示例:



LangGraph


在 LangGraph 中,工具通常被表示为上的一个节点。如果图中包含一个 Agent,那么 Agent 负责决定调用哪个工具,这一决策基于其推理能力。当 Agent 选择了某个工具后,工作流会跳转到对应的“工具节点”(Tool Node),以执行该工具的操作。在 Agent 和工具节点之间的边可以包含条件逻辑(Conditional Logic),从而增加额外的判断逻辑,以决定是否执行某个工具。这样,开发者可以拥有更精细的控制能力。如果图中没有 Agent,那么工具的调用方式类似于 LangChain 的链,即根据预定义的条件逻辑在工作流中执行工具


包含 Agent 的图流程示例




没有 Agent 的图的流程示例:





对话历史和记忆  



LangChain


LangChain 提供内置的抽象层来处理对话历史和记忆。它支持不同粒度级别(granularity)的记忆管理,从而控制传递给 LLM 的 token 数量,主要包括以下几种方式:

  • 完整的会话历史(Full session conversation history)
  • 摘要版本的对话历史(Summarized conversation history)
  • 自定义定义的记忆(Custom defined memory)

此外,开发者还可以自定义长期记忆系统,将对话历史存储在外部数据库中,并在需要时检索相关记忆。


LangGraph


在 LangGraph 中,State(状态)负责管理记忆,它通过记录每个时刻定义的变量来跟踪状态信息。State 可以包括:

  • 对话历史
  • 任务执行的各个步骤
  • 语言模型上一次的输出结果
  • 其他重要信息


State 可以在节点之间传递,这样每个节点都能获取当前系统的状态。然而,LangGraph 本身不提供跨会话的长期记忆功能,如果开发者需要持久化存储记忆,可以引入特定的节点,用于将记忆和变量存入外部数据库,以便后续检索。




开箱即用的 RAG 能力  



LangChain


LangChain 原生支持复杂的 RAG 工作流,并提供了一套成熟的工具,方便开发者将 RAG 集成到应用程序中。例如,它提供了:

  • 文档加载(Document Loading)
  • 文本解析(Text Parsing)
  • Embedding 生成(Embedding Creation)
  • 向量存储(Vector Storage)
  • 检索能力(Retrieval Capabilities)


开发者可以直接使用 LangChain 提供的 API(如 langchain.document_loaderslangchain.embeddings 和 langchain.vectorstores)来实现 RAG 工作流。


LangGraph


在 LangGraph 中,RAG 需要开发者自行设计,并作为图结构的一部分实现。例如,开发者可以创建单独的节点,分别用于:

  • 文档解析(Document Parsing)
  • Embedding 计算(Embedding Computation)
  • 语义检索(Retrieval)


这些节点之间可以通过普通边(Normal Edges)或条件边(Conditional Edges)进行连接,而各个节点的状态可以用于传递信息,以便在 RAG 流水线的不同步骤之间共享数据。



并行处理(Parallelism)  



LangChain


LangChain 允许并行执行多个链或 Agent,可以使用 RunnableParallel 类来实现基本的并行处理。


但如果需要更高级的并行计算异步工具调用,开发者需要使用 Python 库( asyncio)自行实现


LangGraph


LangGraph 天然支持并行执行节点,只要这些节点之间没有依赖关系(例如,一个 LLM 的输出不能作为下一个节点的输入)。这意味着多个 Agent 可以同时运行,前提是它们不是相互依赖的节点

此外,LangGraph 也支持:

  • 使用 RunnableParallel 运行多个 Graph
  • 通过 Python 的 asyncio 库并行调用工具




重试逻辑和错误处理  



LangChain


LangChain 的错误处理需要由开发者显式定义,可以通过:

  • 在链中引入重试逻辑(Retry Logic)
  • 在 Agent 中处理工具调用失败的情况


LangGraph


LangGraph 可以直接在工作流中嵌入错误处理逻辑,方法是将错误处理作为一个独立的节点

  • 当某个任务失败时,可以跳转到另一个错误处理节点,或者在当前节点进行重试
  • 失败的节点会被单独重试,而不是整个工作流重新执行。
  • 这样,图可以从失败的地方继续执行,而不需要从头开始。


如果你的任务涉及多个步骤和工具调用,这种错误处理机制可能会非常重要




总之  



你可以:
✅ 仅使用 LangChain
✅ 仅使用 LangGraph
✅ 同时使用 LangChain 和 LangGraph


此外,你也可以将 LangGraph 的图结构编排能力与其他 Agent 框架(如微软的 AutoGen)结合,例如:将 AutoGen 的 Agent 作为 LangGraph 的节点


LangChain 和 LangGraph 各有优势,选择合适的工具可能会让人感到困惑。


那么,应该在什么情况下使用?


仅使用 LangChain:

✅ 你需要快速构建 AI 工作流,例如:

  • 线性任务(Linear Tasks):文档检索、文本生成、摘要等预定义的工作流

  • AI Agent 需要动态决策,但你不需要对复杂流程进行精细控制


仅使用 LangGraph:

✅ 你的应用场景需要非线性(Non-linear)工作流,例如:

  • 任务涉及多个组件的动态交互
  • 需要条件判断、复杂的分支逻辑、错误处理或并行执行
  • 你愿意自行实现 LangChain 未提供的部分功能


同时使用 LangChain 和 LangGraph:

✅ 你希望:

  • 利用 LangChain 现成的抽象能力(如 RAG 组件、对话记忆等)

  • 同时使用 LangGraph 的非线性编排能力

两者结合,可以充分发挥各自的优势,打造更加灵活和强大的 AI 工作流。



53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询