Skip to content
On this page

LangChain 1.0 DeepAgents

通过剖析DeepAgent的实现原理,让我们知道如何灵活利用LangChain1.0,解决复杂问题。

deep_agents

1.DeepAgents概述

1.1简述

Deep Agent 代表了一种先进的语言模型(LLM)应用范式,它超越了传统的简单聊天界面,演变为一个能够持续运行并自主完成复杂任务的系统。其核心在于将大型语言模型(LLM)与一系列工具相结合,并通过链式调用这些工具来逐步解决问题,最终依靠 LLM 的推理能力来决定行动步骤和终止时机。

“Deep Agent”之所以被称为“Deep”,主要体现在以下几个方面:

•处理“长周期”任务的能力:传统的代理系统在处理需要长时间、多步骤才能完成的复杂任务时存在局限。Deep Agent 通过其架构设计,能够有效克服这一挑战,处理那些需要更长时间和更多努力才能完成的“长周期”任务。

•多层级的 ReAct 机制:用户提到“多层 ReAct,通过 Tools 扩展”,这正是 Deep Agent 深度和复杂性的体现。它不仅仅是简单的“思考-行动”循环,而是允许工具本身可以是更复杂的实体,例如子代理(Sub Agents)。这意味着一个主代理可以调用一个子代理来执行特定任务,而这个子代理又可能拥有自己的工具集和内部 ReAct 循环,从而形成一个层级化的、递归的问题解决结构。这种嵌套和分层的能力使得代理能够处理更高抽象层次的问题,并进行更深入的推理和规划。

•复杂的内部状态管理:为了支持长周期任务和多层级操作,Deep Agent 引入了更复杂的内部状态管理机制,包括详细的系统提示、规划工具和文件系统,这些都旨在维持代理在长时间运行中的一致性和效率。

1.2 与langchain系统的关系

DeepAgents 是一个独立的库,用于构建可以处理复杂多步骤任务的代理。深度代理基于 LangGraph 构建,并受到 Claude Code、Deep Research 和 Manus 等应用程序的启发,具有规划功能、用于上下文管理的文件系统以及生成子代理的能力。

Deep Agents 建立在以下基础上:

  • LangGraph - 提供底层图执行和状态管理
  • LangChain - 工具和模型集成与深度代理无缝协作
  • LangSmith - 通过 LangGraph 平台实现可观测性和部署

Deep Agent 应用程序可以通过 LangSmith Deployment 进行部署,并使用 LangSmith Observability 进行监控。

2.Deep Agent 的核心组成部分

Deep Agent 的强大能力源于其精心设计的几个核心组成部分:

2.1 系统提示 (System Prompt)

系统提示是 Deep Agent的“指导手册”。它不仅仅是简单的指令,而是通常长达数百行代码的详细文本,其中包含了对代理的语气、风格、行为模式以及如何使用工具的明确指示。这些提示融合了多种信息,旨在为代理提供一个清晰的操作框架。

最佳实践:

•详细且有组织:成功的系统提示虽然冗长,但结构清晰,通过 XML 标签等方式明确划分了代理的介绍、功能、行为准则和工具使用示例。

•少样本提示 (Few-Shot Prompting):通过提供具体的示例(而非完全复制对话),强化代理的行为和工具执行的正确性。

•带注释的工具 (Annotated Tools):工具的描述不仅限于其功能,还包括使用示例,甚至错误示例,以指导代理正确使用。

•综合性:提示内容涵盖了技术和非技术层面,例如通信风格、价值观等,以确保代理在复杂情境下表现出期望的行为。

2.2 规划工具 (Planning Tool)

规划工具是 Deep Agent 保持任务专注和管理上下文的关键。它鼓励代理创建和维护一个待办事项列表,并将其作为执行任务的首要步骤之一。待办事项列表中的条目会被标记为未完成、进行中或已完成,为代理提供清晰的任务进度视图。

核心益处:

•聚焦目标:规划工具最主要的战术益处是将当前目标和目的推到模型上下文的最前沿,帮助模型在复杂的行动序列中保持专注。

•上下文管理:通过不断地重新浮现和重申计划,规划工具确保代理在历史上下文不断增长的情况下,仍能保持对核心任务的理解和执行。

2.3 文件系统 (File System)

随着代理运行时间增长、执行更多动作并摄取更多信息,其需要管理的上下文量会迅速膨胀。尽管现代 LLM 拥有巨大的上下文窗口(例如百万级 token),但持续加载所有信息既不经济也不高效。文件系统作为 Deep Agent 的“记忆”系统,解决了这一挑战。

功能与优势:

•外部记忆:文件和链接被用作一种外部记忆形式,允许上下文被保留但并非始终加载。

•高效管理:代理可以创建、写入、编辑和搜索文件。当需要时,相关文件信息被加载到上下文中;不需要时则可以卸载,但文件路径、URL 或 URI 会被保留在对话历史中,以便随时引用。

•可压缩、可恢复、持久化:这种记忆系统是可压缩的(只加载需要的部分)、可恢复的(通过文件路径重新访问)且在代理的多次运行中持久存在的。

•处理大规模信息:文件系统使得代理能够导航和理解大型代码库或数据集,而无需加载所有信息,从而显著提高了效率和可扩展性。

2.4 子代理 (Sub Agents)

子代理是 Deep Agent 架构中最为强大和灵活的特性之一,它们可以被视为代理系统的“子程序”或“函数”。子代理是专门的、独立的工具调用代理,可以由主 Deep Agent 系统按需调用。当主代理需要执行特定任务时,它可以通过一个函数调用(例如 Claude Code 中的 Task 函数)来启动一个子代理,并向其传递相关的指令和上下文。

子代理的优势:

•上下文管理:每个子代理在其自身的上下文窗口中运行,使其能够专注于手头的特定任务及其专属工具。完成任务后,它只将最重要的结果返回给主 Deep Agent,避免了主代理需要跟踪整个子任务历史的负担。这体现了“代理即工具”的模式。

•模块化:一个子代理可以被定义一次,并在多个不同的场景中重复使用。例如,一个“网络研究子代理”可以被任何需要网络搜索功能的 Deep Agent 系统调用。

•专业化:针对特定任务设计的子代理,其性能通常优于通用系统。它们可以使用更精细的提示和定制的工具来更直接、高效地处理请求。

•效率:除了优化上下文和 token 管理外,子代理还可以并行运行,从而同时处理多个未完成的任务,显著提高整体效率。

子代理通过提供一种委托机制,极大地补充了通过规划工具鼓励的任务分解方法,从而简化并优化了 Deep Agent 系统的整体操作。

3.快速入门

本指南将引导您创建具有规划、文件系统工具和子代理功能的第一个深度代理。您将建立一个可以进行研究和撰写报告的研究代理。

第 1 步:安装依赖项

pip install deepagents tavily-python

第 2 步:设置您的 API 密钥

export ANTHROPIC_API_KEY="your-api-key"export TAVILY_API_KEY="your-tavily-api-key"

第 3 步:创建搜索工具
python
import os
from typing import Literal
from tavily import TavilyClient
from deepagents import create_deep_agent

tavily_client = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])

def internet_search(
    query: str,
    max_results: int = 5,
    topic: Literal["general", "news", "finance"] = "general",
    include_raw_content: bool = False,
):
    """Run a web search"""
    return tavily_client.search(
        query,
        max_results=max_results,
        include_raw_content=include_raw_content,
        topic=topic,
    )
第 4 步:创建深度代理
python
# System prompt to steer the agent to be an expert researcher
research_instructions = """You are an expert researcher. Your job is to conduct thorough research and then write a polished report.

You have access to an internet search tool as your primary means of gathering information.

## `internet_search`

Use this to run an internet search for a given query. You can specify the max number of results to return, the topic, and whether raw content should be included.
"""

agent = create_deep_agent(
    tools=[internet_search],
    system_prompt=research_instructions
)
第 5 步:运行代理
python
result = agent.invoke({"messages": [{"role": "user", "content": "What is langgraph?"}]})

# Print the agent's response
print(result["messages"][-1].content)
完成上述步骤之后,系统会发生什么?

你的 Deep Agent 会自动执行以下步骤:

  1. 规划研究方案:使用内置工具 write_todos 来分解研究任务。
  2. 开展研究:调用 internet_search 工具来收集相关信息。
  3. 管理上下文:使用文件系统工具(如 write_fileread_file)来存储和读取较大的搜索结果,以节省上下文空间。
  4. 创建子代理(如有需要):将复杂的子任务交由专门的子代理(Subagents)执行。
  5. 综合生成报告:汇总研究结果,编写成结构化、连贯的最终报告。