DeepAgents介绍
构建能够规划、使用子代理以及利用文件系统来处理复杂任务的代理。它强调了该工具可以创建具有规划能力、能够使用子代理以及借助文件系统来应对复杂、多步骤任务的代理。
deepagents 是一个独立的库,用于构建能够应对复杂、多步骤任务的代理。基于 LangGraph 构建,并受到 Claude Code、Deep Research 和 Manus 等应用的启发,Deep Agents 具备规划能力、用于上下文管理的文件系统以及生成子代理的能力:
- 独立的库:意味着“deepagents”是一个独立的软件组件,它不依赖于其他特定的软件环境,可以单独使用。
- 构建能够应对复杂、多步骤任务的代理:说明该库的主要用途是创建能够处理复杂任务的代理。复杂任务通常涉及多个步骤,需要代理具备一定的规划和执行能力。
- 基于 LangGraph 构建:表明“deepagents”是建立在“LangGraph”这个基础之上的。这可能意味着它利用了“LangGraph”提供的一些功能或架构。
- 受到 Claude Code、Deep Research 和 Manus 等应用的启发:这说明“deepagents”的设计思路受到了这些应用的影响,可能借鉴了它们的一些功能或特性。
- 具备规划能力:代理能够制定计划,以有效地完成任务。
- 用于上下文管理的文件系统:代理可以利用文件系统来管理上下文信息,这有助于处理大量的上下文数据,防止上下文窗口溢出。
- 生成子代理的能力:主代理可以创建子代理来处理特定的子任务,这有助于实现上下文隔离,保持主代理的上下文清晰。
总的来说DeepAgents 是一个企业级 AI Agent 框架,它就像给 AI 装上了:
- 🗂️ 文件系统:让 AI 能读写文件
- 🤖 子智能体:让 AI 能分配任务给专业助手
- 💾 长期记忆:让 AI 能记住跨会话的信息
- ⚙️ 命令执行:让 AI 能运行 shell 命令
- 🔄 人机协作:让 AI 在关键操作前征求人类同意
DeepAgents使用场景
- 处理复杂、多步骤任务(Handle complex, multi - step tasks that require planning and decomposition)
- 复杂任务的定义
- 复杂任务是指那些不能简单地一步完成的任务。例如,在一个智能客服场景中,用户可能要求查询订单状态、修改订单信息并获取发票。这就不是一个简单的查询操作,而是需要多个步骤来完成的复杂任务。
- 这些任务往往需要规划,就像一个项目经理规划一个大型项目一样。深度代理需要先分析任务的整体目标,然后将其分解为多个子任务。
- 例如,对于上述智能客服的例子,深度代理可能先规划出以下步骤:首先查询订单数据库以获取订单状态,然后根据用户要求修改订单信息(这可能涉及多个子步骤,如检查库存、更新配送信息等),最后生成并发送发票。
- 管理大量上下文(Manage large amounts of context through file system tools)
- 上下文的重要性
- 在很多人工智能应用场景中,上下文是关键。上下文可以是用户之前的对话记录、相关的文档、知识库中的信息等。例如,在一个法律咨询场景中,用户可能已经提供了案件的详细背景信息,包括合同内容、事件经过等。
- 当上下文信息量很大时,深度代理需要能够有效地管理这些信息。文件系统工具可以帮助存储和检索这些上下文信息。
- 比如,深度代理可以将用户提供的法律文件存储在文件系统中,然后在需要的时候通过特定的工具(如文件检索算法)快速找到相关的文件内容,以更好地理解和回答用户的问题。
- 委派工作给专业子代理(Delegate work to specialized subagents for context isolation)
- 子代理的概念
- 子代理可以看作是深度代理的“助手”,它们专注于特定的任务或领域。这种分工可以提高效率,就像在一个企业中,不同的部门负责不同的业务一样。
- 上下文隔离是子代理的一个重要功能。例如,在一个多语言翻译应用场景中,深度代理可以将文本翻译任务委派给专门的翻译子代理。这个子代理只关注翻译任务,它有自己的上下文环境,只处理与翻译相关的上下文信息,如语言规则、词汇库等,而不会被其他无关的上下文信息干扰。
- 这样做的好处是能够提高子代理的性能和准确性,同时也可以让深度代理更好地协调各个子代理的工作。
- 在对话和线程之间持续保持记忆(Persist memory across conversations and threads)
- 持续记忆的作用
- 在一些连续的交互场景中,记忆是非常重要的。例如,在一个长期的项目咨询场景中,用户可能在不同的时间与深度代理进行交流,每次交流都可能涉及项目的新进展、问题等。
- 深度代理需要能够记住之前的对话内容和线程(线程可以理解为一个特定的交流主题或任务序列)。这样它就可以在新的交流中继续之前的话题,而不是每次都从头开始。
- 比如,用户在第一次交流时提到了一个项目的技术难点,深度代理记录了这个信息。在后续的交流中,当用户再次提到这个技术难点时,深度代理可以基于之前的记忆提供更深入的分析或者解决方案建议。
注意:对于更简单的使用场景,考虑使用 LangChain 的 create_agent 方法,或者构建一个自定义的 LangGraph 工作流。
核心能力(Core capabilities)
- 计划和任务分解(Planning and task decomposition)
- 深度代理(Deep agents)内置了一个名为write_todos的工具。这个工具可以帮助代理将复杂的任务拆分成一些离散的步骤。例如,如果有一个任务是制作一个包含多个章节的报告,write_todos工具可以将这个任务分解为收集资料、撰写每个章节的草稿、校对和编辑等步骤。同时,代理能够跟踪任务的进度,比如记录已经完成了哪些步骤,还有哪些步骤正在进行中。并且,当有新的信息出现时,代理可以调整计划。比如,如果在撰写报告的过程中发现了一个新的重要观点,代理可以根据这个新观点对后续的步骤进行调整。
- 上下文管理(Context management)
- 代理可以使用文件系统工具(ls、read_file、write_file、edit_file)。这些工具允许代理将大量的上下文信息(比如任务相关的背景信息、数据等)转移到内存中。这样做的好处是防止上下文窗口溢出。上下文窗口溢出可以理解为代理在处理任务时,由于上下文信息过多,超出了其能够处理的范围,导致无法正常工作。通过这些工具,代理可以处理可变长度的工具结果。例如,当使用某个工具获取数据时,数据的大小可能是不确定的,文件系统工具可以帮助代理有效地管理这些不同大小的数据。
- 子代理生成(Subagent spawning)
- 有一个内置的任务工具,它使得代理能够生成专门的子代理来实现上下文隔离。上下文隔离的意思是,子代理可以专注于特定的子任务,而不会干扰主代理的上下文。例如,主代理正在处理一个大型项目,它生成一个子代理来处理项目中的一个特定模块。子代理可以深入研究这个模块,而主代理的上下文仍然保持清晰,不会被子代理处理模块时产生的大量信息所淹没。这样,主代理可以同时处理多个子任务,而不会因为上下文过于复杂而混乱。
- 长期记忆(Long-term memory)
- 使用LangGraph的Store功能,可以扩展代理的持久化内存,使其能够在多个线程(可以理解为多个任务处理流程)之间保持记忆。这意味着代理可以保存和检索之前的对话信息。比如,在一个客户服务场景中,代理可以记住之前与客户交流的内容,当再次与客户交流时,能够根据之前的对话提供更连贯、更个性化的服务。
架构图
graph TB
User[用户] --> Agent[Deep Agent]
Agent --> MW1[TodoListMiddleware
任务管理]
Agent --> MW2[FilesystemMiddleware
文件操作]
Agent --> MW3[SubAgentMiddleware
子智能体]
Agent --> MW4[SummarizationMiddleware
对话摘要]
Agent --> MW5[HumanInTheLoopMiddleware
人机交互]
MW2 --> Backend[Backend 存储层]
Backend --> StateB[StateBackend
临时存储]
Backend --> StoreB[StoreBackend
持久存储]
Backend --> SandboxB[SandboxBackend
沙箱执行]
Backend --> CompositeB[CompositeBackend
混合存储]
MW3 --> SubAgent1[通用子智能体]
MW3 --> SubAgent2[自定义子智能体]
Agent --> Store[Store 长期记忆]
Agent --> Checkpointer[Checkpointer 会话状态]
style Agent fill:#4CAF50,color:#fff
style Backend fill:#2196F3,color:#fff
style Store fill:#FF9800,color:#fff
核心概念
create_deep_agent 函数签名
1 | def create_deep_agent( |
默认内置功能
创建 Deep Agent 时,框架会自动添加以下中间件(按顺序):
TodoListMiddleware - 任务列表管理
FilesystemMiddleware - 文件系统操作(ls, read_file, write_file, edit_file, glob, grep, execute)
SubAgentMiddleware - 子智能体调度(task 工具)
SummarizationMiddleware - 对话历史摘要(防止上下文溢出)
AnthropicPromptCachingMiddleware - 提示词缓存(节省成本)
PatchToolCallsMiddleware - 修复悬空工具调用
HumanInTheLoopMiddleware - 人机交互(如果配置了 interrupt_on)
Middleware(中间件)
Middleware(中间件)就像是给 AI 加装的功能模块,每个中间件负责一个特定功能。
- FilesystemMiddleware: 文件操作(ls, read, write, edit, glob, grep, execute)
- SubAgentMiddleware: 子智能体调度
- SummarizationMiddleware: 对话历史压缩
- HumanInTheLoopMiddleware: 人机交互控制
Backend(后端存储)
Backend 决定了文件存储在哪里,就像给 AI 配置不同的”硬盘”。
- StateBackend: 临时存储(不跨会话)
- StoreBackend: 持久存储(跨会话)
- SandboxBackend: 沙箱执行(支持命令)
- CompositeBackend: 混合路由(企业级)
Store(长期记忆)
Store 是 LangGraph 提供的跨会话持久化存储,用于保存需要长期记住的信息。
Interrupt_on(人机交互)
Interrupt_on 让你能够控制 AI 在执行哪些操作前需要人类批准,防止 AI 执行危险操作。