☰
LangChain 1.0 和 LangGraph 到底谁封装谁?我把 pip 依赖表扒了一遍,答案全在里面
2026/10/1 19:48:13 网站建设 项目流程

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

一句话先给结论:是 LangChain 封装了 LangGraph,不是 LangGraph 封装 LangChain。2025 年 10 月 LangChain 1.0 发布之后,create_agent底层跑的就是 LangGraph。我实测装了一遍依赖、看了一遍返回类型,证据全在 pip 的依赖表里,文末给面试三句金句和选型表。

一、为什么这个关系总是被搞反

后台收到不少私信问「LangGraph 是不是变成了 LangChain 的封装」,我一开始没当回事,直到自己也差点说反。搞反的原因有三个:

  1. 名字前缀:LangGraph 挂着 Lang 前缀,看起来像 LangChain 的附属品;
  2. 同一家公司:LangGraph 就是 LangChain 团队写的,大家默认「先有的包是底层」;
  3. 一次搬家事件被误读:create_react_agent从 langgraph 搬进了 langchain,很多人把「功能从 A 移到 B」读成了「A 变成了 B 的封装」。

方向恰恰相反。这篇文章用三条实测证据把这事说死。

二、三年演进时间线:关系不是一天变成这样的

时间事件当时的定位
2022.11LangChain 诞生LCEL 链式编排 + AgentExecutor,线性串联
2024.01LangGraph 发布图编排(StateGraph、节点、条件边、循环),目标是取代 AgentExecutor
2025.07DeepAgents 发布建在 agent 之上的「深度任务」harness,思路来自 Claude Code
2025.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-core<2,>=1.4.7', 'langgraph-checkpoint...', 'langgraph-prebuilt...', 'langgraph-sdk...'] langchain 依赖 -> ['langchain-core...', 'langgraph<1.3.0,>=1.2.11', 'langchain-openai', 'langchain-anthropic', ...]

看清楚这两行:

  • langgraph 不依赖 langchain——它只依赖 langchain-core(基础类型)和自己家的 checkpoint/prebuilt/sdk;
  • langchain 依赖 langgraph(>=1.2.11)——实锤,被依赖的是底层。

证据二:返回类型。用create_agent创建一个 agent,看它返回什么:

from langchain.agents import create_agent agent = create_agent(model="ollama:qwen3:0.6b", tools=[], system_prompt="hi") 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 包 LangChain,LangChain 包 LangGraph。

六、面试怎么答(三句金句)

面试官问「LangChain 和 LangGraph 什么关系」时,按这三句答:

  1. 关系句:「方向是 LangChain 封装 LangGraph,不是反过来。同一家公司,但 LangGraph 可以脱离 LangChain 独立用——单独pip install langgraph就能跑。」
  2. 演进句:「create_react_agent从 langgraph.prebuilt 搬进了 langchain.agents,社区使用习惯收敛到标准 agent loop,LangGraph 退回纯运行时,专注持久化执行和 HITL。」
  3. 选型句:「简单工具调用用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,转载请注明出处。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询