尧图精选

LangChain 1.0 和 LangGraph 到底谁封装谁?我把 pip 依赖表扒了一遍,答案全在里面

🕒 发布时间:2026/10/1 19:48:17 📁 来源:尧图网络
LangChain 1.0 和 LangGraph 到底谁封装谁我把 pip 依赖表扒了一遍答案全在里面一句话先给结论是 LangChain 封装了 LangGraph不是 LangGraph 封装 LangChain。2025 年 10 月 LangChain 1.0 发布之后create_agent底层跑的就是 LangGraph。我实测装了一遍依赖、看了一遍返回类型证据全在 pip 的依赖表里文末给面试三句金句和选型表。一、为什么这个关系总是被搞反后台收到不少私信问「LangGraph 是不是变成了 LangChain 的封装」我一开始没当回事直到自己也差点说反。搞反的原因有三个名字前缀LangGraph 挂着 Lang 前缀看起来像 LangChain 的附属品同一家公司LangGraph 就是 LangChain 团队写的大家默认「先有的包是底层」一次搬家事件被误读create_react_agent从 langgraph 搬进了 langchain很多人把「功能从 A 移到 B」读成了「A 变成了 B 的封装」。方向恰恰相反。这篇文章用三条实测证据把这事说死。二、三年演进时间线关系不是一天变成这样的时间事件当时的定位2022.11LangChain 诞生LCEL 链式编排 AgentExecutor线性串联2024.01LangGraph 发布图编排StateGraph、节点、条件边、循环目标是取代 AgentExecutor2025.07DeepAgents 发布建在 agent 之上的「深度任务」harness思路来自 Claude Code2025.10LangChain 1.0 LangGraph 1.0 同步发版create_agent明确构建在 LangGraph 之上LangGraph 退回纯运行时定位注意最后一行LangChain 1.0 把旧功能挪进langchain-classic整个包聚焦在create_agent middleware 上——而create_agent官方原话是 We built this implementation on top of langgraphto take advantage of the underlying agent runtime。三、最容易被误读的「搬家事件」LangGraph 1.0 的唯一显著变化是langgraph.prebuilt模块废弃create_react_agent这个预制件搬进了langchain.agents变成create_agent。很多人看到「功能从 langgraph 移到 langchain」就得出「langgraph 变成了 langchain 的封装」——方向完全反了以前langgraph.prebuilt.create_react_agent ← agent 预制件住在 langgraph 家 现在langchain.agents.create_agent ← 预制件搬进了 langchain 家 但发动机始终是 langgraph没换过搬完之后LangChain 这层壳底下跑的还是 LangGraph。预制件搬家 ≠ 发动机搬家这是理解整个关系的关键。四、实测证据全在 pip 依赖表里光说概念没用我直接装了最新的包langgraph 1.2.12 / langchain 1.4.3 / deepagents 0.7.20用importlib.metadata把依赖关系扒出来import importlib.metadata as md for p in [langgraph, langchain]: reqs [str(r) for r in md.requires(p) or []] print(p, [r for r in reqs if langgraph in r.lower() or langchain in r.lower()])实测输出langgraph 依赖 - [langchain-core2,1.4.7, langgraph-checkpoint..., langgraph-prebuilt..., langgraph-sdk...] langchain 依赖 - [langchain-core..., langgraph1.3.0,1.2.11, langchain-openai, langchain-anthropic, ...]看清楚这两行langgraph 不依赖 langchain——它只依赖 langchain-core基础类型和自己家的 checkpoint/prebuilt/sdklangchain 依赖 langgraph1.2.11——实锤被依赖的是底层。证据二返回类型。用create_agent创建一个 agent看它返回什么from langchain.agents import create_agent agent create_agent(modelollama:qwen3:0.6b, tools[], system_prompthi) print(type(agent)) # class langgraph.graph.state.CompiledStateGraph类型名里的 module 是langgraph.graph.state——create_agent返回的就是一个 LangGraph 编译图。证据三LangGraph 裸图独立可跑。不写任何 agent 逻辑纯图from langgraph.graph import StateGraph, START, END from typing_extensions import TypedDict class S(TypedDict): text: str def node_a(state: S): return {text: state[text] A} def node_b(state: S): return {text: state[text] B} g StateGraph(S) g.add_node(a, node_a); g.add_node(b, node_b) g.add_edge(START, a); g.add_edge(a, b); g.add_edge(b, END) print(g.compile().invoke({text: })) # {text: AB}PyPI 官方描述原话LangGraph is built by LangChain Inc, the creators of LangChain,but can be used without LangChain。五、现在的完整分层把三条证据合起来2026 年的分层就是一张图DeepAgents 规划 / 文件系统 / 子 agent / skills强观点 harness ↓ 依赖 LangChain create_agent middleware标准 agent 抽象 ↓ 构建在其上 LangGraph 图运行时持久化执行、streaming、checkpoint、human-in-the-loop ↓ 共享基础类型 langchain-core Message、Tool 等基础抽象记忆方法只有一句封装方向永远是高层包低层——DeepAgents 包 LangChainLangChain 包 LangGraph。六、面试怎么答三句金句面试官问「LangChain 和 LangGraph 什么关系」时按这三句答关系句「方向是 LangChain 封装 LangGraph不是反过来。同一家公司但 LangGraph 可以脱离 LangChain 独立用——单独pip install langgraph就能跑。」演进句「create_react_agent从 langgraph.prebuilt 搬进了 langchain.agents社区使用习惯收敛到标准 agent loopLangGraph 退回纯运行时专注持久化执行和 HITL。」选型句「简单工具调用用create_agent要精确控制流程直接写 LangGraph 图长周期多步任务用 DeepAgents。」七、选型结论表场景用什么理由标准 tool-calling agentlangchain.agents.create_agent最快middleware 可定制精确控制流程分支、审批、确定性步骤混排直接写 LangGraphStateGraph图编排的原生能力长周期多步任务deep research、代码类DeepAgents自带规划、文件系统、子 agent纯工作流无 LLM 决策LangGraph 裸图或普通代码别为了用框架而用框架写在最后这个关系的判断其实不靠记忆靠一条可验证的规则看依赖表。被依赖的是底层封装的是上层。下次再有新的 Lang 系包出来先pip show一下依赖方向立刻清楚。如果这篇文章帮你理清了关系点个收藏对分层有不同理解欢迎评论区交流。原创声明本文为原创文章实测数据基于 langgraph 1.2.12 / langchain 1.4.3 / deepagents 0.7.20转载请注明出处。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →