【DeepAgents 从入门到精通】DeepAgents初识

文章目录

  • 第 1 章:DeepAgents 是什么
    • 1.1 本章目标
    • 1.2 核心概念
      • 1.2.0 前置概念速览
      • 1.2.1 LangChain 生态图谱
      • 1.2.2 DeepAgents 核心理念:Agent Harness(代理马具)
    • 1.3 安装与环境搭建
    • 1.4 create_deep_agent() 函数签名
    • 1.5 实战:Hello World -- 第一个 DeepAgent
      • 场景
      • 完整代码
      • 运行结果
      • 逐段解析
    • 1.6 DeepAgents 自动提供了什么
      • 自动就绪(无需任何配置,开箱即用)
      • 可选启用(需要显式配置才会生效)
    • 1.7 API 列表速查
    • 1.8 常见错误与避坑
      • 错误 1:混淆 `create_deep_agent` 和 `create_agent`
      • 错误 2:忘记设置 API Key
      • 错误 3:工具函数没有 docstring
      • 错误 4:在 `model` 参数中写错 provider 前缀
      • 错误 5:混淆 `invoke` 和 `ainvoke` 的调用场景
    • 1.9 最佳实践
    • 1.10 本章小结

第 1 章:DeepAgents 是什么

1.1 本章目标

完成本章学习后,你将具备以下能力:

  1. 理解 LangChain 生态中 LangChain、LangGraph、DeepAgents 三者的层级关系与分工
  2. 掌握 DeepAgents 作为 “agent harness”(代理马具)的核心理念与四大设计特点
  3. 独立完成 DeepAgents 的安装与环境搭建,并成功运行第一个 Hello World Agent
  4. 理解create_deep_agent()函数签名中每个参数的含义与默认值
  5. 了解 DeepAgents 自动提供的六大内置能力:planning(规划)、filesystem(文件系统)、subagents(子代理)、summarization(摘要)、human-in-the-loop(人机协同)

1.2 核心概念

1.2.0 前置概念速览

在深入 DeepAgents 之前,你需要先了解几个核心术语。以下用最通俗的类比解释:

术语一句话解释类比
LLM(大语言模型)能够理解和生成文本的 AI 模型,如 GPT-4、Claude一个读过全世界书籍的"超级大脑"
Agent(智能代理)能够自主使用工具、做决策、执行多步任务的 AI 程序一个能独立思考并使用工具的"机器人助手"
Tool(工具)Agent 可以调用的函数,如搜索网页、读写文件、执行代码Agent 手中的"扳手"和"螺丝刀"
LangGraphLangChain 旗下的有状态工作流框架,用图(Graph)来编排 Agent 的执行流程一张"施工蓝图",定义了 Agent 执行的每一步
State(状态)Agent 在运行过程中保存的所有数据,如对话历史、文件内容Agent 的"笔记本",记录所有做过的事
Checkpointer(检查点)将 Agent 状态持久化到磁盘,以便中断后恢复游戏的"存档点",关机后可以接着玩
Middleware(中间件)在 Agent 执行流程中插入的拦截器,可以修改请求/响应安检流程中的"传送带",每个包裹都要经过检查
MCP(Model Context Protocol)连接 AI 模型和外部工具的标准协议各种电器通用的"USB 接口"

学习建议:如果你对以上某个术语感到陌生,不要担心–随着教程深入,你会逐步理解每个概念。现在只需要知道它们"大概是什么"即可。第 2 章将深入剖析所有架构细节。

1.2.1 LangChain 生态图谱

要理解 DeepAgents,首先需要看清 LangChain 生态的三层架构。这三层如同建造一栋大楼:

  • LangChain是"建筑材料"(building blocks)-- 提供模型调用、工具定义、消息处理等基础组件
  • LangGraph是"施工框架"(runtime)-- 提供状态图、持久化、流式处理、人机协同等运行时能力
  • DeepAgents是"精装样板间"(agent harness)-- 在 LangChain + LangGraph 之上,预置了规划、文件系统、子代理、摘要等开箱即用的能力

LangChain (Building Blocks / 基础组件)

Chat Models 对话模型

Tools 工具

Messages 消息

Prompts 提示词

MCP 协议

LangGraph (Runtime / 运行时)

StateGraph 状态图

Checkpointer 持久化

Streaming 流式处理

Interrupt 中断机制

DeepAgents (Agent Harness / 代理马具)

Planning 规划

Filesystem 文件系统

Subagents 子代理

Summarization 摘要

Human-in-the-Loop 人机协同

Memory 记忆

通俗类比:如果把构建 AI Agent 比作造车:

  • LangChain 是发动机、轮胎、方向盘等零部件
  • LangGraph 是底盘和电路系统,让零部件能协同工作
  • DeepAgents 是一辆整车,你坐进去就能开,不必从零组装

1.2.2 DeepAgents 核心理念:Agent Harness(代理马具)

DeepAgents 官方将自己定位为“agent harness”,而非一个 agent framework。这个比喻非常精准:

  • 马具(harness)不是马本身,而是让骑手能够驾驭马的一套装备
  • DeepAgents不是 agent 本身,而是让开发者能够驾驭 LLM 的一套"鞍具"

它具备四个关键设计特点:

特点含义价值
Opinionated(有主见的)内置最佳实践的默认配置,不必从零做决策降低入门门槛,避免"空白画布恐惧"
Extensible(可扩展的)通过 Middleware 机制可插入自定义逻辑满足复杂场景需求,不限制创造力
Model-agnostic(模型无关的)支持 OpenAI、Anthropic、Google、AWS Bedrock 等不被单一供应商锁定
Production-ready(生产就绪的)内置持久化、流式输出、错误重试、人机协同从原型到上线无需重写

1.3 安装与环境搭建

# 安装 deepagents 核心包pipinstalldeepagents# 安装常用模型提供商(按需选择)pipinstall-U"langchain[openai]"# OpenAIpipinstall-U"langchain[anthropic]"# Anthropicpipinstall-U"langchain[google-genai]"# Google Gemini# 如需 MCP 协议支持pipinstalllangchain-mcp-adapters# 设置 API KeyexportOPENAI_API_KEY="sk-..."# 或exportANTHROPIC_API_KEY="sk-..."

1.4 create_deep_agent() 函数签名

fromdeepagentsimportcreate_deep_agent agent=create_deep_agent(model:str|BaseChatModel|None=None,tools:Sequence[BaseTool|Callable|dict[str,Any]]|None=None,*,system_prompt:str|SystemMessage|None=None,middleware:Sequence[AgentMiddleware]=(),subagents:Sequence[SubAgent|CompiledSubAgent|AsyncSubAgent]|None=None,skills:list[str]|None=None,memory:list[str]|None=None,permissions:list[FilesystemPermission]|None=None,backend:BackendProtocol|BackendFactory|None=None,interrupt_on:dict[str,bool|InterruptOnConfig]|None=None,response_format:ResponseFormat[ResponseT]|type[ResponseT]|dict[str,Any]|None=None,state_schema:type[DeepAgentState]|None=None,context_schema:type[ContextT]|None=None,checkpointer:Checkpointer|None=None,store:BaseStore|None=None,debug:bool=False,name:str|None=None,cache:BaseCache|None=None,)->CompiledStateGraph

参数速查表

参数类型默认值说明
modelstr | BaseChatModel | NoneNone模型标识符(如"openai:gpt-5.5")或模型实例
toolsSequence[BaseTool | Callable | dict] | NoneNone自定义工具列表,支持函数、@tool 装饰器、工具字典
system_promptstr | SystemMessage | NoneNone系统提示词,定义 Agent 的角色和行为
middlewareSequence[AgentMiddleware]()自定义中间件列表,合并到默认栈中
subagentsSequence[SubAgent | CompiledSubAgent | AsyncSubAgent] | NoneNone自定义子代理定义列表
skillslist[str] | NoneNoneSkill 目录路径,按需加载领域知识
memorylist[str] | NoneNoneAGENTS.md 文件路径,提供持久记忆
permissionslist[FilesystemPermission] | NoneNone文件系统访问权限规则
backendBackendProtocol | BackendFactory | NoneNone(默认 StateBackend)文件系统后端
interrupt_ondict[str, bool | InterruptOnConfig] | NoneNone工具调用前暂停,等待人工审批
response_formatResponseFormat | type | dict | NoneNone结构化输出格式定义
state_schematype[DeepAgentState] | NoneNone自定义图状态 Schema
context_schematype[ContextT] | NoneNone每次运行的上下文 Schema
checkpointerCheckpointer | NoneNone持久化检查点,用于中断恢复
storeBaseStore | NoneNoneLangGraph Store,用于跨线程持久化
debugboolFalse是否开启调试模式
namestr | NoneNoneAgent 名称,用于流式追踪
cacheBaseCache | NoneNone模型调用缓存

1.5 实战:Hello World – 第一个 DeepAgent

场景

创建一个带搜索工具的 DeepAgent,能够查询天气信息。

完整代码

# hello_deep_agent.pyfromdeepagentsimportcreate_deep_agent# 1. 定义一个工具函数 -- 模拟天气查询defget_weather(city:str)->str:"""Get the current weather for a given city. Args: city: The name of the city to look up. Returns: A string describing the weather in that city. """# 模拟天气数据weather_data={"beijing":"Sunny, 28C","shanghai":"Cloudy, 25C","tokyo":"Rainy, 18C","san francisco":"Foggy, 15C",}city_lower=city.lower()ifcity_lowerinweather_data:returnf"The weather in{city.title()}is{weather_data[city_lower]}."returnf"It's always sunny in{city}!"# 2. 创建 DeepAgentagent=create_deep_agent(model="openai:gpt-4o-mini",# 使用 provider:model 格式tools=[get_weather],system_prompt="You are a helpful weather assistant. Use the get_weather tool to answer weather questions.",)# 3. 运行 Agentresult=agent.invoke({"messages":[{"role":"user","content":"What is the weather in Beijing and Tokyo?"}]})# 4. 打印结果formsginresult["messages"]:ifhasattr(msg,"content")andmsg.content:print(f"[{msg.type.upper()}]:{msg.content[:200]}")

运行结果

[SYSTEM]: You are a helpful weather assistant. Use the get_weather tool to answer weather questions. [HUMAN]: What is the weather in Beijing and Tokyo? [AI]: Let me check the weather for both cities. [TOOL]: The weather in Beijing is Sunny, 28C. [TOOL]: The weather in Tokyo is Rainy, 18C. [AI]: Here's the weather for both cities: - Beijing: Sunny, 28C - Tokyo: Rainy, 18C

逐段解析

第 1 步 – 定义工具函数get_weather是一个普通的 Python 函数,但它的 docstring 和类型注解会被 DeepAgents 自动解析为工具的 Schema(名称、描述、参数)。DeepAgents 会将参数类型(city: str)和文档字符串(Get the current weather...)转换为 LLM 可理解的 tool definition。

第 2 步 – 创建 Agentcreate_deep_agent()是 DeepAgents 的核心工厂函数。它接收模型标识符、工具列表和系统提示词,内部自动完成:

  • 构建默认中间件栈(TodoListMiddleware+FilesystemMiddleware+SubAgentMiddleware
  • 基于 LangGraph 创建状态图(StateGraph
  • 注册所有内置工具(lsread_filewrite_fileedit_fileglobgrepwrite_todostask

第 3 步 – 运行 Agentagent.invoke()将消息列表传递给 Agent。Agent 的 LangGraph 运行时执行 plan-act-observe-reflect 循环,直到模型决定不再需要调用工具为止。

第 4 步 – 输出结果result["messages"]包含完整的对话历史,包括 SystemMessage、HumanMessage、AIMessage、ToolMessage。你可以遍历消息列表来获取最终回复。

1.6 DeepAgents 自动提供了什么

当你调用create_deep_agent()时,以下能力自动就绪可选启用,分为两类:

自动就绪(无需任何配置,开箱即用)

能力对应的中间件说明
Planning(规划)TodoListMiddleware提供write_todos工具,Agent 可创建和管理结构化任务列表
Filesystem(文件系统)FilesystemMiddleware提供lsread_filewrite_fileedit_fileglobgrepdelete工具,Agent 可像操作文件系统一样读写数据
Subagents(子代理)SubAgentMiddleware提供task工具,Agent 可将复杂任务委派给隔离的子代理
Summarization(摘要)内置上下文管理当对话历史过长时,自动压缩旧消息,防止超出 Token 限制

可选启用(需要显式配置才会生效)

能力启用方式说明
Human-in-the-loop(人机协同)通过interrupt_on参数启用在关键操作前暂停,等待人工审批
Memory(记忆)通过memory参数启用加载AGENTS.md文件作为持久化记忆,跨会话保留偏好

1.7 API 列表速查

API来源说明
create_deep_agent()deepagents创建 DeepAgent 的工厂函数
agent.invoke(input)LangGraph同步调用 Agent,输入消息列表
agent.ainvoke(input)LangGraph异步调用 Agent
agent.stream_events(input)LangGraph流式获取 Agent 执行事件
FilesystemPermissiondeepagents文件系统权限规则
StateBackenddeepagents.backends默认后端(内存 + 状态持久化)

1.8 常见错误与避坑

错误 1:混淆create_deep_agentcreate_agent

# 错误:LangChain 的 create_agent 没有内置文件系统和子代理fromlangchain.agentsimportcreate_agent agent=create_agent(model="openai:gpt-4o-mini",tools=[...])# agent 没有 ls, read_file, write_todos, task 等工具# 正确:使用 deepagents 的 create_deep_agentfromdeepagentsimportcreate_deep_agent agent=create_deep_agent(model="openai:gpt-4o-mini",tools=[...])# agent 自动拥有完整的内置工具集

错误 2:忘记设置 API Key

# 错误:未设置环境变量agent=create_deep_agent(model="openai:gpt-4o-mini")# 抛出 AuthenticationError# 正确:先设置 API Keyimportos os.environ["OPENAI_API_KEY"]="sk-..."agent=create_deep_agent(model="openai:gpt-4o-mini")

错误 3:工具函数没有 docstring

# 错误:没有 docstringdefget_weather(city:str)->str:returnf"Weather in{city}"# 正确:包含完整 docstring(会被转化为 tool description)defget_weather(city:str)->str:"""Get the current weather for a given city. Args: city: The name of the city to look up. """returnf"Weather in{city}"

错误 4:在model参数中写错 provider 前缀

# 错误:不存在的 provider 或格式错误agent=create_deep_agent(model="gpt-4o-mini")# 缺少 provider 前缀# 正确:使用 provider:model 格式agent=create_deep_agent(model="openai:gpt-4o-mini")agent=create_deep_agent(model="anthropic:claude-sonnet-4-6")

错误 5:混淆invokeainvoke的调用场景

# 错误:在 async 函数中调用同步 invokeasyncdefmain():result=agent.invoke(...)# 会阻塞事件循环# 正确:在 async 函数中使用 ainvokeasyncdefmain():result=awaitagent.ainvoke(...)

1.9 最佳实践

  1. 始终为工具函数编写完整的 docstring:DeepAgents 依赖 docstring 为 LLM 生成工具描述,缺失 docstring 会导致 LLM 不知道何时调用该工具。
  2. 使用provider:model格式指定模型:这种格式让你可以在不同提供商之间快速切换,无需修改代码结构。
  3. 善用system_prompt:明确的系统提示词显著提升 Agent 行为质量,尤其是明确告诉 Agent 何时使用task工具委派子代理。
  4. 从简单开始,逐步增加复杂度:先用create_deep_agent(model=..., tools=[...])跑通基本流程,再逐步添加subagentsmiddlewarepermissions等高级参数。
  5. 使用 LangSmith 追踪 Agent 执行:设置LANGCHAIN_TRACING_V2=trueLANGCHAIN_API_KEY,在 LangSmith 中可视化查看 Agent 的每一步推理和工具调用。

1.10 本章小结

  1. DeepAgents 是 LangChain 生态中的"agent harness",位于 LangChain(基础组件)和 LangGraph(运行时)之上,提供开箱即用的 Agent 能力。
  2. 通过create_deep_agent()一行代码即可创建功能完整的 Agent,自动获得 planning、filesystem、subagents、summarization 等六大能力。
  3. 安装只需pip install deepagents,支持 OpenAI、Anthropic、Google、AWS Bedrock 等多种模型提供商,真正实现 model-agnostic。