news 2026/9/12 14:18:47

LangChain 与 LangGraph 架构拆解:从链式编排到图式状态管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangChain 与 LangGraph 架构拆解:从链式编排到图式状态管理

这里写自定义目录标题

  • 欢迎使用Markdown编辑器
    • 引言:大模型应用开发为什么绕不开这两套框架
    • 一、LangChain 的核心定位:标准化组件库与开发规范
      • 1.1 它解决的本质问题
      • 1.2 六大核心模块
      • 1.3 链式设计的优势与短板
    • 二、LangGraph 的核心定位:图式编排与状态管理
      • 2.1 从链到图:编排能力的一次跃迁
      • 2.2 状态管理与共享内存
      • 2.3 条件边、循环与检查点
    • 三、LangChain 与 LangGraph 的架构对比
      • 3.1 执行模型对比
      • 3.2 状态管理对比
      • 3.3 可观测性与可控性
      • 3.4 适用场景对比
    • 四、实战:从链到图的演进路径
      • 4.1 第一步:用链快速实现一个问答系统
    • 生成一个适合你的列表
    • 创建一个表格
      • 设定内容居中、居左、居右
      • SmartyPants
    • 创建一个自定义列表
    • 如何创建一个注脚
    • 注释也是必不可少的
    • KaTeX数学公式
    • 新的甘特图功能,丰富你的文章
    • UML图表
    • 流程图
    • FLowchart流程图
    • 导出与导入
      • 导出
      • 导入

欢迎使用Markdown编辑器

你好! 这是你第一次使用# LangChain 与 LangGraph 架构拆解:从链式编排到图式状态管理

引言:大模型应用开发为什么绕不开这两套框架

过去两年,大模型应用开发领域经历了一轮剧烈的工具迭代。早期开发者面对裸的模型 API,需要自己处理提示词模板、对话记忆、工具调用、文档问答等一系列高频需求,每一家都要重复造一遍轮子,而且不同模型之间的接口差异让代码难以迁移。正是在这种背景下,LangChain 应运而生,成为最主流的大模型应用基础框架。而当应用复杂度继续上升,线性链式结构开始暴露出流程固化、难以编排复杂逻辑的问题时,LangGraph 又作为进阶编排运行时出现,把大模型应用的开发范式从"链"推进到了"图"。

本文将从实际开发者的视角,逐层拆解这两套框架的核心定位、架构差异、落地场景以及能力边界,帮助读者理解在什么情况下该用哪一个,以及如何把二者组合起来支撑生产级应用。

一、LangChain 的核心定位:标准化组件库与开发规范

1.1 它解决的本质问题

在没有 LangChain 之前,开发一个带记忆、带工具调用、带检索的对话应用,代码会迅速膨胀:你要写一套提示词模板引擎,要管理多轮对话历史,要对接不同厂商的模型 SDK,还要自己实现文档切分和向量检索的胶水代码。这些工作技术含量不高,但工作量巨大,而且极易出错。

LangChain 的核心价值在于:把大模型开发过程中高频使用的能力全部封装为标准化、可复用的组件,开发者按需调用、自由组合,就能快速搭建各类应用。它本质上是一个组件库加一套开发规范,而不是某个具体的模型或服务。

1.2 六大核心模块

LangChain 的组件体系可以归纳为六大模块:

第一是模型输入输出模块,包括提示词模板的封装、输出解析器的设计,以及不同模型供应商的统一调用接口。通过统一的接口抽象,开发者可以用同一套代码切换 OpenAI、Anthropic、国产开源模型等不同后端。

第二是检索模块,涵盖文档加载器、文本分割器、向量存储、检索器等一整套 RAG 链路。文档加载器负责把 PDF、网页、Markdown、JSON 等格式统一读取进来;文本分割器解决长文档如何切块的问题;向量存储则屏蔽了不同向量数据库的差异。

第三是链(Chain)模块,这是 LangChain 早期的核心抽象,用于把多个组件按固定顺序串联起来。一条链的输出作为下一条链的输入,层层递进完成一个整体任务。

第四是记忆模块,负责管理多轮对话中的历史信息,包括短期记忆的窗口管理、长期记忆的向量化存储与召回,以及对话摘要等策略。

第五是代理模块(Agent),赋予模型调用工具的能力。模型根据用户的意图自主决定调用哪个工具、传入什么参数,并把工具返回的结果纳入下一步推理。

第六是回调与观测模块,提供事件钩子,方便开发者接入日志、追踪、指标上报等可观测能力。

1.3 链式设计的优势与短板

链式设计最大的优势是上手简单、逻辑清晰。任务按照固定顺序依次执行,调试时只要沿着链路一步步看输出即可,非常适合入门和固定流程类应用。

但它的短板同样突出。线性结构无法自然表达分支判断、循环重试、多路径并行、动态流程调整等复杂逻辑。一旦业务场景脱离简单的单轮问答和固定流水线,代码的扩展性和可控性会急剧下降。此外,传统的链式执行没有显式的状态管理,多个步骤之间共享中间状态需要开发者自己想办法传递,这在复杂应用里非常痛苦。

二、LangGraph 的核心定位:图式编排与状态管理

2.1 从链到图:编排能力的一次跃迁

LangGraph 是 LangChain 生态中的进阶编排框架与运行时,完全兼容 LangChain 的既有组件。它的核心创新是把应用流程建模为一张有向图:节点(Node)代表一个处理步骤,边(Edge)代表步骤之间的流转关系。图本身天然支持分支、循环、并行、条件跳转,这为复杂 AI 任务编排提供了表达能力上的保障。

2.2 状态管理与共享内存

LangGraph 最关键的机制是全局状态(State)。所有节点共享一个状态对象,每个节点可以读取和更新状态中的字段,节点之间的数据传递不再依赖显式的参数传递,而是通过状态的读写完成。这种设计有两点好处:一是中间结果统一管理,便于追踪和回放;二是节点之间的耦合降低,每个节点只关心自己读写哪些状态字段。

状态对象通常使用 TypedDict 定义结构,还支持 reducer 函数来控制字段的合并方式,例如消息列表的追加、计数器的累加等。这为多轮对话、多智能体协作这类天然需要共享上下文的场景提供了坚实的地基。

2.3 条件边、循环与检查点

图式编排的核心能力是条件边。开发者可以在边上面注册一个路由函数,根据当前状态动态决定下一个要执行的节点。比如在一个客服系统中,根据检索结果的置信度决定是直接回答还是转人工,就是典型的条件路由。

循环在 LangGraph 中同样自然:一条边从节点 A 指回节点 A 自己,就构成一个循环。这为"反思-重写-再生成"这类迭代模式提供了直接的实现手段。

另一个值得关注的能力是检查点(Checkpoint)机制。LangGraph 可以在执行过程中的每一个节点前后自动保存状态快照,支持中断、恢复、回放。这意味着长任务可以挂起等待人工输入再继续,也可以在某一步失败后从检查点恢复,不必从头再来。

三、LangChain 与 LangGraph 的架构对比

3.1 执行模型对比

LangChain 的传统链是静态的:开发者预先定义好步骤顺序,运行时按部就班地执行。LangGraph 的图是动态的:虽然图的拓扑在定义时确定,但运行时的执行路径由条件和状态动态决定,同一张图在不同输入下可能走出完全不同的路径。

3.2 状态管理对比

LangChain 链中的数据传递是隐式的手工传递,父链把输入传给子链,子链的返回值再传给下一个子链,中间产物缺乏统一管理。LangGraph 则提供了显式的全局状态,任何节点都可以按需读写,数据流清晰可查。

3.3 可观测性与可控性

LangGraph 的每一步都在图上,配合 LangSmith 等观测工具,可以清楚地看到请求走到了哪个节点、状态在每一步变成了什么样,调试体验比黑盒的链式执行好一个数量级。

3.4 适用场景对比

LangChain 链适合:需求明确、流程固定的场景,如简单的问答、数据提取、批量文档处理,以及快速原型验证。

LangGraph 图适合:需要分支判断、循环迭代、并行执行、人工介入、多智能体协作的复杂场景,如客服系统、代码生成工作流、Agent 平台、自动化研究助手。

四、实战:从链到图的演进路径

4.1 第一步:用链快速实现一个问答系统

假设我们要做一个简单的技术问答系统:用户提问,系统检索本地知识库,把检索结果拼进提示词,交给模型回答。

fromlangchain.chainsimportRetrievalQAfromlangchain_community.vectorstoresimportChromafromlangchain_community.embeddingsimportHuggingFaceEmbeddings embeddings=HuggingFaceEmbeddings(model_name="bge-small-zh-v1.5")vectorstore=Chroma(persist_directory="./kb",embedding_function=embeddings)qa=RetrievalQA.from_chain_type(llm=llm,retriever=vectorstore.as_retriever(search_kwargs={"k":4}),chain_type="stuff")answer=qa.invoke("**Markdown编辑器**所展示的欢迎页。如果你想学习如何使用Markdown编辑器,可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。## 新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:1.**全新的界面设计**,将会带来全新的写作体验;2.在创作中心设置你喜爱的代码高亮样式,Markdown**将代码片显示选择的高亮样式**进行展示;3.增加了**图片拖拽**功能,你可以将本地的图片直接拖拽到编辑区域直接展示;4.全新的**KaTeX数学公式**语法;5.增加了支持**甘特图的mermaid语法[^1]**功能;6.增加了**多屏幕编辑**Markdown文章功能;7.增加了**焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置**等功能,功能按钮位于编辑区域与预览区域中间;8.增加了**检查列表**功能。[^1]:[mermaid语法说明](https://mermaid.js.org/intro/)## 功能快捷键撤销:<kbd>Ctrl/Command</kbd>+<kbd>Z</kbd>重做:<kbd>Ctrl/Command</kbd>+<kbd>Y</kbd>加粗:<kbd>Ctrl/Command</kbd>+<kbd>B</kbd>斜体:<kbd>Ctrl/Command</kbd>+<kbd>I</kbd>标题:<kbd>Ctrl/Command</kbd>+<kbd>Shift</kbd>+<kbd>H</kbd>无序列表:<kbd>Ctrl/Command</kbd>+<kbd>Shift</kbd>+<kbd>U</kbd>有序列表:<kbd>Ctrl/Command</kbd>+<kbd>Shift</kbd>+<kbd>O</kbd>检查列表:<kbd>Ctrl/Command</kbd>+<kbd>Shift</kbd>+<kbd>C</kbd>插入代码:<kbd>Ctrl/Command</kbd>+<kbd>Shift</kbd>+<kbd>K</kbd>插入链接:<kbd>Ctrl/Command</kbd>+<kbd>Shift</kbd>+<kbd>L</kbd>插入图片:<kbd>Ctrl/Command</kbd>+<kbd>Shift</kbd>+<kbd>G</kbd>查找:<kbd>Ctrl/Command</kbd>+<kbd>F</kbd>替换:<kbd>Ctrl/Command</kbd>+<kbd>G</kbd>## 合理的创建标题,有助于目录的生成直接输入1<kbd>#</kbd>,并按下<kbd>space</kbd>后,将生成1级标题。输入2<kbd>#</kbd>,并按下<kbd>space</kbd>后,将生成2级标题。以此类推,我们支持6级标题。有助于使用`TOC`语法后生成一个完美的目录。## 如何改变文本的样式*强调文本*_强调文本_**加粗文本**__加粗文本__==标记文本==~~删除文本~~>引用文本 H~2~Ois是液体。2^10^运算结果是1024.## 插入链接与图片链接:[link](https://www.csdn.net/).图片:![Alt](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw)带尺寸的图片:![Alt](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw=30x30)居中的图片:![Alt](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw#pic_center)居中并且带尺寸的图片:![Alt](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw#pic_center =30x30)当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。## 如何插入一段漂亮的代码片[博客设置](https://mp.csdn.net/console/configBlog)页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 `代码片`.```javascript//An highlighted block var foo='bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants 是一个文本转换工具,主要功能是将普通的 ASCII 标点符号自动转换为更美观的印刷体标点符号。例如:

原始符号转换后说明
"引号"“引号”直引号变弯引号
'单引号'‘单引号’直单引号变弯单引号
--两个连字符变短破折号
---三个连字符变长破折号
...三个点变省略号

创建一个自定义列表

Markdown
Text-to-HTMLconversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。1

注释也是必不可少的

Markdown将文本转换为HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb NΓ(n)=(n1)!nN是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.Γ(z)=0tz1etdt.

你可以找到更多关于的信息LaTeX数学表达式here.

新的甘特图功能,丰富你的文章

2014-01-072014-01-092014-01-112014-01-132014-01-152014-01-172014-01-192014-01-21已完成进行中计划一计划二现有任务Adding GANTT diagram functionality to mermaid
  • 关于甘特图语法,参考 这儿,

UML图表

可以使用UML图表进行渲染,例如下面产生的一个序列图:

王五李四张三王五李四张三李四想了很长时间, 文字太长了不适合放在一行.你好!李四, 最近怎么样?你最近怎么样,王五?我很好,谢谢!我很好,谢谢!打量着王五...很好... 王五, 你怎么样?
  • 关于UML图表语法,参考 这儿,

流程图

链接

长方形

圆角长方形

菱形

  • 关于Mermaid语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart.js的流程图语法:

Created with Raphaël 2.3.0开始我的操作确认?结束yesno
  • 关于Flowchart流程图语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到文章导出,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. 注脚的解释 ↩︎

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 14:17:15

LUNA16三维CT肺结节检测的数据预处理与PyTorch加载链路

简介&#xff1a;本资源是一套基于Python与PyTorch实现的3D CT肺结节检测完整项目&#xff0c;面向人工智能、医学影像、生物信息等方向的高校学生、科研人员及初学者&#xff0c;聚焦医学图像分析中的关键任务——肺部小结节自动识别与定位。项目以国际公开LUNA16数据集为基准…

作者头像 李华
网站建设 2026/9/12 14:16:51

如何用 puter.kv.set() 批量写入并用 disableSharing 标记私有条目?

如何用 puter.kv.set() 批量写入并用 disableSharing 标记私有条目&#xff1f; 【免费下载链接】puter &#x1f310; The Internet Computer! Free, Open-Source, and Self-Hostable. 项目地址: https://gitcode.com/GitHub_Trending/pu/puter 如果你的应用需要一次向…

作者头像 李华
网站建设 2026/9/12 14:16:34

SadTalker 安装教程:3 条命令跑通第一段口型视频

SadTalker 安装教程&#xff1a;3 条命令跑通第一段口型视频 【免费下载链接】SadTalker [CVPR 2023] SadTalker&#xff1a;Learning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation 项目地址: https://gitcode.com/GitH…

作者头像 李华
网站建设 2026/9/12 14:11:35

深入理解面向对象编程:从基础到实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 14:09:58

Django开箱即用的RBAC权限系统:从模型到菜单的完整实现

简介&#xff1a;基于Django的开箱即用RBAC&#xff08;基于角色的权限管理&#xff09;系统&#xff0c;面向Web开发初学者、相关专业在校生以及需要快速搭建权限模块的开发者&#xff0c;可有效解决角色、用户、权限三者间的授权与校验落地问题。资源共34个文件&#xff0c;以…

作者头像 李华