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)。

相关推荐
一如既往の5 小时前
LangChain 是什么
langchain
new Object ~6 小时前
langchain 的向量存储
langchain
Timer@6 小时前
LangChain 教程 04|Agent 详解:让 AI 学会“自己干活“
javascript·人工智能·langchain
YuanDaima20488 小时前
基于 LangChain 1.0 的检索增强生成(RAG)实战
人工智能·笔记·python·langchain·个人开发·langgraph
qq_54702617910 小时前
LangChain 工具调用(Tool Calling)
java·大数据·langchain
AI大模型..11 小时前
数据洞察加速器:LLM Copilot 如何让 SQL 查询效率提升 50% 以上?
人工智能·langchain·llm·agent·llama
汀沿河14 小时前
6 LangGraph的stream流式输出
langchain
new Object ~1 天前
LangChain的短期记忆存储实现
python·langchain
liu****1 天前
LangChain-AI应用开发框架(六)
人工智能·python·langchain·大模型应用·本地部署大模型
java资料站1 天前
第07章:LangChain使用之Agents
langchain