LangChain 和 LangGraph 到底啥关系?一篇讲清怎么选

📅 2026/8/14 14:23:20
LangChain 和 LangGraph 到底啥关系?一篇讲清怎么选
目标读者有 Python/AI 基础、正在或即将构建 LLM 应用的中级开发者 |预计阅读时间10 分钟 |字数约 2800 字开篇从调一次 API到多步 Agent越做越乱很多人接触 LLM 应用开发路径都差不多先用 OpenAI SDK 调一次聊天接口觉得不过瘾加上检索做 RAG再加工具调用做 Agent。单轮还好一旦要多步骤、能循环、多 Agent 协作代码就开始拧巴——状态散在变量里循环靠 while True分支靠 if else人工审核插不进去跑挂了没法恢复。这时候你会搜到两个名字LangChain 和 LangGraph。文档都挺长概念都不少最让人困惑的是——它俩到底什么关系是替代是互补我该学哪个这篇就讲清四件事两者各自是什么、什么关系、差异在哪、你的场景该选哪个。读完能直接动手。 全文导览LangChain把组件串成链LangGraph把流程画成图它俩什么关系正面对比怎么选一张决策表一、LangChain把组件串成链LangChain 是构建 LLM 应用的开源框架Python / JS 双版本核心做两件事一是提供一套标准接口把 LLM、提示词、检索器、工具、输出解析等组件统一起来二是攒起一个庞大组件生态向量库、文档加载器、各种模型适配器开箱即用。它的核心抽象是链——把组件像水管一样一段段接起来。最典型的写法是LCELLangChain Expression Language用管道符|把 Runnable 串起来# LangChain LCEL 最小示例一个带检索的问答链from langchain_core.prompts import ChatPromptTemplatefrom langchain_openai import ChatOpenAIfrom langchain_core.output_parsers import StrOutputParser# 1. 提示词模板把检索到的上下文和问题拼进 promptprompt ChatPromptTemplate.from_template( 根据以下资料回答问题。\n资料{context}\n问题{question})# 2. 模型model ChatOpenAI(modelgpt-4o-mini)# 3. 输出解析器把模型消息转成纯字符串parser StrOutputParser()# 用 | 串成链prompt - model - parserchain prompt | model | parser# 调用统一同步/异步/批量/流式接口answer chain.invoke({context: LangGraph 用图编排 Agent, question: LangGraph 是什么})print(answer)这段代码体现了 LangChain 的哲学线性、声明式、组件可替换。换模型只改一行加解析器接一段管道。除了 LCELLangChain 还有 RetrieverRAG 的核心从向量库取相关文档、Tool / ToolCalling让 LLM 调外部函数、AgentLLM 自主决定调哪个工具、循环执行直到完成等抽象。什么时候用 LangChain单轮问答 / 线性 RAG检索→生成一条链走完没有分支循环LCEL 最舒服。快速原型 / 组件拼装要接十几种向量库试效果LangChain 生态最省事。结构化输出 / 文档处理把 LLM 输出强类型成 Pydantic或加载切分一批文档。边界一旦你的 Agent 需要根据上一步结果决定走哪条路、可能循环重试、多个 Agent 共享状态链式抽象就开始别扭——这正是 LangGraph 要解决的。⚠️ 边界提示链式抽象适合一条道走到黑的流程。一旦出现分支、循环、多 Agent 共享状态就该换 LangGraph 了。二、LangGraph把流程画成图LangGraph 由 LangChain 团队出品定位是构建有状态、多步骤、可循环的 LLM 应用尤其多 Agent 系统的编排框架。关键转变是把应用抽象成有向图而不是链。核心抽象有这么几个抽象作用StateGraph以一个共享StateTypedDict 或 dataclass为中心的图。所有节点读写同一个状态Node节点每个节点是一个函数接收 state、返回 state 的更新Edge边节点间的跳转。条件边根据当前 state 动态决定下一个节点——分支与循环的关键Reducer定义 state 字段如何被多个节点合并覆盖 / 追加 / 求和避免状态被无脑覆盖Checkpoint每步保存 state 快照支持中断恢复、时间旅行回放历史状态Human-in-the-loop图执行中可暂停等待人工审批或输入再继续一段最小代码感受下# LangGraph StateGraph 最小示例一个带条件分支的 Agent# 以下示意结构省略了真实 LLM/工具调用from typing import TypedDict, Annotatedfrom operator import addfrom langgraph.graph import StateGraph, START, END# 1. 定义共享状态messages 用追加 reducer列表拼接step 用覆盖class State(TypedDict): messages: Annotated[list, add] # reduceroperator.add多步消息累加而非覆盖 step: int# 2. 节点模型生成一步def call_model(state: State) - dict: # ...调用 LLM返回对状态的更新... return {messages: [模型回复], step: state[step] 1}# 3. 条件边根据状态决定下一步def should_continue(state: State) - str: if state[step] 3: returnend # 步数够了结束 returntools # 否则继续调工具# 4. 组装图graph StateGraph(State)graph.add_node(agent, call_model)graph.add_node(tools, lambda s: {messages: [工具结果]})graph.add_edge(START, agent)graph.add_conditional_edges(agent, should_continue, {tools: tools, end: END})graph.add_edge(tools, agent) # 工具结果回灌 agent形成循环app graph.compile()# 运行状态在节点间流转条件边控制走向result app.invoke({messages: [用户问题], step: 0})注意tools - agent这条边形成了显式的循环而循环走向由should_continue这个条件边决定。在 LangChain 的链里表达这种调完工具再回模型、达到条件才停得靠 AgentExecutor 的隐式循环难观测也难插手在 LangGraph 里循环、分支、状态都是图上看得见的东西。 关键对比链式LangChain循环藏在 AgentExecutor 内部隐式、难插手图式LangGraph循环是显式边每步可断点、可回放、可观测什么时候用 LangGraph多 Agent 协作supervisor 分派任务、多个 Agent 讨论汇总需要共享状态和条件跳转。循环重试 / 条件分支的复杂 Agent生成→校验→不通过就改→再校验直到达标。人工审核节点 / 断点续跑流程跑到某步暂停等人确认或长任务挂了从 Checkpoint 恢复。边界如果流程是线性的、没有循环分支、状态也不复杂上 LangGraph 是给自己加学习成本——直接用 LangChain LCEL 就够。⚠️ 边界提示流程线性、无循环分支、状态简单 → 直接用 LangChain LCEL别上 LangGraph 给自己加学习成本。三、它俩什么关系理清三点就够了同源都由 LangChain 团队LangChain AI维护。LangGraph 是 LangChain 生态在Agent 编排方向的延伸与升级不是另一个团队另起炉灶。解决痛点早期 LangChain 的AgentExecutor用链式抽象处理 Agent难以表达循环、分支、多 Agent 状态共享与人工介入。LangGraph 用图把这些显式建模出来可控性和可调试性大幅提升。自 2024 年起官方把 LangGraph 定为构建超过单次 LLM 调用应用的首选LangChain v1.02025只保留一个建在 LangGraph 之上的 agent 抽象复杂 Agent 全面迁移到 LangGraph。可独立、可混用LangGraph 不强依赖 LangChain 的链可以只用它的节点/状态机制。但实践中最常见的是混用——节点内部用 LangChain 的组件prompt、model、retriever、tool做单步逻辑外层用 LangGraph 编排整张图。图1LangChain 组件装进 LangGraph 节点由 StateGraph 统一编排一句话LangChain 给你零件LangGraph 给你图纸。零件可以单独用图纸也可以装别的零件但搭配起来最顺。 一句话记忆LangChain 零件库LangGraph 图纸。混用最顺。四、正面对比维度LangChainLCEL/链LangGraph图抽象模型链线性 Runnable 管道有向图节点边共享状态状态管理弱靠 Memory / 外部强显式 State Reducer Checkpoint循环 / 多步AgentExecutor 可循环但难控条件边原生支持循环可控分支不直观条件边天然支持可控性 / 可调试中等高每步可观测、可中断、可回放持久化 / 恢复需自己实现Checkpoint 内置人工介入难内置 human-in-the-loop学习曲线平缓较陡适用复杂度简单 ~ 中等中等 ~ 复杂图2链式线性vs 图式条件边 循环最该记住的三条差异状态管理链里状态是流过去就没了要跨步共享得塞进 Memory 或外部存储图里 State 是一等公民所有节点读写同一个状态Reducer 定义怎么合并。循环可控性链的循环藏在 AgentExecutor 内部想插个审核、改个走向很费劲图的循环是显式边每步可断点、可回放。调试可观测性图有 Checkpoint 快照和时间旅行跑挂了能回放历史状态定位问题链得自己加日志。五、怎么选一张决策表场景推荐理由单轮问答 / 线性 RAGLangChain一条链走完无分支循环固定步骤的链式处理LangChain步骤已知LCEL 声明式最简洁快速原型 / 组件拼装LangChain生态最全换组件成本低多 Agent 协作LangGraph需共享状态 条件分派循环重试 / 条件分支 AgentLangGraph条件边原生支持循环可控人工审核节点 / 断点续跑LangGraph内置 human-in-the-loop Checkpoint强可观测 / 可控流程LangGraph每步可中断、可回放长任务需要状态回放LangGraphCheckpoint 时间旅行图3选型决策树决策依据一句话是否需要循环 共享状态 多步骤可控需要 → LangGraph不需要、线性即可 → LangChain。混用建议最常见也最推荐的模式是节点内 LangChain外层 LangGraph。用 LangChain 的 prompt/model/retriever/tool 写单步逻辑用 LangGraph 的 StateGraph 编排整体。这样既享受 LangChain 的生态又拿到 LangGraph 的可控性。两个常见误区⚠️ 避坑“LangGraph 要替代 LangChain”——不是。简单链/RAG 官方仍推荐 LangChainLangGraph 只在复杂 Agent 层接棒。“用了 LangChain 就不能用 LangGraph”——恰恰相反两者混用才是官方推荐的实践。收尾一句话总结线性用链复杂用图混用最常见。LangChain 给你组件和链式拼装的能力LangGraph 给你图式编排的可控性前者解决把零件接起来后者解决把流程管起来。动手建议如果你手头是 RAG 或单轮问答先用 LangChain LCEL 写个 20 行的链跑通如果你在做多 Agent 或带审核的复杂流程用 LangGraph 画一张三节点的小图感受下条件边和 Checkpoint。从最小 demo 起步比读十遍文档管用。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】