深度代理(Deep Agents)
让 LLM 在循环里调用工具是最简单的代理形态。但这种架构容易产出“浅”代理,没法为更长周期、更复杂的任务规划和执行。像“Deep Research”“Manus”“Claude Code”这类应用,通过结合四件事绕开了这个限制:规划工具、子代理、文件系统,以及一份详细的提示词。
致谢:本文主要受 Claude Code 及人们在纯编码之外使用它的报道启发。Claude Code 为何能变成通用工具?能否把这些特性抽象并泛化出来?
深度代理的现状
如今出现的主流代理架构,也是最简单的:循环运行,调用工具。
但如果照本宣科地这么做,得到的代理会有点“浅”。这里的“浅”指代理缺乏在更长时间尺度上做规划、处理更复杂任务的能力。
研究和编码是两个出现了“例外”的领域。所有主要模型提供商都有面向深度研究和“异步”编码任务的代理。很多创业公司和客户都在为自己的垂直场景打造版本。
我把这些代理称作“深度代理”——因为它们能在主题上深入下去。它们通常能为复杂任务制定计划,并在更长时间里围绕这些目标执行。
是什么让这些代理能走得更深?
核心算法其实一样——LLM 在循环里调用工具。与容易搭出来的朴素代理相比,不同之处在于:
- 详细的 system prompt
- 规划工具
- 子代理
- 文件系统
深度代理的特征
详细的 system prompt
Claude Code 的重现版 system prompt很长。它包含大量使用工具的细节指令,也包含示例(few shot)来指导在特定场景下的行为。
Claude Code 不是特例——大多数优秀的编码或深度研究代理都有相当复杂的 system prompt。没有这些,代理就没那么“深”。提示词仍然重要!
规划工具
Claude Code 使用一个Todo 列表工具。有趣的是——它什么也不做!完全是 no-op。只是种上下文工程手法,用来让代理保持在轨道上。
深度代理更擅长在更长时间内执行复杂任务。规划(即便通过一个 no-op 工具调用完成)是关键组成部分。
子代理
Claude Code 可以启动子代理。这让它能拆分任务。你也可以创建自定义子代理,获得更多控制权。这支持“上下文管理与 prompt 快捷”。
深度代理在主题上走得更深,主要是通过启动专注于单独任务的子代理,再让这些子代理在那里深入。
文件系统
Claude Code(当然)能访问文件系统,并修改其中文件,不光完成任务,还能顺手做笔记。它也充当所有代理(及子代理)协作的共享工作区。
Manus 是另一个大量利用文件系统作为“记忆”的深度代理例子。
深度代理运行时间长,会累积大量需要管理的上下文。手边有个文件系统来存储(并在之后读取)这些信息很有帮助。
构建你的深度代理
为方便大家为自己的垂直场景构建深度代理,我在周末撸了个开源包(deepagents)。你可以用 pip install deepagents 轻松安装,然后在这里查看使用说明。
这个包试图打造一个通用的深度代理,可定制成你自己的版本。
它自带的组件对应上面的特征:
- 一份受 Claude Code 启发、但更通用的 system prompt
- 一个 no-op 的 Todo 列表规划工具(和 Claude Code 一样)
- 启动子代理并指定自定义子代理的能力
- 一个用代理 state(LangGraph 里已有的概念)模拟的“虚拟文件系统”
你可以通过传入自定义 prompt(会插入到更大 system prompt 中作为自定义指令)、自定义工具和自定义子代理,轻松创建自己的深度代理。我们还做了一个基于 deepagents 的“深度研究”代理简单示例。