尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

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

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 embeddingsHuggingFaceEmbeddings(model_namebge-small-zh-v1.5)vectorstoreChroma(persist_directory./kb,embedding_functionembeddings)qaRetrievalQA.from_chain_type(llmllm,retrievervectorstore.as_retriever(search_kwargs{k:4}),chain_typestuff)answerqa.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/)## 功能快捷键撤销kbdCtrl/Command/kbdkbdZ/kbd重做kbdCtrl/Command/kbdkbdY/kbd加粗kbdCtrl/Command/kbdkbdB/kbd斜体kbdCtrl/Command/kbdkbdI/kbd标题kbdCtrl/Command/kbdkbdShift/kbdkbdH/kbd无序列表kbdCtrl/Command/kbdkbdShift/kbdkbdU/kbd有序列表kbdCtrl/Command/kbdkbdShift/kbdkbdO/kbd检查列表kbdCtrl/Command/kbdkbdShift/kbdkbdC/kbd插入代码kbdCtrl/Command/kbdkbdShift/kbdkbdK/kbd插入链接kbdCtrl/Command/kbdkbdShift/kbdkbdL/kbd插入图片kbdCtrl/Command/kbdkbdShift/kbdkbdG/kbd查找kbdCtrl/Command/kbdkbdF/kbd替换kbdCtrl/Command/kbdkbdG/kbd## 合理的创建标题有助于目录的生成直接输入1次kbd#/kbd并按下kbdspace/kbd后将生成1级标题。输入2次kbd#/kbd并按下kbdspace/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/aHR0cHM6Ly9hdmF0YXIuY3Nkbi5uZXQvNy83L0IvMV9yYWxmX2h4MTYzY29tLmpwZw30x30)居中的图片:![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 foobar;生成一个适合你的列表项目项目项目项目1项目2项目3计划任务完成任务创建一个表格一个简单的表格是这么创建的项目Value电脑$1600手机$12导管$1设定内容居中、居左、居右使用:---------:居中使用:----------居左使用----------:居右第一列第二列第三列第一列文本居中第二列文本居右第三列文本居左SmartyPantsSmartyPants 是一个文本转换工具主要功能是将普通的 ASCII 标点符号自动转换为更美观的印刷体标点符号。例如原始符号转换后说明引号“引号”直引号变弯引号单引号‘单引号’直单引号变弯单引号--–两个连字符变短破折号---—三个连字符变长破折号...…三个点变省略号创建一个自定义列表MarkdownText-to-HTMLconversion toolAuthorsJohnLuke如何创建一个注脚一个具有注脚的文本。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.新的甘特图功能丰富你的文章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文件在上方工具栏可以选择导入功能进行对应扩展名的文件导入继续你的创作。注脚的解释 ↩︎
返回列表