【译】深度代理(Deep Agents)

33 阅读4分钟

深度代理(Deep Agents)

image.png

让 LLM 在循环里调用工具是最简单的代理形态。但这种架构容易产出“浅”代理,没法为更长周期、更复杂的任务规划和执行。像“Deep Research”“Manus”“Claude Code”这类应用,通过结合四件事绕开了这个限制:规划工具、子代理、文件系统,以及一份详细的提示词。

致谢:本文主要受 Claude Code 及人们在纯编码之外使用它的报道启发。Claude Code 为何能变成通用工具?能否把这些特性抽象并泛化出来?

深度代理的现状

如今出现的主流代理架构,也是最简单的:循环运行,调用工具。

但如果照本宣科地这么做,得到的代理会有点“浅”。这里的“浅”指代理缺乏在更长时间尺度上做规划、处理更复杂任务的能力。

研究和编码是两个出现了“例外”的领域。所有主要模型提供商都有面向深度研究和“异步”编码任务的代理。很多创业公司和客户都在为自己的垂直场景打造版本。

我把这些代理称作“深度代理”——因为它们能在主题上深入下去。它们通常能为复杂任务制定计划,并在更长时间里围绕这些目标执行。

是什么让这些代理能走得更深?

核心算法其实一样——LLM 在循环里调用工具。与容易搭出来的朴素代理相比,不同之处在于:

  • 详细的 system prompt
  • 规划工具
  • 子代理
  • 文件系统

image.png

深度代理的特征

详细的 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“深度研究”代理简单示例。

在这里试用 deepagents