关于 framework-selection
framework-selection 是用于在 LangChain、LangGraph 和 Deep Agents 之间做选择的决策指南,帮助开发者根据工作流复杂度匹配框架层级,并说明如何组合使用。
主要功能
- 01根据任务需求选择框架
- 02比较框架能力与取舍
- 03了解各选项的后续技能
- 04了解如何组合不同框架层级
适用场景
- 01在 Agent 项目开始前选择框架
- 02在简单 Agent 循环与自定义控制流间做选择
- 03判断是否需要规划、记忆或委派
- 04将 Deep Agents 编排与 LangGraph 工作流结合
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ langchain-ai/ langchain-skills --skill framework-selection安装后在 Claude Code 中输入/framework-selection确认已加载。
详细介绍
┌─────────────────────────────────────────┐
│ Deep Agents │ ← highest level: batteries included
│ (planning, memory, skills, files) │
├─────────────────────────────────────────┤
│ LangGraph │ ← orchestration: graphs, loops, state
│ (nodes, edges, state, persistence) │
├─────────────────────────────────────────┤
│ LangChain │ ← foundation: models, tools, chains
│ (models, tools, prompts, RAG) │
└─────────────────────────────────────────┘
选择更高层并不会让你无法使用较低层——你可以在 Deep Agents 中使用 LangGraph 图,也可以在两者中使用 LangChain 基元。
**在选择其他技能或编写 Agent 代码之前,应先在每个项目的顶部加载此技能。**你选择的框架决定接下来要调用哪些其他技能。
决策指南
请按顺序回答以下问题:
| 问题 | 是 → | 否 → |
|---|---|---|
| 任务是否需要将工作拆分为子任务、在较长的会话中管理文件、持久化记忆,或按需加载技能? | Deep Agents | ↓ |
| 任务是否需要复杂的控制流——循环、动态分支、并行工作者、人机协作,或自定义状态? | LangGraph | ↓ |
| 这是一个接收输入、运行工具并返回结果的单一用途 Agent 吗? | LangChain(create_agent) | ↓ |
| 这是一个没有 Agent 循环的纯模型调用、链或检索管道吗? | LangChain(链) | — |
框架简介
LangChain — 适用于专注且自成一体的任务
最适合:
- 使用固定工具集的单一用途 Agent
- RAG 管道和文档问答
- 模型调用、提示词模板、输出解析
- Agent 逻辑简单的快速原型
不太适合:
- Agent 需要规划许多步骤
- 状态需要跨多个会话持久保存
- 控制流包含条件或迭代
接下来要调用的技能: langchain-models、langchain-rag、langchain-middleware
LangGraph — 适用于需要掌控控制流的场景
最适合:
- 具有分支逻辑或循环的 Agent(例如,重试直到正确、反思)
- 根据中间结果走不同路径的多步骤工作流
- 在特定步骤进行人机协作审批
- 并行分发/汇总(map-reduce 模式)
- 在会话内的多次调用之间持久保存状态
不太适合:
- 希望由框架代为处理规划、文件管理和子 Agent 委派(这种情况请使用 Deep Agents)
- 工作流足够简单,使用简单 Agent 即可
接下来要调用的技能: langgraph-fundamentals、langgraph-human-in-the-loop、langgraph-persistence
最适合:
- 需要拆分为待办事项列表的长时间运行任务
- 需要在一个会话中读取、写入和管理文件的 Agent
- 将子任务委派给专用子 Agent
- 按需加载特定领域技能
- 能够跨多个会话持久保存的记忆
不适合:
- 任务简单到可以由单一用途的 Agent 完成
- 需要对每条图边进行精确、手动控制(请直接使用 LangGraph)
中间件 — 内置且可扩展:
Deep Agents 开箱即带有内置中间件层 — 你只需配置它,而不必实现它。以下中间件已预先接入;你也可以在此基础上添加自定义中间件:
| 中间件 | 提供的功能 | 始终启用? |
|---|---|---|
TodoListMiddleware | write_todos 工具 — Agent 规划并跟踪多步骤任务 | ✓ |
FilesystemMiddleware | ls、read_file、write_file、edit_file、glob、grep 工具 | ✓ |
SubAgentMiddleware | task 工具 — 将工作委派给指定名称的子 Agent | ✓ |
SkillsMiddleware | 按需从技能目录加载 SKILL.md 文件 | 选择启用 |
MemoryMiddleware | 通过 Store 实例跨会话保留长期记忆 | 选择启用 |
HumanInTheLoopMiddleware | 在调用敏感工具前中断流程并请求人工批准 | 选择启用 |
接下来要调用的技能: deep-agents-core、deep-agents-memory、deep-agents-orchestration
混合使用各层
由于这些框架采用分层设计,因此可以在同一个项目中组合使用。最常见的模式是将 Deep Agents 用作顶层协调器,同时针对专用子 Agent 使用 LangGraph。何时混合使用
| 场景 | 推荐模式 |
|---|---|
| 主 Agent 需要规划和记忆,但某个子任务需要精确控制图结构 | Deep Agents 协调器 → LangGraph 子 Agent |
| 专用流水线(例如 RAG、反思循环)由更广泛的 Agent 调用 | 将 LangGraph 图包装为工具或子 Agent |
| 进行高级别协调,但针对特定领域使用底层图 | Deep Agents + 作为子 Agent 的 LangGraph 编译图 |
实际运作方式
可以将 LangGraph 编译图注册为 Deep Agents 中的子 Agent。这意味着你可以构建一个受严格控制的 LangGraph 工作流(例如检索与验证循环),然后将其交给 Deep Agents 的 task 工具,作为一个具名子 Agent — Deep Agents 协调器会将任务委派给它,而无需了解其内部图结构。
LangChain 工具、链和检索器可以在 LangGraph 节点和 Deep Agents 工具中自由使用 — 它们是各层共用的构建模块。
快速参考
| LangChain | LangGraph | Deep Agents | |
|---|---|---|---|
| 控制流 | 固定(工具循环) | 自定义(图) | 托管(中间件) |
| 中间件层 | 仅回调 | ✗ 无 | ✓ 显式、可配置 |
| 规划 | ✗ | 手动 | ✓ TodoListMiddleware |
| 文件管理 | ✗ | 手动 | ✓ FilesystemMiddleware |
| 持久记忆 | ✗ | 使用检查点保存器 | ✓ MemoryMiddleware |
| 子 Agent 委派 | ✗ | 手动 | ✓ SubAgentMiddleware |
| 按需加载技能 | ✗ | ✗ | ✓ SkillsMiddleware |
| 人在回路中 | ✗ | 手动中断 | ✓ HumanInTheLoopMiddleware |
| 自定义图边 | ✗ | ✓ 完全控制 | 有限 |
| 设置复杂度 | 低 | 中 | 低 |
| 灵活性 | 中 | 高 | 中 |
中间件是 LangChain(回调)和 Deep Agents(显式中间件层)特有的概念。LangGraph 没有中间件 — 你需要将行为直接接入节点和边。