十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

彻底搞懂 LangChain 与 LangGraph:从工具箱到设计图的 Agent 架构演进

彻底搞懂 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 系统”
返回列表