LangChain V1 create_agent 与 DeepAgents create_deep_agent 对比学习

LangChain Agent 与 Deep Agent 深度解析

一、核心概念:两个函数的定位

1.1 create_agent --- 通用基础框架

create_agent 是 LangChain 官方提供的通用 Agent 创建函数,位于 langchain/agents/factory.py。它提供了最基础的 Agent 架构:

复制代码
┌─────────────────────────────────────────────────────────┐
│                    create_agent                          │
├─────────────────────────────────────────────────────────┤
│  • 创建 LangGraph StateGraph                            │
│  • 核心节点:model + tools(可选)                        │
│  • 支持 8 个中间件钩子接口                                │
│  • 工具循环:model → tools → model → ...                │
│  • 支持结构化输出 response_format                        │
└─────────────────────────────────────────────────────────┘

1.2 create_deep_agent --- 预置全家桶

create_deep_agentdeepagents 库的高级封装,基于 create_agent 构建,添加了大量开箱即用的企业级功能:

复制代码
┌─────────────────────────────────────────────────────────┐
│                  create_deep_agent                       │
├─────────────────────────────────────────────────────────┤
│  ✓ 调用 create_agent(底层实现)                         │
│  ✓ 预置 BASE_AGENT_PROMPT                               │
│  ✓ 注入 8 个内置中间件                                   │
│  ✓ 配置默认模型(Claude Sonnet 4.5)                     │
│  ✓ 支持子代理系统、Skill、Memory                         │
│  ✓ 支持后端抽象(开发/生产环境切换)                      │
└─────────────────────────────────────────────────────────┘

二、功能对比

特性 create_agent create_deep_agent
默认模型 无(需手动指定) Claude Sonnet 4.5
内置工具 ls, read_file, write_file, execute, task
内置中间件 8 个预置中间件
子代理系统 需手动实现 subagents 参数直接配置
后端支持 StateBackend / FilesystemBackend
人工介入 需自己实现 interrupt_on 参数
System Prompt 用户完全自定义 预置 BASE_AGENT_PROMPT

三、预置全家桶的位置

3.1 基础 System Prompt

预置的 AI 行为指导 prompt,包含核心行为准则、专业客观风格、任务执行流程等。

3.2 内置中间件栈

复制代码
┌──────────────────────────────────────────────────────────┐
│              deepagent_middleware 栈                      │
├──────────────────────────────────────────────────────────┤
│  1. TodoListMiddleware         → Todo 列表管理            │
│  2. MemoryMiddleware          → 记忆加载                 │
│  3. SkillsMiddleware          → Skill 能力扩展           │
│  4. FilesystemMiddleware      → 文件系统操作             │
│  5. SubAgentMiddleware        → 子代理调用                │
│  6. SummarizationMiddleware   → 消息压缩                 │
│  7. AnthropicPromptCachingMiddleware → 提示缓存          │
│  8. PatchToolCallsMiddleware  → 工具调用修补             │
└──────────────────────────────────────────────────────────┘

四、tools 参数的作用

4.1 工具来源对比

来源 工具类型 示例
内置 Middleware 通用能力 文件操作、子代理、Shell 执行
tools 参数 业务自定义 天气查询、数据库查询、内部 API

4.2 使用示例

python 复制代码
from deepagents import create_deep_agent

# 业务自定义工具
def query_orders(order_id: str) -> dict:
    """查询订单信息"""
    return {"order_id": order_id, "status": "shipped"}

def search_internal_docs(query: str) -> str:
    """搜索内部文档"""
    return "搜索结果..."

# 使用内置能力 + 自定义业务工具
agent = create_deep_agent(
    tools=[query_orders, search_internal_docs],  # 你的业务工具
)

五、工具调用时机

5.1 调用流程(两者完全相同)

复制代码
┌─────────────┐     ┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│    Model    │────▶│  ToolNode   │────▶│    Model    │────▶│     END     │
│  invoke()   │     │  执行工具   │     │  处理结果   │     │             │
└─────────────┘     └─────────────┘     └─────────────┘     └─────────────┘
      │                    │                   │                    
   tool_calls         ToolMessage         tool_calls              

无论工具来自 Middleware 还是 tools 参数,调用时机完全相同

  1. Model 输出 tool_calls
  2. ToolNode 执行对应工具
  3. 返回 ToolMessage 给 Model
  4. Model 继续处理

5.2 唯一的区别:注册时机

来源 注册时机 灵活性
tools 参数 静态 - agent 创建时确定 固定
Middleware 工具 动态 - 可在运行时注册 更灵活

六、为什么用 Middleware 而非直接内置?

6.1 不仅仅只是"工具"

这些 Middleware 提供的远不止简单工具,而是带状态的复杂能力

python 复制代码
# 文件系统中间件 - 需要 backend 来确定如何执行
FilesystemMiddleware(backend=backend)

# 子代理中间件 - 不是简单工具,是复杂编排
SubAgentMiddleware(backend=backend, subagents=all_subagents)

# 记忆中间件 - 需要 backend 存储
MemoryMiddleware(backend=backend, sources=memory)

# Skill 中间件 - 运行时动态加载
SkillsMiddleware(backend=backend, sources=skills)

6.2 架构优势对比

方面 直接 tools=[] Middleware
配置能力 固定 可传参数(backend、sources 等)
状态管理 有自己的状态
后端解耦 硬编码 可切换执行后端
动态能力 静态 可运行时加载
编排逻辑 复杂流程控制

6.3 关键:后端抽象

复制代码
┌─────────────────────────────────────────────────────────┐
│                    Backend 抽象层                        │
├─────────────────────────────────────────────────────────┤
│                                                         │
│    ┌──────────────┐      ┌──────────────────┐         │
│    │  StateBackend │      │ FilesystemBackend │         │
│    │   (内存模拟)   │      │   (真实文件系统)   │         │
│    └──────────────┘      └──────────────────┘         │
│           ▲                       ▲                    │
│           │         backend       │                     │
│           └───────────────────────┘                     │
│                       │                                 │
│    ┌──────────────────────────────────────────┐        │
│    │  FilesystemMiddleware / SubAgentMiddleware │       │
│    └──────────────────────────────────────────┘        │
│                                                         │
└─────────────────────────────────────────────────────────┘

通过 backend 参数,可以轻松切换:

  • 开发环境 :用 StateBackend(内存模拟,安全快速)
  • 生产环境 :用 FilesystemBackend(真实文件系统)

七、总结

对比维度 create_agent create_deep_agent
定位 通用框架 预置全家桶
复杂度 低(需自己组合) 高(开箱即用)
适用场景 简单场景、定制化需求 复杂企业场景
工具来源 手动传入 Middleware + tools 参数
后端支持 有(可切换)

核心理解

  • create_agent = 通用框架,你自己组合中间件和工具
  • create_deep_agent = 预置全家桶,开箱即用的 AI 助手,适合需要文件操作、子代理、记忆等复杂场景

通过 Middleware 提供内置工具是为了 可配置、可替换、带状态 --- 工具不是孤立的函数,而是需要执行环境(backend)、需要动态加载能力(Skills、Memory)、需要复杂编排(SubAgent)。

相关推荐
心在飞扬3 小时前
我把本地文档 RAG 做成了可用系统:Flask + Vue3 + LangChain + FAISS(多知识库 + 流式输出)
langchain·openai·ai编程
知秋丶5 小时前
LangGraph 实战:如何用“双图编排”将多模态 OCR-RAG 做到生产级落地
人工智能·langchain·ocr
Java咩7 小时前
LangChain 之 LCEL表达式语法
python·langchain·lcel
来一斤小鲜肉7 小时前
Spring AI核心:高阶API之ChatMemory
langchain·aigc
王解8 小时前
开源与第三方视角:Thoughtworks、LangChain等如何看待Harness Engineering?
langchain·开源·ai agent
武汉知识图谱科技8 小时前
超越预测性维护:基于知识超图与根因推理的能源电力“免疫系统”构建
人工智能·物联网·langchain·能源·知识图谱·embedding
西西弗Sisyphus10 小时前
使用 langchain 的 PromptTemplate 处理多变量提示词
langchain·agent
Monly2110 小时前
大模型:LangChain调用大语言模型
人工智能·语言模型·langchain