原文链接

Deep Agents - LangChain Blog

引言

使用语言模型(LLM)在循环中调用工具是最简单的代理形式。然而,这种架构可能会导致代理“浅层”,无法处理较长时间跨度或复杂任务的规划与执行。像“Deep Research”、“Manus”和“Claude Code”这样的应用通过结合四种关键要素克服了这一局限:规划工具、子代理、文件系统访问以及详细的提示词。本文受 Claude Code 的启发,探讨了其通用性背后的原因,并尝试抽象和泛化这些特性。

浅层代理的局限

目前的主流代理架构是循环调用工具的简单模型。然而,这种“浅层”代理在长时间跨度或复杂任务的规划上表现不足。所谓“浅层”,指的是代理无法有效规划长期目标或处理复杂任务。

深层代理(deep agents)的特性

我们将能够深入研究主题的代理称为“深层代理”。它们在复杂任务的规划与执行上表现更佳,核心算法仍然是语言模型在循环中调用工具,但与简单代理相比,深层代理有以下区别:

  1. 复杂系统提示词:Claude Code 使用了详细的系统提示词,包含工具使用说明和示例(少样本提示),以指导代理在特定情境下的行为。复杂的提示词对深层代理的性能至关重要。
  2. 规划工具:Claude Code 使用了一个“待办事项列表”工具,尽管它实际上是一个空操作(no-op)。这种工具的存在有助于代理进行规划。
  3. 子代理:深层代理如 Claude Code 可以生成子代理,将任务拆分并分配给专门的子代理,从而实现更细粒度的任务管理和上下文控制。
  4. 文件系统访问:深层代理通常具有文件系统访问权限,不仅用于完成任务,还用于记录笔记和作为代理间协作的共享工作空间。例如,Manus 利用文件系统实现“记忆”功能。

深入解析 LangChain 的“深层代理”概念 - 图1

深层代理的优势

深层代理在长时间跨度的复杂任务上表现更佳。规划(即使是通过空操作工具调用)是其核心组成部分。子代理的引入使得深层代理能够专注于具体任务,深入研究主题。文件系统则为代理提供了持久化的上下文管理能力。

LangChain 的深层代理包

LangChain 开发了一个通用的深层代理包,允许用户定制自己的深层代理。该包包括以下内置组件:

  • 受 Claude Code 启发的通用系统提示词
  • 与 Claude Code 相同的空操作待办事项列表规划工具
  • 支持自定义提示词、工具和子代理的灵活配置

用户可以通过传递自定义提示词(插入到更大的系统提示词中)、自定义工具和子代理,轻松创建自己的深层代理。

结论

深层代理通过结合规划工具、子代理、文件系统访问和详细提示词,显著提升了代理在复杂任务上的表现。LangChain 的深层代理包为开发者提供了灵活的工具,以构建定制化的深层代理,满足多样化的应用需求。

总结

本文探讨了传统“浅层”代理的局限性以及“深层代理”的优势。深层代理通过复杂的系统提示词、规划工具、子代理和文件系统访问,能够更好地处理长时间跨度和复杂任务。文章强调了规划和上下文管理的重要性,并介绍了 LangChain 的深层代理包,该包提供了可定制的组件,帮助开发者构建高效的代理系统。这一框架特别适合需要深度研究和复杂任务自动化的场景。