LangChain 定位与 Skills/MCP 疑问总结
1. 你这轮问题的核心
你连续追问的本质是:
- 为什么
LangChain Overview里几乎不强调skills,但Deep Agents里重点强调? skills、MCP难道不是基础能力吗?为什么 LangChain 看起来支持不重?- LangChain 里明明有 MCP,那它到底把 MCP 当什么?
- 从产品设计上,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. 你的疑问“这些不是基础能力吗”怎么回答
要分“基础能力”的层级:
- 基础框架层基础能力(LangChain 视角)
- 模型、Prompt、工具、RAG、输出、链路
- Agent 产品层基础能力(Deep Agents 视角)
- skills 打包
- 长任务自动上下文治理
- 更强的 agent 运行体验
所以不是“不重要”,而是“在哪一层当一等公民”。
6. 你可以对外复述的标准版
LangChain 是通用能力中间层,负责把模型、工具、检索、输出标准化; LangGraph 是流程与状态运行时,负责分支、回路、检查点和恢复; Deep Agents 是更高层的 Agent 产品框架,把 skills 和长任务上下文治理作为核心能力。
因此,LangChain 文档里 skills 不重,是分层设计; 不是能力缺失,而是把 skills 的主战场放在 Deep Agents。
7. 选型建议(结合你当前认知)
- 想快速搭稳定业务 Agent:
LangChain + LangGraph - 想要更强开箱能力(skills、自动上下文治理):评估
Deep Agents - 想要高度可控、可定制:以 LangChain/LangGraph 为主,自定义 skills 规范
8. 对应文档链接
- LangChain Overview: docs.langchain.com/oss/javascr…
- Deep Agents Skills: docs.langchain.com/oss/javascr…
- LangChain MCP: docs.langchain.com/oss/javascr…
- LangGraph Overview: docs.langchain.com/oss/javascr…
9. 最近新增问题补充:Deep Agents / LangChain / LangGraph 三者关系
9.1 分层关系(先记这个)
- Deep Agents:更高层、更“开箱即用”的 Agent 产品层(技能、长任务管理、子代理等)。
- LangChain:中间层开发框架(模型、Prompt、Tools、RAG、链式编排)。
- 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?
基本准确,但需加一层限定:
- Deep Agents 建在 LangChain 之上(并利用 LangGraph 运行时能力)。
- LangChain 的 Agent/流程能力明显依赖 LangGraph。
- LangChain 并非所有模块都依赖 LangGraph(例如一些纯模型/纯提示词场景)。
建议对外说法:
Deep Agents 建在 LangChain 之上;LangChain 的 Agent 层建在 LangGraph 运行时之上。
12. 什么是“基于 LangGraph 运行时”?为什么 ReactAgent 要依赖它?
12.0 直接回答你这句原问题
问题:LangChain 的 Agent 层为什么依赖 LangGraph 运行,是因为 ReactAgent 是一个循环的图吗?
直接答案:是,这就是核心原因之一;并且不只是“循环”,还包括路由、状态持久化、中断恢复和流式执行。
可以拆成两层理解:
- ReAct 天生是循环:
model -> tool -> model -> ... -> END,不是一次if判断。 - 生产上需要运行时保障:分支选择、checkpoint、人工审批后恢复、可观测轨迹,这些都由 LangGraph 运行时承接。
12.1 通俗解释
“运行时”不是你画图的地方,而是让图真正执行的引擎。它负责:
- 节点调度(下一步跑谁)
- 分支路由(命中哪条边)
- 回路执行(反复追问直到信息齐)
- 状态持久化(checkpoint)
- 中断与恢复(人工审批后继续)
- 流式输出与轨迹观测
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 源码):
-
createAgent返回new ReactAgent(...)
libs/langchain/src/agents/index.ts:622 -
ReactAgent直接引入@langchain/langgraph的运行时对象(StateGraph/START/END/Send/Command)
libs/langchain/src/agents/ReactAgent.ts:17 -
先构图,再
compile,并挂checkpointer/store
libs/langchain/src/agents/ReactAgent.ts:246
libs/langchain/src/agents/ReactAgent.ts:666 -
对外
invoke/stream最终都委托给图运行时
libs/langchain/src/agents/ReactAgent.ts:1185
libs/langchain/src/agents/ReactAgent.ts:1261 -
依赖声明里有
@langchain/langgraph与 checkpoint 包
libs/langchain/package.json:73-74
这说明“LangChain Agent 层基于 LangGraph 运行时”不是概念说法,而是代码级事实。