这里写自定义目录标题
- 欢迎使用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/).图片:带尺寸的图片:居中的图片:居中并且带尺寸的图片:当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。## 如何插入一段漂亮的代码片去[博客设置](https://mp.csdn.net/console/configBlog)页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 `代码片`.```javascript//An highlighted block var foo='bar';生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目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)=(n−1)!∀n∈N是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息LaTeX数学表达式here.
新的甘特图功能,丰富你的文章
- 关于甘特图语法,参考 这儿,
UML图表
可以使用UML图表进行渲染,例如下面产生的一个序列图:
- 关于UML图表语法,参考 这儿,
流程图
- 关于Mermaid语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart.js的流程图语法:
- 关于Flowchart流程图语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到文章导出,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎