LangChain,LangGraph ,deepagents 三者的关系

4 阅读6分钟

LangChain 定位与 Skills/MCP 疑问总结

1. 你这轮问题的核心

你连续追问的本质是:

  1. 为什么 LangChain Overview 里几乎不强调 skills,但 Deep Agents 里重点强调?
  2. skillsMCP 难道不是基础能力吗?为什么 LangChain 看起来支持不重?
  3. LangChain 里明明有 MCP,那它到底把 MCP 当什么?
  4. 从产品设计上,LangChain / LangGraph / Deep Agents 的边界是什么?

2. 一句话结论

  • LangChain:通用能力层(模型、提示词、工具、RAG、记忆、链式组合)。
  • LangGraph:流程运行层(状态机、回路、中断恢复、检查点)。
  • Deep Agents:高级 Agent 产品层(skills、长任务自动上下文管理、子代理等)。

所以你看到的现象是合理的:

  • skills 在 Deep Agents 里是一等能力。
  • 在 LangChain 里不是主设计中心。

重点强调:skills 在 LangChain 里不是一等公民概念
LangChain 的一等公民更偏 model / prompt / tool / retriever / runnable / memory
skills 主要在 Deep Agents 这层被强化为核心能力。


3. 为什么 LangChain 不把 skills 放在主叙事

3.1 LangChain 的目标是“通用中间层”

LangChain 要保持中立和低耦合,优先做“所有项目都用得上的最小公约数”:

  • 模型抽象
  • Prompt 模板
  • Tool 调用
  • RAG
  • 输出结构化
  • 记忆与链路编排

skills 是更“意见化”的能力组织方式(目录规范、打包格式、加载策略、权限策略),放在基础层会限制通用性。

3.2 skills 更像“上层产品能力”

Deep Agents 强调的是“开箱即用的高能力 Agent”。 这时 skills 作为能力包(文档+脚本+资源+调用约定)非常关键,所以在 Deep Agents 文档中被重点呈现。


4. MCP 在 LangChain 里是什么角色

你的理解是对的: LangChain 里的 MCP,主要是通过 adapter 映射进 Tool 体系来使用。

也就是说:

  • MCP server 提供能力
  • LangChain 通过 MCP adapter 把这些能力转成 agent 可调用的 tools
  • 不是在 LangChain 核心里另起一套“技能包运行时”

所以你会感觉:

  • “有 MCP”
  • 但“skills 感知不强”

两者并不矛盾,因为它们分属不同抽象层。


5. 你的疑问“这些不是基础能力吗”怎么回答

要分“基础能力”的层级:

  1. 基础框架层基础能力(LangChain 视角)
  • 模型、Prompt、工具、RAG、输出、链路
  1. Agent 产品层基础能力(Deep Agents 视角)
  • skills 打包
  • 长任务自动上下文治理
  • 更强的 agent 运行体验

所以不是“不重要”,而是“在哪一层当一等公民”。


6. 你可以对外复述的标准版

LangChain 是通用能力中间层,负责把模型、工具、检索、输出标准化; LangGraph 是流程与状态运行时,负责分支、回路、检查点和恢复; Deep Agents 是更高层的 Agent 产品框架,把 skills 和长任务上下文治理作为核心能力。

因此,LangChain 文档里 skills 不重,是分层设计; 不是能力缺失,而是把 skills 的主战场放在 Deep Agents。


7. 选型建议(结合你当前认知)

  1. 想快速搭稳定业务 Agent:LangChain + LangGraph
  2. 想要更强开箱能力(skills、自动上下文治理):评估 Deep Agents
  3. 想要高度可控、可定制:以 LangChain/LangGraph 为主,自定义 skills 规范

8. 对应文档链接


9. 最近新增问题补充:Deep Agents / LangChain / LangGraph 三者关系

9.1 分层关系(先记这个)

  1. Deep Agents:更高层、更“开箱即用”的 Agent 产品层(技能、长任务管理、子代理等)。
  2. LangChain:中间层开发框架(模型、Prompt、Tools、RAG、链式编排)。
  3. LangGraph:底层运行时(状态机执行、分支/回路、中断恢复、checkpoint)。

一句话:

  • Deep Agents 偏“快上手”
  • LangChain 偏“可组合”
  • LangGraph 偏“可生产运行”
flowchart TB
  U["业务:耳机坏了售后"] --> DA["Deep Agents(产品层)"]
  DA --> LC["LangChain(能力层)"]
  LC --> LG["LangGraph(运行时层)"]
  LG --> INFRA["LLM/API/DB/向量库/审批系统"]

9.2 有了 Deep Agents,还要不要 LangChain?

结论:不是二选一,而是互补。

  • 简单/快速落地:你可以主要写 Deep Agents 配置,间接使用 LangChain 能力。
  • 需要深度定制:你会直接下沉到 LangChain(比如模型参数、RAG 细节、Tool 约束、输出控制)。

10. “用了 Deep Agents,是否还要用 LangChain 模型 API?”

结论:不一定“必须手写”,但底层模型抽象来自 LangChain。

10.1 可以不手写(字符串模型)

import { createDeepAgent } from 'deepagents'

const agent = createDeepAgent({
  model: 'openai:gpt-5.2'
})

10.2 需要高级控制时会手写(LangChain 模型 API)

import { createDeepAgent } from 'deepagents'
import { initChatModel } from 'langchain/chat_models/universal'

const model = await initChatModel('anthropic:claude-sonnet-4-6', {
  maxTokens: 16000,
  maxRetries: 10
})

const agent = createDeepAgent({ model })

所以更准确的表述是:

  • Deep Agents 提供“可直接用”的模型入口;
  • 但高级场景下通常会显式用 LangChain 模型 API 做精细控制。

11. 这句是否准确:Deep Agents 依赖 LangChain,LangChain 依赖 LangGraph?

基本准确,但需加一层限定:

  1. Deep Agents 建在 LangChain 之上(并利用 LangGraph 运行时能力)。
  2. LangChain 的 Agent/流程能力明显依赖 LangGraph。
  3. LangChain 并非所有模块都依赖 LangGraph(例如一些纯模型/纯提示词场景)。

建议对外说法:

Deep Agents 建在 LangChain 之上;LangChain 的 Agent 层建在 LangGraph 运行时之上。


12. 什么是“基于 LangGraph 运行时”?为什么 ReactAgent 要依赖它?

12.0 直接回答你这句原问题

问题:LangChain 的 Agent 层为什么依赖 LangGraph 运行,是因为 ReactAgent 是一个循环的图吗?

直接答案:是,这就是核心原因之一;并且不只是“循环”,还包括路由、状态持久化、中断恢复和流式执行。

可以拆成两层理解:

  1. ReAct 天生是循环:model -> tool -> model -> ... -> END,不是一次 if 判断。
  2. 生产上需要运行时保障:分支选择、checkpoint、人工审批后恢复、可观测轨迹,这些都由 LangGraph 运行时承接。

12.1 通俗解释

“运行时”不是你画图的地方,而是让图真正执行的引擎。它负责:

  1. 节点调度(下一步跑谁)
  2. 分支路由(命中哪条边)
  3. 回路执行(反复追问直到信息齐)
  4. 状态持久化(checkpoint)
  5. 中断与恢复(人工审批后继续)
  6. 流式输出与轨迹观测

12.2 为什么不是一个 if 就够?

你问得非常关键:

  • if 处理一次判断;
  • Agent 要处理“多轮 + 工具调用 + 回路 + 中断恢复”,本质是循环状态机。

伪代码本质更接近:

while (currentNode !== 'END') {
  const out = await runNode(currentNode, state)
  state = merge(state, out)
  await saveCheckpoint(state)
  currentNode = route(state)
}

这就是为什么 ReactAgent 需要运行时引擎,而不是简单函数串起来。


13. 代码上能看到吗?(源码证据)

下面是可直接定位到的证据(langchainjs 源码):

  1. createAgent 返回 new ReactAgent(...)
    libs/langchain/src/agents/index.ts:622

  2. ReactAgent 直接引入 @langchain/langgraph 的运行时对象(StateGraph/START/END/Send/Command
    libs/langchain/src/agents/ReactAgent.ts:17

  3. 先构图,再 compile,并挂 checkpointer/store
    libs/langchain/src/agents/ReactAgent.ts:246
    libs/langchain/src/agents/ReactAgent.ts:666

  4. 对外 invoke/stream 最终都委托给图运行时
    libs/langchain/src/agents/ReactAgent.ts:1185
    libs/langchain/src/agents/ReactAgent.ts:1261

  5. 依赖声明里有 @langchain/langgraph 与 checkpoint 包
    libs/langchain/package.json:73-74

这说明“LangChain Agent 层基于 LangGraph 运行时”不是概念说法,而是代码级事实。