彻底搞懂 LangChain 与 LangGraph:从工具箱到设计图的 Agent 架构演进
彻底搞懂 LangChain 与 LangGraph从“工具箱”到“设计图”的 Agent 架构演进引言为什么必须同时理解 LangChain 和 LangGraph在 LLM 应用开发中很多开发者都会遇到一个典型困惑我到底应该用 LangChain还是 LangGraphLangGraph 是不是要取代 LangChain为什么简单任务用 LangChain 很顺但一到复杂 Agent 就变得很难维护本质上这两个框架解决的是不同层次的问题LangChain解决“LLM 应用需要哪些标准化组件”的问题。LangGraph解决“复杂 Agent 如何被编排、控制和恢复”的问题。LangChain 更像是 AI 应用开发中的工具箱提供模型调用、提示词、记忆、工具、检索等标准组件LangGraph 更像是设计图负责把这些组件组织成可循环、可分支、可暂停、可恢复的复杂工作流。二者不是替代关系而是互补关系。真正成熟的生产架构通常是LangGraph 负责流程编排LangChain 负责组件执行。一、核心定位LangChain 是工具箱LangGraph 是设计图1.1 LangChain标准化组件层LangChain 的核心价值在于封装 LLM 应用开发中的通用能力避免开发者重复造轮子。它主要提供这些能力表格能力模块 作用 典型场景Model I/O 统一调用不同大模型 OpenAI、Claude、本地模型Prompt Templates 管理提示词模板 角色设定、结构化输出Memory 管理会话上下文 多轮对话、历史记录Tools 接入外部工具 搜索、数据库、APIRetrieval 文档检索与 RAG 知识库问答、文档摘要LangChain 解决的是如何让 LLM 更方便地连接数据、工具和业务系统。1.2 LangGraph复杂流程编排层LangGraph 的核心价值在于构建有状态、可控、可恢复的 AI Agent 工作流。它特别适合处理这些复杂场景Agent 需要反复调用工具直到任务完成流程中存在条件分支例如“查数据库”或“调用搜索”任务失败后需要重试、回退或人工介入多个 Agent 需要协作完成任务长任务需要断点保存故障后继续执行。LangGraph 解决的是如何让复杂 AI 任务从“不可控黑盒”变成“可观测、可调试、可恢复的工程系统”。1.3 一句话定位LangChain 提供 AI 应用的“零件”LangGraph 负责把这些零件组装成复杂、可控、可恢复的“智能体系统”。二、架构差异链式思维 vs 图式思维2.1 LangChain 的链式架构LangChain 最典型的执行模式是线性链text编辑输入 → [Prompt] → [LLM] → [Tool] → [OutputParser] → 输出这种结构适合流程固定、步骤清晰的任务。例如用户提问检索相关文档把文档和问题一起交给 LLM返回答案。但如果任务变成“如果检索不到文档就调用搜索如果搜索结果不可信就重新检索如果仍然失败就让人工审核。”线性链就会变得非常难维护。2.2 LangGraph 的图式架构LangGraph 使用状态图来描述任务流程text编辑┌──────────────┐ ▼ │ [Agent 决策] │ │ │┌────────┴────────┐ │▼ ▼ │[调用工具] [直接回答] ││ │└──────► [判断是否完成]─┘它的关键变化是节点可以连接任意其他节点流程可以循环可以根据状态动态选择分支可以在任意节点暂停等待人工介入可以保存执行状态支持故障恢复。2.3 架构对比图text编辑┌────────────────────────────┐│ LangChain ││ ││ Input → A → B → C → Output ││ ││ 特点线性、简单、易上手 │└────────────────────────────┘┌────────────────────────────────────┐│ LangGraph ││ ││ ┌──→ A ──→ B ──┐ ││ │ ▼ ││ Entry [条件判断] ││ │ │ ││ └──→ C ──→ D ──┘ ││ │ ││ └──→ Output ││ ││ 特点分支、循环、状态、可控 │└────────────────────────────────────┘三、能力对比什么时候用 LangChain什么时候用 LangGraph表格维度 LangChain LangGraph执行模式 线性链、顺序执行 图结构、动态执行状态管理 轻量适合会话记忆 强大适合全局状态管理条件分支 不擅长 原生支持循环执行 不擅长 原生支持人工介入 支持有限 支持 Human-in-the-loop故障恢复 较弱 可通过 Checkpoint 实现多 Agent 协作 不擅长 更适合上手难度 较低 较高适用场景 RAG、问答、摘要、工具调用 复杂 Agent、审批流、自动化任务四、选型决策树不要为了用 LangGraph 而用 LangGraph判断是否使用 LangGraph可以用下面这个决策树text编辑你的任务是否需要循环、分支、状态管理或人工介入│├─ 否 → 优先使用 LangChain│ 例如简单问答、RAG、文档摘要、固定工具调用│└─ 是 → 任务是否涉及多步骤动态决策│├─ 否 → LangChain 少量自定义逻辑│└─ 是 → 使用 LangGraph例如- Agent 自我反思- 多工具迭代调用- 人工审核流程- 多 Agent 协作- 长任务断点恢复4.1 优先使用 LangChain 的场景单轮问答简单多轮对话基础 RAG文档摘要固定格式解析单次工具调用快速验证原型。这些场景如果强行引入 LangGraph反而会增加不必要的复杂度。4.2 必须考虑 LangGraph 的场景Agent 需要多次调用工具任务失败后需要重试或回退流程中存在复杂条件判断需要人工审核关键节点多个 Agent 分工协作任务运行时间长需要断点续跑需要完整记录任务执行路径。五、LangGraph 核心机制拆解5.1 节点执行单元节点代表一个具体动作例如调用 LLM执行工具查询数据库调用外部 API执行子图进行结果校验。节点是图中的“执行者”。5.2 边流程方向边决定节点之间的执行关系。常见类型包括普通边A 执行完后一定进入 B条件边根据状态决定进入 B 还是 C入口边指定图的起点循环边从某个节点回到前面节点实现迭代。5.3 状态贯穿全流程的核心对象State 是 LangGraph 最重要的概念之一。它通常是一个结构化字典用来保存用户输入LLM 输出工具调用结果当前任务阶段错误信息是否需要人工介入历史消息列表。每个节点都可以读取状态也可以更新状态。5.4 检查点支持暂停与恢复Checkpoint 机制让 LangGraph 具备生产级能力。它可以实现任务中断后继续执行人工审核后再继续故障重启后从断点恢复查看历史执行状态对复杂 Agent 进行调试。这是 LangChain 线性链很难原生实现的能力。六、生产环境最佳实践混合架构真正推荐的生产架构不是“二选一”而是分层设计。text编辑┌─────────────────────────────────────────┐│ 控制层LangGraph ││ ││ 路由 → 调度 → 工具调用 → 校验 → 输出 ││ ││ 负责状态、分支、循环、人工介入、恢复 │├─────────────────────────────────────────┤│ 执行层LangChain ││ ││ LLM / Prompt / Tool / Retriever ││ ││ 负责模型调用、工具执行、文档检索 │└─────────────────────────────────────────┘6.1 控制层用 LangGraph控制层负责判断任务类型决定调用哪个工具判断是否需要继续执行处理异常和重试保存任务状态触发人工审核。6.2 执行层用 LangChain执行层负责调用大模型构造 Prompt调用搜索工具查询数据库检索向量库解析结构化输出。这种分层架构的好处是业务逻辑清晰组件可复用流程可调试故障可恢复后续扩展更容易。七、可运行代码示例框架下面示例用于展示 LangChain 与 LangGraph 的差异代码结构可以直接用于文章演示。实际运行前需要配置环境变量。7.1 环境准备bash编辑pip install langchain langgraph langchain-openai设置环境变量bash编辑export OPENAI_API_KEY“your-api-key”7.2 LangChain 示例简单 RAG 链python编辑from langchain_openai import ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import StrOutputParser1. 初始化模型llm ChatOpenAI(model“gpt-4o-mini”, temperature0)2. 定义提示词prompt ChatPromptTemplate.from_messages([(“system”, “你是一个技术助手请根据上下文回答问题。”),(“user”, “上下文{context}\n问题{question}”)])3. 构建简单链chain prompt | llm | StrOutputParser()4. 执行result chain.invoke({“context”: “LangGraph 是用于构建有状态 Agent 的图编排框架。”,“question”: “LangGraph 适合解决什么问题”})print(result)这个示例适合展示 LangChain 的线性能力text编辑Prompt → LLM → Parser → 输出但如果需要“判断是否需要检索”“检索失败后重试”“人工确认后再输出”线性链就会变得不清晰。7.3 LangGraph 示例带条件判断的 Agentpython编辑from typing import Annotatedfrom typing_extensions import TypedDictfrom langgraph.graph import StateGraph, START, ENDfrom langgraph.graph.message import add_messagesfrom langgraph.prebuilt import ToolNode, tools_conditionfrom langchain_openai import ChatOpenAIfrom langchain_core.tools import tool1. 定义工具tooldef search_knowledge_base(query: str):“”“根据用户问题检索知识库”“”return f检索到关于 {query} 的相关文档内容。tools [search_knowledge_base]2. 初始化模型llm ChatOpenAI(model“gpt-4o-mini”, temperature0)llm_with_tools llm.bind_tools(tools)3. 定义状态class State(TypedDict):messages: Annotated[list, add_messages]4. 定义 Agent 节点def agent(state: State):response llm_with_tools.invoke(state[“messages”])return {“messages”: [response]}5. 构建图workflow StateGraph(State)workflow.add_node(“agent”, agent)workflow.add_node(“tools”, ToolNode(tools))workflow.add_edge(START, “agent”)workflow.add_conditional_edges(“agent”,tools_condition)workflow.add_edge(“tools”, “agent”)6. 编译并执行app workflow.compile()result app.invoke({“messages”: [(“user”, “帮我查一下 LangGraph 的核心作用”)]})print(result[“messages”][-1].content)这个示例展示了 LangGraph 的关键能力Agent 节点负责决策工具节点负责执行条件边决定是否需要调用工具工具执行后可以回到 Agent 继续判断整个流程由状态驱动。执行流程可以理解为text编辑用户输入↓Agent 判断是否需要工具↓需要工具 → 调用工具 → 回到 Agent↓不需要工具 → 输出最终答案八、真实项目中的对比案例8.1 场景智能客服系统如果只是简单问答text编辑用户提问 → 检索知识库 → LLM 生成答案使用 LangChain 就足够。但如果业务变成text编辑用户提问↓判断是否命中知识库↓未命中 → 调用外部搜索↓搜索结果不可信 → 转人工↓可信 → 生成答案↓涉及退款 → 人工审核↓审核通过 → 执行退款这时就应该使用 LangGraph。8.2 场景YOLO 视觉检测系统在视觉检测项目中也可以类比理解LangChain 适合单张图片检测、固定流程推理、结果格式化输出LangGraph 适合多路视频流异常判断、检测结果校验、误报过滤、人工复核、报警分发。例如text编辑视频帧输入↓YOLO 推理↓检测到安全帽缺失↓是 → 判断是否连续多帧出现↓是 → 触发告警↓否 → 继续监控这种带状态判断和循环校验的流程就非常适合用 LangGraph 编排。九、生产环境常见坑与解决方案9.1 状态膨胀问题随着任务轮次增加State 中的消息、工具结果、中间变量越来越多导致上下文变长、成本上升、调试困难。解决方案只保留必要字段对历史消息做截断使用 Reducer 合并状态将长任务拆分为子图工具结果只保留摘要。9.2 循环死锁问题Agent 在错误逻辑中反复调用工具导致 Token 消耗爆炸。解决方案设置最大循环次数设置最大工具调用次数连续失败后强制退出失败后进入人工审核节点记录循环次数并打印日志。9.3 调试困难问题图结构复杂后某个节点出错很难定位。解决方案每个节点打印输入输出使用 LangSmith 或类似可观测性工具记录完整 State 变化对关键节点增加日志把复杂图拆成子图。9.4 工具调用不稳定问题LLM 有时不调用工具有时调用错误工具有时参数错误。解决方案工具描述写清楚参数类型明确增加参数校验失败后重试必要时强制进入人工确认。9.5 过度设计问题简单任务也使用复杂图结构导致维护成本过高。解决方案简单任务用 LangChain只有出现循环、分支、状态、人工介入时才引入 LangGraph先跑通最小闭环再逐步扩展图结构。十、文章总结LangChain 和 LangGraph 的关系可以概括为LangChain 解决“LLM 应用需要什么能力”LangGraph 解决“复杂 Agent 如何被控制和运行”。如果你的任务是线性的、固定的、一次性的优先使用 LangChain。如果你的任务涉及循环、分支、状态、人工介入、故障恢复或多 Agent 协作就应该使用 LangGraph。真正成熟的 AI 应用架构通常不是单独使用某一个框架而是采用混合设计text编辑LangGraph 负责编排LangChain 负责执行Checkpoint 负责恢复可观测性工具负责调试掌握这两个框架不只是学会两个库而是掌握从“简单 LLM 调用”走向“生产级 AI Agent 系统”的架构思维。结尾引导语如果你正在写 CSDN 文章可以在结尾加上这段在实际项目中LangChain 和 LangGraph 并不是二选一的关系。LangChain 提供了模型、工具、检索、提示词等标准组件而 LangGraph 提供了状态管理、条件分支、循环执行、人工介入和故障恢复能力。真正高质量的生产架构往往是 LangGraph 负责流程编排LangChain 负责组件执行。理解这一点才能从“会调用大模型”进阶到“能设计复杂 AI Agent 系统”

相关新闻

你感觉被掏空?别躺着。骑上车,让精力自己流回来。

你感觉被掏空?别躺着。骑上车,让精力自己流回来。

你感觉被掏空?别躺着。骑上车,让精力自己流回来。很多人以为,累就要躺着。就要歇着。最好什么都不干。他们把精力当成手机电量,觉得省着用就能撑久点。用完就得插上电源慢慢充。这是错的。精力不是电。精力是河。你感觉被掏空&…

2026/10/15 6:57:28 阅读更多 →
微信单向好友检测教程:一招找出谁偷偷删了你,5分钟批量清理

微信单向好友检测教程:一招找出谁偷偷删了你,5分钟批量清理

微信单向好友检测教程:一招找出谁偷偷删了你,5分钟批量清理 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/Wecha…

2026/9/22 18:16:41 阅读更多 →
Vortex全球80m高度月均风功率密度数据集

Vortex全球80m高度月均风功率密度数据集

摘要本数据集基于Vortex风能月均产品整理形成,包含2001—2020年全球80米高度1—12月月均风功率密度栅格数据。数据以GeoTIFF格式存储,空间参考为WGS 84地理坐标系(EPSG:4326),主要空间分辨率约为0.025,单文…

2026/10/14 2:25:28 阅读更多 →

最新新闻

Java反射机制原理、优化与实践指南

Java反射机制原理、优化与实践指南

1. 反射机制的本质与核心价值Java反射是运行时动态获取类信息并操作类成员的能力集合。与静态编码不同,反射允许程序在编译期未知具体类的情况下,通过Class对象完成方法调用、字段存取等操作。这种能力源于JVM的类型信息保留机制——即使经过编译擦除&am…

2026/10/15 6:56:51 阅读更多 →
QT Socket 客户端服务端一体化调试工具:原理、实现与避坑指南

QT Socket 客户端服务端一体化调试工具:原理、实现与避坑指南

简介:本资源是一份基于Qt的TCP网络编程实战项目源码,面向具备一定C与Qt基础、希望掌握网络通信开发的初学者和进阶开发者。项目将TCP客户端与服务器端功能集成于同一GUI程序,借助Qt Network模块中的QTcpSocket与QTcpServer类,演示…

2026/10/15 6:56:51 阅读更多 →
空间站锂离子电池技术解析与应用前景

空间站锂离子电池技术解析与应用前景

1. 项目背景与核心价值在太空探索领域,能源系统堪称航天器的"心脏"。最近我国空间站开展的新型锂离子电池在轨实验,标志着空间能源技术迈入新阶段。作为一名曾参与卫星电源系统设计的工程师,我深知这项实验对后续深空探测任务的意义…

2026/10/15 6:56:51 阅读更多 →
PyTorch深度学习实战:动态图、自动求导与训练调优全解析

PyTorch深度学习实战:动态图、自动求导与训练调优全解析

1. 为什么“PyTorch”这三个字值得反复咀嚼如果你最近在技术社区里闲逛,或者翻看各类招聘需求,会发现“PyTorch”这个词的出现频率高得离谱。它不只是一个深度学习框架的名字,更像是一张通行证——从学术论文的代码复现,到工业级推…

2026/10/15 6:56:51 阅读更多 →
C语言经典练手题:水仙花数拆解循环与取余的巧妙应用

C语言经典练手题:水仙花数拆解循环与取余的巧妙应用

这两年我一直在坚持整理一套C语言入门练手题,专栏名字就叫“菜鸟编程C语言100例”。前面三道题分别过了一遍变量与数据类型、格式化输出、if-else分支判断,到了第四题,我想着该让循环结构登场了。但纯写一个“for循环讲解”又太枯燥&#xff…

2026/10/15 6:56:51 阅读更多 →
SpringBoot+Vue轻量级博客系统设计与实现

SpringBoot+Vue轻量级博客系统设计与实现

1. 项目概述:SpringBootVue轻量级博客系统设计去年帮学弟评审毕业设计时,发现市面上很多博客系统要么功能冗余,要么扩展性差。于是我们决定用SpringBootVue搭建一个轻量级但五脏俱全的在线创作社区。这个系统最核心的特点是采用前后端分离架构…

2026/10/15 6:55:51 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/14 7:53:34 阅读更多 →