DeepAgents 介绍

DeepAgents 是一个基于 LangChain 和 LangGraph 构建的智能代理框架,旨在帮助开发者更高效地构建复杂的 AI 系统。

主要特点

技术栈

🐍 Python
🟦 TypeScript

互动小测验

DeepAgents 主要应用于哪个领域?

为什么选择 DeepAgents?

DeepAgents 不仅仅是一个 AI 代理框架,它是一套完整的智能系统构建方法论。基于 LangChain 和 LangGraph 的成熟生态,让开发者能够快速构建生产级的 AI 应用。

声明式编程

用简洁的声明式语法定义代理行为,无需编写复杂的状态管理代码。你只需描述"做什么",框架负责"怎么做"。

图式编排

基于 LangGraph 的有向图执行引擎,将复杂的代理流程可视化为状态图。支持条件分支、循环、并行执行等高级控制流。

可观测性

内置 LangSmith 追踪集成,每一步代理决策、工具调用和 LLM 交互都有完整记录,便于调试和优化。

生产就绪

内置错误处理、重试机制、速率限制和优雅降级。从原型到生产,代码几乎不需要改动。

DeepAgents 技术架构

# DeepAgents 技术架构层次
┌──────────────────────────────────┐
│        应用层 (Applications)       │
│  对话系统 │ 数据分析 │ 自动化工作流  │
├──────────────────────────────────┤
│       代理层 (Agent Runtime)       │
│  Agent  │ Pipeline  │ Router      │
├──────────────────────────────────┤
│      编排层 (LangGraph Engine)     │
│  StateGraph │ Node │ Edge │ State │
├──────────────────────────────────┤
│     工具层 (LangChain Tools)       │
│  Search │ Calculator │ Code │ ... │
├──────────────────────────────────┤
│      模型层 (LLM Providers)        │
│  OpenAI │ Anthropic │ Local LLM   │
└──────────────────────────────────┘

应用层:最终用户看到的功能——对话机器人、数据分析助手、自动化工作流等。

代理层:核心运行时,管理 Agent 生命周期、Pipeline 执行和 Router 路由。

编排层:LangGraph 提供的状态图引擎,将代理行为编排为有向图执行。

工具层:LangChain 丰富的工具生态,代理可以调用搜索引擎、计算器、代码执行器等。

模型层:支持多种 LLM 后端,可在 OpenAI、Anthropic 和本地模型之间无缝切换。

快速开始:5 分钟上手

# 安装 DeepAgents
pip install deepagents langchain langgraph

# 创建第一个智能代理
from deepagents import Agent, LLM, Tool

# 定义工具
@Tool.define
def get_weather(city: str) -> str:
    """获取指定城市的天气信息"""
    return f"{city}今天晴,温度25°C"

# 创建代理
agent = Agent(
    name="weather_assistant",
    llm=LLM(model="gpt-4"),
    tools=[get_weather],
    system_prompt="你是一个友好的天气助手"
)

# 运行代理
response = agent.run("北京今天天气怎么样?")
print(response)
# 输出:北京今天天气晴朗,温度25°C,适合出门活动!

# 多轮对话
response2 = agent.chat("那上海呢?")
print(response2)
# 输出:上海今天晴,温度25°C...(代理自动理解上下文)

第 1-2 行:安装 deepagents 及其依赖。LangChain 提供工具层,LangGraph 提供编排引擎。

第 5-10 行:用 @Tool.define 装饰器定义自定义工具。函数签名和文档字符串会被自动解析为工具描述。

第 13-17 行:创建代理时指定名称、LLM 模型、可用工具和系统提示词。这四个参数定义了代理的"身份"和"能力"。

第 20-22 行run 方法执行单次对话。代理会自动决定是否调用工具。

第 25-27 行chat 方法支持多轮对话,代理自动维护上下文记忆。

学习目标

通过本课程,你将了解:

LangChain 生态全景

理解 DeepAgents 需要先了解它所依赖的 LangChain 生态系统。LangChain 是目前最流行的 LLM 应用开发框架,而 LangGraph 是其扩展,专门用于构建有状态的、多角色的 AI 应用。

LangChain Core

核心库提供 LLM 接口抽象、消息格式、输出解析器和回调系统。所有上层组件都基于 Core 构建,确保接口一致性。

LangChain Tools

丰富的工具生态,包括搜索引擎、数据库查询、代码执行、文件操作等。代理通过工具与外部世界交互,实现真正的自主行动能力。

LangGraph

有向图编排引擎,支持状态管理、条件分支、循环和并行执行。是将简单代理升级为复杂工作流的关键组件。

LangSmith

可观测性平台,记录每一次 LLM 调用、工具使用和状态变化。对调试、性能优化和质量监控至关重要。

代理 vs 传统编程:范式对比

# 传统编程:硬编码所有逻辑
def process_order(order):
    if order.type == "standard":
        return standard_shipping(order)
    elif order.type == "express":
        return express_shipping(order)
    elif order.type == "international":
        return international_shipping(order)
    else:
        return unknown_order_handler(order)
    # 每新增一种订单类型,都要修改这个函数

# 代理编程:让 AI 自主决策
agent = Agent(
    name="order_processor",
    llm=LLM(model="gpt-4"),
    tools=[standard_shipping, express_shipping,
           international_shipping, ask_customer],
    system_prompt="你处理各种订单,自主选择最佳处理方式"
)

# 无需硬编码所有分支,代理根据上下文自主决策
result = agent.run("处理这个国际快递订单,需要加急")
# 代理自动选择 international_shipping + express 选项

传统方式:需要预先定义所有可能的分支逻辑。每次新增需求都要修改代码,维护成本随复杂度指数增长。

代理方式:只需提供工具和指导原则,代理根据自然语言描述自主选择执行路径。新增需求无需改代码,只需更新工具或提示词。

核心区别:传统编程是"确定性规则驱动",代理编程是"意图驱动"。代理更适合处理模糊的、多变的、难以穷举的业务场景。

DeepAgents 核心概念

理解 DeepAgents 的核心概念是掌握其架构和设计模式的关键。

主要组件

🤖 Agents
🧠 LLMs
🔗 Chains

概念解释

Agents

智能代理是 DeepAgents 的核心,负责决策和执行任务。

LLMs

大型语言模型为代理提供自然语言理解和生成能力。

Chains

链式结构将多个组件连接起来,形成复杂的处理流程。

互动小测验

将以下概念与其描述匹配:

决策和执行
自然语言处理
处理流程
Agents
LLMs
Chains

深入理解:Agent 的决策循环

Agent 的核心是一个 ReAct(Reasoning + Acting)循环:观察输入 → 思考下一步 → 执行动作 → 观察结果 → 继续思考,直到得出最终答案。

# Agent ReAct 循环伪代码
class Agent:
    def run(self, user_input):
        state = {"input": user_input, "history": []}

        while not state.get("finished"):
            # 1. 思考:分析当前状态
            thought = self.llm.think(
                state["input"],
                state["history"],
                available_tools=self.tools
            )

            # 2. 决策:选择动作
            action = self.llm.decide(thought)

            if action.type == "tool_call":
                # 3. 执行:调用工具
                result = self.tools[action.name].run(
                    action.arguments
                )
                state["history"].append({
                    "thought": thought,
                    "action": action,
                    "observation": result
                })
            elif action.type == "final_answer":
                # 4. 输出:返回最终答案
                state["finished"] = True
                return action.content

        return "无法完成任务"

第 4-5 行:初始化状态,保存用户输入和交互历史。

第 7-11 行思考阶段——LLM 分析当前输入和历史记录,决定下一步做什么。可以参考可用工具列表。

第 13-14 行决策阶段——LLM 输出具体动作,可能是工具调用或最终答案。

第 16-25 行执行阶段——如果是工具调用,执行工具并将结果记录到历史中,供下一轮思考使用。

第 26-29 行输出阶段——当 LLM 判断已有足够信息时,输出最终答案并结束循环。

LangGraph 状态图:Agent 的神经网络

LangGraph 是 DeepAgents 的编排引擎,它将 Agent 的工作流程建模为有向状态图。每个节点是一个处理步骤,每条边是状态转换。

from langgraph.graph import StateGraph, END

# 定义状态结构
class AgentState(TypedDict):
    messages: list[Message]
    current_tool: str | None
    tool_result: Any
    iteration: int
    max_iterations: int

# 构建状态图
graph = StateGraph(AgentState)

# 添加节点
graph.add_node("think", think_node)      # 思考
graph.add_node("decide", decide_node)    # 决策
graph.add_node("execute", execute_node)  # 执行
graph.add_node("respond", respond_node)  # 回复

# 添加边(状态转换)
graph.add_edge("think", "decide")
graph.add_conditional_edges(
    "decide",
    should_continue,
    {
        "tool_call": "execute",
        "final_answer": "respond",
        "max_iterations": "respond",
    }
)
graph.add_edge("execute", "think")  # 执行后回到思考
graph.add_edge("respond", END)       # 回复后结束

# 设置入口
graph.set_entry_point("think")

# 编译并运行
app = graph.compile()
result = app.invoke({"messages": [user_message]})

第 3-8 行:定义状态结构——消息历史、当前工具、工具结果、迭代计数和最大迭代次数。

第 11-16 行:创建四个处理节点:思考、决策、执行、回复。

第 19-29 行:定义状态转换。关键在 add_conditional_edges——决策节点根据结果路由到不同分支:需要工具就跳到执行,已有答案就跳到回复。

第 30-31 行:执行完成后回到思考节点,形成循环。回复后跳到 END 结束。

第 35-38 行:设置入口点为思考节点,编译图并运行。整个流程自动执行。

工具系统:Agent 的手脚

工具是 Agent 与外部世界交互的桥梁。DeepAgents 继承了 LangChain 丰富的工具生态,同时支持自定义工具。理解工具系统是构建实用 Agent 的关键。

搜索工具

集成 Google、Bing、Tavily 等搜索引擎,让 Agent 能实时获取网络信息。支持新闻、学术、图片等多种搜索模式。

代码执行工具

沙箱化的 Python 执行环境,Agent 可以编写和运行代码来处理数据、生成图表、执行计算。安全且隔离。

文件操作工具

读写本地和远程文件,支持 PDF、CSV、JSON 等格式。Agent 可以自动解析文档内容并提取关键信息。

数据库工具

连接 SQL 和 NoSQL 数据库,Agent 可以执行查询、分析数据模式、生成报表。支持自然语言到 SQL 的自动转换。

关键要点

代理决策循环:ReAct 模式

DeepAgents 的代理采用 ReAct(Reasoning + Acting)模式进行决策。每一步,代理都会先"思考"当前状态,然后选择一个"行动"(调用工具或回复用户),再根据行动结果继续推理。

  1. 观察(Observe):接收用户输入或上一步工具的返回结果
  2. 思考(Think):LLM 分析当前状态,决定下一步该做什么
  3. 行动(Act):调用工具执行操作,或生成最终回复
  4. 重复以上步骤,直到生成最终回复

ReAct 决策过程示例

# 代理内部决策过程(简化版)
agent.run("上海今天的天气适合户外运动吗?")

# 内部决策链:
# [思考] 用户想知道上海天气是否适合户外运动
# [行动] 调用 get_weather("上海")
# [观察] 返回:上海,多云,28°C,湿度 65%
# [思考] 多云28度适合运动,但需考虑湿度较高
# [行动] 调用 get_uv_index("上海")
# [观察] 返回:UV指数 3(中等)
# [思考] 温度适宜,湿度稍高,UV中等,总体适合
# [回复] 上海今天多云28°C,湿度65%,UV指数中等。
#        总体适合户外运动,建议做好防晒并带水补充水分。

代码解读

代理在回答问题时不是一步到位的,而是经过多轮"思考-行动-观察"的循环。每一步都基于前一步的结果做出新的决策。这种模式让代理能够处理需要多步推理的复杂问题。

状态管理:为什么需要 LangGraph?

传统的 LangChain Chain 是线性的——输入经过一系列处理后输出。但真实的 AI 应用往往需要更复杂的控制流:条件分支(根据结果选择不同路径)、循环(反复执行直到满足条件)、并行执行(同时调用多个工具)。

LangGraph 将代理行为建模为有向图(Directed Graph),图中的每个节点是一个处理步骤,边定义了步骤之间的转移条件。这让复杂的多步推理变得清晰可控。

Chain 设计模式详解

from langchain.chains import SequentialChain, RouterChain

# 1. 顺序链:步骤按固定顺序执行
qa_pipeline = SequentialChain(
    chains=[
        question_analyzer,   # 分析问题类型和意图
        context_retriever,   # 检索相关上下文(RAG)
        answer_generator,    # 基于上下文生成答案
        fact_checker,        # 验证答案的事实准确性
    ],
    input_variables=["question"],
    output_variables=["answer", "confidence", "sources"]
)

# 2. 路由链:根据输入类型分发
router = RouterChain(
    destinations={
        "code": code_helper_chain,
        "math": math_solver_chain,
        "creative": creative_writing_chain,
        "general": general_qa_chain,
    },
    default_chain=general_qa_chain,
    llm=LLM(model="gpt-4")
)

# 3. 自定义链:组合任意逻辑
class ValidationChain(Chain):
    def _call(self, inputs):
        answer = inputs["answer"]
        # 交叉验证:用另一个 LLM 验证答案
        validation = self.validator_llm.run(
            f"验证以下答案是否准确:{answer}"
        )
        if validation.score < 0.7:
            return {"answer": "需要更多研究", "retry": True}
        return {"answer": answer, "retry": False}

顺序链:最基础的模式,步骤严格按顺序执行。适合流程固定的任务。每个链的输出自动传递给下一个链的输入。

路由链:LLM 先分析输入类型,然后将请求路由到专门的处理链。代码问题走代码链,数学问题走数学链,实现了智能"分诊"。

自定义链:继承 Chain 基类实现任意逻辑。示例中的验证链用第二个 LLM 交叉验证答案准确性,低于阈值则触发重试。

选择建议:简单线性流程用顺序链,多类型输入用路由链,需要复杂逻辑时自定义链。

Memory(记忆)系统

记忆系统让代理具备上下文感知能力。不同类型的记忆适用于不同场景——对话需要短期记忆,学习需要长期记忆,工作流需要状态记忆。

对话记忆

存储多轮对话的完整历史。支持窗口截断(只保留最近 N 轮)和摘要压缩(将历史对话压缩为摘要)两种策略,平衡上下文长度和 token 成本。

向量记忆

将历史交互向量化存储,通过语义相似度检索相关记忆。适合需要回忆"很久以前说过什么"的场景,突破上下文窗口限制。

实体记忆

从对话中自动提取关键实体(人名、地点、偏好等)并持久化存储。下次对话时自动注入相关实体信息,实现"认识用户"的效果。

DeepAgents 实践应用

通过实际案例理解 DeepAgents 的应用场景,帮助你在自己的项目中快速上手。

应用场景

🗣️ 对话系统

构建智能对话机器人,支持多轮对话和上下文理解。

📊 数据分析

利用 AI 代理自动化数据处理和分析任务。

🔍 信息检索

实现智能搜索和知识库查询功能。

代码示例

from deepagents import Agent, LLM, Chain

# 创建一个简单的代理
agent = Agent(
    name="assistant",
    llm=LLM(model="gpt-4"),
    tools=["search", "calculator"]
)

# 执行任务
result = agent.run("分析这段文本的情感")
print(result)

代码解读

  • 第1行:从 deepagents 库中导入三个核心组件
  • 第3-7行:创建一个名为"assistant"的代理,使用 GPT-4 模型,并配备搜索和计算器工具
  • 第9-10行:让代理执行一个情感分析任务并打印结果

互动小测验

在上述代码中,tools=["search", "calculator"] 的作用是什么?

实战案例:智能客服系统

智能客服是 DeepAgents 最典型的应用场景之一。下面展示如何构建一个能处理退款、查询订单、推荐产品的多功能客服代理。

from deepagents import Agent, LLM, Tool, Router

# 定义客服工具集
@Tool.define
def query_order(order_id: str) -> dict:
    """查询订单状态"""
    return {"id": order_id, "status": "配送中", "eta": "明天"}

@Tool.define
def process_refund(order_id: str, reason: str) -> dict:
    """处理退款请求"""
    return {"refund_id": "R001", "amount": 299, "status": "处理中"}

@Tool.define
def recommend_products(category: str, budget: int) -> list:
    """推荐产品"""
    return [{"name": "产品A", "price": 199}, {"name": "产品B", "price": 259}]

@Tool.define
def escalate_to_human(issue: str) -> str:
    """转接人工客服"""
    return f"已转接人工客服,问题描述:{issue}"

# 创建路由:根据意图分发到不同代理
router = Router(
    intent_classifier=LLM(model="gpt-4"),
    routes={
        "order_query": Agent(
            name="订单查询专家",
            tools=[query_order]
        ),
        "refund": Agent(
            name="退款处理专家",
            tools=[process_refund, query_order]
        ),
        "recommendation": Agent(
            name="产品推荐专家",
            tools=[recommend_products]
        ),
    },
    fallback=Agent(
        name="通用助手",
        tools=[escalate_to_human]
    )
)

# 运行客服系统
response = router.handle("我昨天买的耳机想退货")
# 路由到退款处理专家
print(response)  # "好的,我来帮您处理退款..."

第 3-18 行:定义四个客服工具——查询订单、处理退款、推荐产品和转人工。每个工具的文档字符串会作为 LLM 的工具描述。

第 20-42 行:Router 是一个智能路由器,先用 LLM 判断用户意图,再分发到对应的专业代理。每个代理有专属工具集,确保精确处理。

第 38-40 行:fallback 代理处理无法分类的请求,转接人工客服兜底。

第 45-47 行:用户说"想退货",Router 自动识别为退款意图,路由到退款处理专家代理。

实战案例:自动化数据分析

构建一个能理解自然语言查询、自动生成 SQL、执行分析并可视化结果的数据分析代理。

from deepagents import Agent, LLM, Tool
import pandas as pd

# 定义数据分析工具
@Tool.define
def execute_sql(query: str) -> str:
    """执行 SQL 查询并返回结果"""
    result = db.execute(query)
    return pd.DataFrame(result).to_markdown()

@Tool.define
def create_chart(data: str, chart_type: str) -> str:
    """根据数据生成图表"""
    df = pd.read_csv(data)
    fig = df.plot(kind=chart_type).get_figure()
    fig.savefig("chart.png")
    return "图表已保存到 chart.png"

@Tool.define
def explain_data(summary_stats: str) -> str:
    """用自然语言解释数据统计结果"""
    return f"数据分析结果:{summary_stats}"

# 创建数据分析代理
analyst = Agent(
    name="data_analyst",
    llm=LLM(model="gpt-4"),
    tools=[execute_sql, create_chart, explain_data],
    system_prompt="""你是一个数据分析专家。
    收到分析请求后:
    1. 先理解用户想知道什么
    2. 编写 SQL 查询数据
    3. 选择合适的图表类型
    4. 用简洁的语言解释结果"""
)

# 执行分析
result = analyst.run(
    "分析上个月各产品类别的销售额,找出增长最快的类别"
)
print(result)
# 代理自动:编写SQL → 执行查询 → 生成柱状图 → 用自然语言解释趋势

工具定义:三个核心工具——SQL 执行、图表生成和数据解读。覆盖数据分析的全流程。

system_prompt:明确告知代理的四步工作流程,确保分析过程有条理。

执行过程:代理收到"分析销售额"请求后,会自动执行 4 个 ReAct 循环:编写 SQL → 执行查询 → 选择图表 → 解释结果。整个过程用户只需一句话。

记忆系统:让代理记住上下文

真正的智能代理需要记住之前的对话内容。DeepAgents 提供了多种记忆机制,从简单的对话历史到复杂的长期记忆。

from deepagents import Agent, LLM, Memory

# 短期记忆:对话历史(默认)
agent_with_short_memory = Agent(
    name="assistant",
    llm=LLM(model="gpt-4"),
    memory=Memory(type="conversation", window=10),
    # 只保留最近 10 轮对话
)

# 长期记忆:向量数据库
agent_with_long_memory = Agent(
    name="assistant",
    llm=LLM(model="gpt-4"),
    memory=Memory(
        type="vector_store",
        provider="chromadb",
        collection="user_preferences",
        # 自动提取和检索重要信息
    ),
)

# 组合使用:短期 + 长期
agent = Agent(
    name="personal_assistant",
    llm=LLM(model="gpt-4"),
    memory=[
        Memory(type="conversation", window=10),
        Memory(type="vector_store", provider="chromadb"),
        Memory(type="summary", frequency=5),
        # 每 5 轮对话自动生成摘要
    ],
)

# 测试记忆效果
agent.chat("我叫张三,是一名软件工程师")
agent.chat("我喜欢用 Python 做数据分析")
agent.chat("我正在学习 LangChain")

# 50 轮对话后...
response = agent.chat("根据我的背景,推荐一些学习资源")
# 代理记住了:张三 + Python + 数据分析 + LangChain
# 会推荐:LangChain 实战 + Python AI 开发相关资源

短期记忆:保留最近 N 轮对话,适合当前会话上下文。window=10 表示只保留最近 10 轮。

长期记忆:使用 ChromaDB 等向量数据库存储重要信息,跨会话持久化。代理可以记住用户的偏好、背景和历史交互。

摘要记忆:定期将对话压缩为摘要,节省 token 消耗。每 5 轮自动生成一次。

组合使用:三种记忆协同工作——短期保证当前对话连贯,长期保存用户画像,摘要控制 token 开销。

实践要点

RAG(检索增强生成)实战

RAG 是解决 LLM "知识过期"和"幻觉"问题的核心技术。通过将外部知识库与 LLM 结合,让代理基于真实数据给出准确回答。

from deepagents import Agent, LLM, Tool
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings

# 第一步:构建知识库
documents = load_documents("./knowledge_base/")
chunks = text_splitter.split_documents(
    documents, chunk_size=500, chunk_overlap=50
)
vectorstore = Chroma.from_documents(
    documents=chunks,
    embedding=OpenAIEmbeddings(),
    persist_directory="./chroma_db"
)

# 第二步:创建 RAG 检索工具
@Tool.define
def search_knowledge_base(query: str) -> str:
    """在知识库中搜索与查询相关的文档"""
    results = vectorstore.similarity_search(query, k=3)
    return "\n\n".join([
        f"[来源{i+1}] {doc.page_content}"
        for i, doc in enumerate(results)
    ])

# 第三步:创建 RAG 代理
rag_agent = Agent(
    name="knowledge_assistant",
    llm=LLM(model="gpt-4"),
    tools=[search_knowledge_base],
    system_prompt="""你是知识库助手。回答时先搜索相关内容,
    基于搜索结果给出答案。始终标注信息来源。"""
)

response = rag_agent.run("公司年假政策是什么?")

第一步:加载文档并分割为 500 字的块,用向量嵌入存储到 Chroma 数据库。

第二步:将向量搜索封装为工具,返回最相关的 3 个文档片段。

第三步:创建代理,系统提示词要求先搜索再回答并标注来源,确保答案基于事实。

核心价值:代理不再依赖 LLM 训练数据回答,而是基于你的最新知识库,彻底解决幻觉问题。

DeepAgents 进阶主题

掌握进阶技巧,让你的 DeepAgents 应用更加健壮和高效。

多代理协作

在复杂场景中,多个代理需要协同工作来完成更高级的任务。DeepAgents 提供了灵活的多代理协作机制。

from deepagents import Agent, Router, Pipeline

# 创建多个专业代理
researcher = Agent(
    name="researcher",
    llm=LLM(model="gpt-4"),
    tools=["search", "scraper"]
)

writer = Agent(
    name="writer",
    llm=LLM(model="gpt-4"),
    tools=["editor"]
)

# 创建协作管道
pipeline = Pipeline([
    researcher,
    writer
])

# 执行多步骤任务
result = pipeline.run("撰写一篇关于 AI 的研究报告")

代码解读

  • 第1行:导入多代理协作所需的核心组件
  • 第3-8行:创建一个研究员代理,配备搜索和网页抓取工具
  • 第10-14行:创建一个写手代理,配备编辑工具
  • 第16-20行:将两个代理组合成一个处理管道
  • 第22-23行:执行一个需要研究+撰写的复合任务

性能优化

⚡ 缓存策略

利用缓存减少重复的 LLM 调用,显著降低成本和延迟。

🔄 流式处理

使用流式响应提升用户体验,减少等待时间。

📦 批处理

将多个请求合并处理,提高吞吐量。

互动小测验

在多代理协作中,Pipeline 的作用是什么?

高级多代理编排模式

除了简单的 Pipeline 顺序执行,DeepAgents 支持多种复杂的多代理编排模式。选择合适的模式是构建高效 AI 系统的关键。

层级模式(Hierarchical)

一个主代理负责任务分解和分配,多个子代理负责执行。适合复杂任务的分层管理。主代理就像项目经理,子代理就像团队成员。

协作模式(Collaborative)

多个代理平等协作,通过共享状态和消息传递协调行动。适合需要多角度思考的创意任务或复杂分析。

辩论模式(Debate)

两个或多个代理就同一问题提出不同观点,通过"辩论"达成更优结论。适合需要避免偏见的关键决策场景。

瀑布模式(Waterfall)

代理按严格顺序处理,每个代理的输出是下一个代理的输入。适合流程明确、需要严格质量控制的生产线式任务。

层级编排实战代码

# 层级编排:主编排器 + 专业子代理
from deepagents import Agent, LLM, Orchestrator

# 创建主编排器
orchestrator = Orchestrator(
    name="project_manager",
    llm=LLM(model="gpt-4"),
    system_prompt="""你是项目管理代理。
    收到任务后:
    1. 分析任务需求
    2. 分解为子任务
    3. 分配给合适的专业代理
    4. 综合结果返回最终答案"""
)

# 注册专业子代理
orchestrator.register_agent(
    "researcher",
    Agent(name="研究员", tools=["search", "scraper", "arxiv"])
)
orchestrator.register_agent(
    "analyst",
    Agent(name="分析师", tools=["calculator", "statistics"])
)
orchestrator.register_agent(
    "writer",
    Agent(name="撰稿人", tools=["editor", "formatter"])
)

# 运行层级编排
result = orchestrator.run(
    "撰写一份关于 2024 年 AI Agent 技术趋势的深度报告"
)
# 编排器自动:
# 1. 分解为:文献调研 → 数据分析 → 报告撰写
# 2. 分配给:researcher → analyst → writer
# 3. 综合输出最终报告

第 3-13 行:主编排器(Orchestrator)负责整体协调。它的 system_prompt 定义了"分析 → 分解 → 分配 → 综合"四步流程。

第 16-24 行:注册三个专业子代理,每个有专属工具集。编排器根据子任务类型选择最合适的代理。

第 27-35 行:运行时,编排器自动完成整个流程。用户只需描述目标,不需要关心执行细节。

优势:每个子代理专注于自己擅长的领域,整体效果优于单个"全能"代理。这就像专业化分工的优势。

辩论模式:对抗偏见的利器

# 辩论模式:两个代理就同一问题展开辩论
from deepagents import DebateAgent, Judge

pro_agent = DebateAgent(
    name="支持方",
    stance="支持在医疗领域大规模使用 AI",
    llm=LLM(model="gpt-4"),
    tools=["search"]
)

con_agent = DebateAgent(
    name="反对方",
    stance="对医疗 AI 保持谨慎态度",
    llm=LLM(model="gpt-4"),
    tools=["search"]
)

judge = Judge(
    name="裁判",
    llm=LLM(model="gpt-4"),
    max_rounds=3  # 最多辩论 3 轮
)

# 开始辩论
result = judge.run(
    topic="医疗 AI 是否应该获得自主诊断权限?",
    agents=[pro_agent, con_agent]
)

# result 包含:
# - 每轮辩论的观点和论据
# - 最终综合结论(综合双方观点)
# - 推荐的行动方案(带条件)
print(result.consensus)
# "在严格监管框架下,允许 AI 辅助诊断,
#  但最终决策权必须由持证医生保留..."

第 3-12 行:创建两个持对立观点的代理。每个代理会主动搜索支持自己观点的证据。

第 14-18 行:裁判代理管理辩论流程,控制轮次,最终综合双方观点得出平衡结论。

第 21-24 行:设置辩论主题和参与代理。裁判确保辩论聚焦且有建设性。

应用场景:政策制定、伦理决策、风险评估等需要多角度审视的关键场景。辩论模式能有效避免单一视角的盲区。

错误处理最佳实践

try:
    result = pipeline.run(task)
except LLMRateLimitError:
    # 处理速率限制
    time.sleep(60)
    result = pipeline.run(task)
except AgentTimeoutError:
    # 处理超时
    result = handle_timeout(task)
finally:
    # 清理资源
    pipeline.cleanup()

生产级错误处理策略

# 生产级错误处理框架
from deepagents import Agent, RetryPolicy, CircuitBreaker

# 配置重试策略
retry_policy = RetryPolicy(
    max_attempts=3,
    backoff="exponential",  # 指数退避:1s, 2s, 4s
    retry_on=[LLMRateLimitError, LLMAPIError],
    fallback_model="gpt-3.5-turbo"  # 主模型失败时降级
)

# 配置熔断器
circuit_breaker = CircuitBreaker(
    failure_threshold=5,   # 连续 5 次失败后熔断
    recovery_timeout=60,   # 60 秒后尝试恢复
    half_open_requests=3   # 半开状态允许 3 次测试请求
)

# 创建带完整错误处理的代理
production_agent = Agent(
    name="production_assistant",
    llm=LLM(model="gpt-4"),
    retry_policy=retry_policy,
    circuit_breaker=circuit_breaker,
    timeout=30,              # 单次请求超时 30 秒
    max_iterations=10,       # 最多 10 个 ReAct 循环
    graceful_degradation=True # 优雅降级而非抛出异常
)

# 监控和告警
@production_agent.on_error
def handle_error(error, context):
    logger.error(f"代理错误: {error}", extra=context)
    metrics.increment("agent.errors")
    if isinstance(error, CircuitBreakerOpenError):
        alert.send("代理熔断器已触发,请检查服务状态")

# 执行任务
try:
    result = production_agent.run("分析季度销售数据")
except CircuitBreakerOpenError:
    result = "服务暂时不可用,已切换到备用方案"
    fallback_result = simple_rule_based_analysis(data)

重试策略:指数退避避免频繁重试加剧服务压力。设置 fallback_model 确保主模型不可用时自动降级到更轻量的模型。

熔断器:连续失败达到阈值后自动"熔断",停止发送请求,给服务恢复时间。半开状态允许少量测试请求探测恢复。

优雅降级:graceful_degradation=True 确保出错时代理返回部分结果而非完全失败。

监控:on_error 回调记录错误日志和指标,触发告警。让运维团队第一时间知道问题。

提示词工程最佳实践

提示词(Prompt)是代理行为的"灵魂"。好的提示词让代理精准高效,差的提示词导致幻觉和不可预测行为。以下是经过验证的最佳实践。

角色定义清晰

system_prompt 的第一句应明确定义代理的角色和能力边界。"你是一个专业的 XX 助手,擅长 XX,不具备 XX 能力"。明确边界比列举能力更重要。

工作流显式化

不要让代理自行摸索工作流程。在 system_prompt 中用编号列表明确步骤:"1. 先搜索 2. 再分析 3. 最后总结"。显式指令比隐式期望可靠。

约束条件具体

避免模糊的约束如"尽量准确"。改为具体的约束如"所有数字必须附带来源"、"如果信息不足请明确说明,不要编造"。

总结与练习

恭喜你完成了 DeepAgents 课程的学习!让我们回顾关键知识点并进行综合练习。

课程回顾

1

模块一:DeepAgents 介绍

了解了 DeepAgents 的基本概念和技术栈,包括其模块化设计和多模型支持。

2

模块二:核心概念

深入理解了 Agents、LLMs 和 Chains 三大核心组件及其协作方式。

3

模块三:实践应用

通过实际代码示例学习了如何创建代理、配置工具和执行任务。

4

模块四:进阶主题

掌握了多代理协作、性能优化和错误处理等高级技巧。

综合测验

问题 1:DeepAgents 主要基于哪两个框架构建?

问题 2:在创建 Agent 时,tools 参数的作用是什么?

问题 3:Pipeline 在多代理协作中的核心作用是什么?

动手练习

练习:构建一个简单的问答代理

尝试使用以下代码模板创建一个能够回答技术问题的代理:

from deepagents import Agent, LLM

# TODO: 创建一个技术问答代理
agent = Agent(
    name="tech_helper",
    llm=LLM(model="________"),  # 选择合适的模型
    tools=["________"]           # 添加必要的工具
)

# TODO: 测试你的代理
question = "什么是 LangChain?"
result = agent.run(question)
print(result)

💡 提示:选择一个支持中文的模型,并添加搜索工具以获取最新信息。

下一步学习建议

🎉 恭喜你完成了 DeepAgents 课程!你已经掌握了构建智能代理系统的核心知识。继续实践和探索,你将能够构建更加复杂的 AI 应用。

完整实战:构建 AI 研究助手

下面通过一个完整的项目,展示如何用 DeepAgents 构建一个多功能的 AI 研究助手。这个助手能搜索论文、总结内容、对比观点并生成研究报告。

# === 完整项目:AI 研究助手 ===
from deepagents import (
    Agent, LLM, Tool, Pipeline, Router,
    Memory, Orchestrator
)

# 1. 定义工具集
@Tool.define
def search_papers(query: str, max_results: int = 10) -> list:
    """搜索学术论文"""
    return arxiv_client.search(query, max_results)

@Tool.define
def summarize_paper(paper_url: str) -> dict:
    """总结论文核心内容"""
    paper = fetch_paper(paper_url)
    return {
        "title": paper.title,
        "summary": paper.abstract,
        "key_findings": extract_findings(paper),
        "methodology": extract_methodology(paper)
    }

@Tool.define
def compare_papers(paper_ids: list) -> str:
    """对比多篇论文的方法和结论"""
    papers = [fetch_paper(pid) for pid in paper_ids]
    return generate_comparison_table(papers)

# 2. 创建专业代理
researcher = Agent(
    name="文献检索员",
    llm=LLM(model="gpt-4"),
    tools=[search_papers],
    system_prompt="你是学术文献检索专家,擅长找到最相关的论文"
)

analyzer = Agent(
    name="论文分析师",
    llm=LLM(model="gpt-4"),
    tools=[summarize_paper, compare_papers],
    system_prompt="你是学术论文分析专家,擅长提炼核心观点和方法论"
)

writer = Agent(
    name="报告撰写员",
    llm=LLM(model="gpt-4"),
    tools=[],
    system_prompt="你是学术写作专家,擅长将分析结果组织成结构清晰的报告"
)

# 3. 编排工作流
pipeline = Pipeline([
    researcher,   # 第一步:检索相关论文
    analyzer,     # 第二步:分析和对比论文
    writer        # 第三步:撰写研究报告
])

# 4. 执行研究任务
result = pipeline.run(
    "调研 2024 年 RAG(检索增强生成)技术的最新进展和趋势"
)

# 5. 输出结果
print(f"检索论文数: {result.papers_found}")
print(f"分析论文数: {result.papers_analyzed}")
print(f"报告字数: {len(result.report)}")
print(result.report)

第 6-20 行:定义三个专业工具——论文搜索、论文总结和论文对比。每个工具封装了具体的操作逻辑。

第 22-42 行:创建三个专业代理,每个有独立的工具集和系统提示词。分工明确,各司其职。

第 45-50 行:用 Pipeline 将三个代理串联,前一个的输出自动传递给下一个。

第 53-55 行:一行代码启动整个研究流程。Pipeline 自动协调三个代理的执行。

第 58-61 行:输出包含检索数量、分析数量和最终报告。整个过程约 5-10 分钟完成。

进阶练习:多代理研究系统

挑战更复杂的场景——使用层级编排和辩论模式构建一个高质量的研究系统。

# 进阶:带质量保证的研究系统
from deepagents import (
    Orchestrator, DebateAgent, Judge,
    Agent, LLM, QualityGate
)

# 质量门:确保每个阶段输出达标
quality_gate = QualityGate(
    criteria={
        "completeness": 0.8,  # 完整性 ≥ 80%
        "accuracy": 0.85,     # 准确性 ≥ 85%
        "relevance": 0.9      # 相关性 ≥ 90%
    },
    on_fail="retry_with_feedback",  # 不达标则重试
    max_retries=3
)

# 创建编排器
orchestrator = Orchestrator(
    name="研究总监",
    llm=LLM(model="gpt-4"),
    quality_gate=quality_gate
)

# 注册辩论模式代理组
orchestrator.register_debate_group(
    topic="技术路线选择",
    agents=[
        DebateAgent(name="保守派", stance="优先稳定性"),
        DebateAgent(name="创新派", stance="优先前沿性"),
    ],
    judge=Judge(max_rounds=2)
)

# 运行带质量保证的研究
result = orchestrator.run(
    task="评估 Transformer 架构 vs Mamba 架构在长文本处理中的优劣",
    quality_threshold=0.85
)

# 如果质量不达标,系统会自动:
# 1. 分析质量缺陷
# 2. 补充搜索缺失信息
# 3. 重新生成不达标部分
# 4. 最多重试 3 次

第 5-12 行:QualityGate 定义质量标准。每个阶段的输出都会自动评估完整性、准确性和相关性。不达标则自动重试。

第 14-18 行:编排器集成了质量门,确保整体输出质量可控。

第 21-27 行:注册辩论组。当研究涉及技术路线选择时,两个持不同立场的代理会展开辩论,帮助发现盲点。

第 30-32 行:运行时指定质量阈值。系统会在质量不达标时自动补充和修正。

第 35-39 行:自动重试机制——分析缺陷、补充信息、重新生成,形成闭环质量控制。

生产部署最佳实践

从原型到生产需要考虑可靠性、可扩展性和成本控制。以下是 DeepAgents 生产部署的关键实践。

# 生产部署配置示例
from deepagents import Agent, LLM, DeploymentConfig

# 1. 多模型路由:按任务复杂度选择模型
model_router = ModelRouter({
    "simple": LLM(model="gpt-3.5-turbo", cost_per_1k=0.5),
    "medium": LLM(model="gpt-4", cost_per_1k=30),
    "complex": LLM(model="gpt-4-turbo", cost_per_1k=60),
})

# 2. 速率限制和成本控制
agent = Agent(
    name="production_agent",
    llm=model_router,
    rate_limit={
        "requests_per_minute": 60,
        "tokens_per_day": 1000000
    },
    cost_limit={
        "daily_budget": 50.0,  # 每日预算上限
        "alert_threshold": 0.8  # 80% 时告警
    }
)

# 3. 优雅降级配置
agent.add_fallback(
    condition=RateLimitExceeded,
    fallback_llm=LLM(model="claude-3-haiku"),
    max_fallbacks=3
)

# 4. 监控和追踪
agent.enable_tracing(
    provider="langsmith",
    project="production-agent",
    tags=["v2.0", "customer-facing"]
)

# 5. 健康检查
@app.health_check
def agent_health():
    return {
        "status": "healthy",
        "model": agent.current_model,
        "requests_today": agent.metrics.requests,
        "cost_today": agent.metrics.cost,
        "avg_latency": agent.metrics.avg_latency
    }

多模型路由:简单任务用便宜模型(GPT-3.5),复杂任务用强模型(GPT-4)。自动根据任务复杂度选择,降低成本 40-60%。

速率限制:防止突发流量打爆 API 配额。按分钟和按天双重限制,确保服务稳定。

优雅降级:主模型限流时自动切换到备用模型。用户无感知,服务不中断。

监控追踪:LangSmith 集成记录每一次调用,便于问题排查和性能优化。

健康检查:标准 HTTP 健康检查端点,支持 K8s/Docker 编排工具的自动运维。

微调扩展标记:本课程持续更新中。掌握基础概念后,建议结合实际项目反复练习,将知识内化为直觉。关注项目 GitHub 获取最新版本和社区讨论。