Deep Research

深度研究代理(Deep Research Agent)是一个复杂的多代理系统,它能够通过将复杂查询分解为可管理的任务、部署专门的研究代理,并将研究结果综合整理成详细报告,从而对任何主题进行全面研究。

这一方法受到了Anthropic博客的启发——我们如何构建多智能体研究系统

概述

深度研究代理工作流程由多个协同工作的关键组件组成:

  1. 规划代理:分析研究查询并生成一系列专门的研究任务

  2. 迭代:创建多个研究代理来处理查询的不同方面

  3. 研究子代理:使用网络搜索和其他工具进行专项研究的个体代理

  4. 撰写人代理:将所有调查结果综合成一份连贯、全面的报告

  5. 条件代理:判断是否需要进一步研究,或者现有研究结果是否足够

  6. 循环: 循环回到规划器代理以提高研究质量

步骤1:创建起始节点

  1. 首先,在画布上添加一个开始节点

  2. 使用“表单输入”配置开始节点,以收集用户的研究查询

  3. 使用以下配置设置表单:

    • 表格标题:“研究”

    • 表单描述:“一个研究代理,接收查询并返回详细报告”

    • 表单输入类型:添加一个字符串输入框,标签为“Query”,变量名为“query”

  4. 使用两个关键变量初始化流状态:

    • subagents: 用于存储子代理要执行的研究任务列表

    • findings: 积累研究成果

步骤2:添加Planner代理

  1. 将一个LLM节点连接到开始节点。

  2. 设立系统提示,以作为专家研究负责人,其主要职责如下:

    • 分析并分解用户查询

    • 制定详细的研究计划

    • 为子代理生成特定任务

    • 示例提示 - research_lead_agent.md

  1. 配置JSON结构化输出以返回子代理任务列表:


/// 译文内容:
---
根据上面的信息,执行如下指令:
缺失译文,请检查输入
{
  "task": {
    "type": "字符串",,
    “description”:“子代理的研究任务”
  }
}
  1. 通过存储生成的子代理列表来更新流状态

步骤3:创建子代理迭代块

  1. 添加一个迭代节点。

  2. 将其连接到Planner的输出端

  3. 将迭代输入配置到流状态:{{ $flow.state.subagents }}。对于数组中的每个项目,都会生成一个子代理来执行研究任务。示例:


/// 译文内容:
---
根据上面的信息,执行如下指令:
缺失译文,请检查输入
{
  "subagents": [
    {
      “任务”:“研究自主多智能体系统技术的当前状态和最新进展。重点定义自主多智能体系统是什么,关键技术组件(协调算法、通信协议、决策框架),过去2-3年的主要技术进步,以及在这一领域工作的领先研究机构/公司。使用网络搜索查找最近的学术论文、行业报告和技术文档。优先选择来自IEEE、ACM、《自然》杂志、《科学》杂志和主要科技公司研究部门的资源。将研究结果汇编成一份全面的技术概述,涵盖定义、核心技术、最新突破以及该领域的主要参与者。”
    },
    {
      “任务”:“调查自主多智能体系统在不同行业的实际应用和部署情况。研究机器人技术(群体机器人、仓库自动化)、交通运输(自动驾驶车队、交通管理)、制造业(协同生产系统)、国防/军事应用、智慧城市以及这些系统积极部署的任何其他领域的具体用例。对于每个应用领域,识别具体的公司、产品、成功案例和可获得的量化结果。关注实际实施而非理论研究。使用网络搜索查找关于实际部署的案例研究、公司公告、行业报告和新闻文章。”
    }
  ]
}  

步骤4:构建研究子代理

  1. 在迭代块内,添加一个Agent节点。

  2. 将系统提示配置为具有以下功能的专注研究子代理:

    • 清晰的任务理解能力

    • 高效的研究规划(每项任务仅需2-5次工具调用)

    • 源质量评估

    • 平行使用工具以提高效率

    • 示例提示 - research_subagent.md

  1. 添加以下研究工具,你可以使用自己偏好的工具:

    • 谷歌搜索:用于网页搜索链接

    • 网页抓取器:用于网页内容提取。该工具将从谷歌搜索中抓取链接的内容。

    • ArXiv搜索:用于搜索和加载学术论文的内容

  1. 设置用户消息以传递当前迭代任务:{{ $iteration.task }}

步骤5:添加Writer代理

  1. 迭代完成后,连接一个LLM节点。

  2. 需要一个像Gemini这样拥有100万至200万上下文规模的更大上下文大型语言模型(LLM),以综合所有调查结果并生成报告。

  3. 将系统提示设置为充当专家研究撰写者,该撰写者应具备以下能力:

    • 保留研究结果的完整上下文

    • 保持引文的完整性

    • 增加结构性和清晰度

    • 输出专业的Markdown报告

  4. 配置用户消息,使其包含:

    • 研究主题:{{ $form.query }}

    • 现有发现:{{ $flow.state.findings }}

    • 新发现:{{ iterationAgentflow_0 }}

  1. 用Write Agent的输出更新{{ $flow.state.findings }}

步骤6:实现条件检查

  1. 添加一个条件代理

  2. 设置条件逻辑以判断是否需要进行额外研究

  3. 配置两个场景:

    • “需要更多的子代理”

    • “调查结果充分”

  4. 提供输入上下文,包括:

    • 研究主题

    • 当前子代理列表

    • 累积发现

步骤7:创建循环机制

  1. 对于“需要更多子代理”的路径,添加一个“循环”节点

  2. 将其配置为循环回传至Planner节点

  3. 设置最大循环次数为5次,以防止无限循环

  4. 规划代理将查看当前报告,并生成额外的调研任务。

第8步:添加最终输出

  1. 对于“发现充分”这一路径,增加一个直接回复

  2. 配置它以输出最终报告:{{ $flow.state.findings }}

测试流程

  1. 从一个简单的主题开始,比如“现实世界环境中的自主多智能体系统”

  2. 观察规划师如何将研究任务分解为具体的专项任务

  3. 在子代理进行平行研究时对其进行监控

  4. 审查写作代理对调查结果的整合

  5. 注意条件代理人是否要求进行额外研究

报告生成:

完整流程结构

{"dynamic_subagents": [
  {
    "agent_name": "Deep Research Agent",
    "agent_type": "dynamic",
    "agent_description": "深度研究代理",
    "agent_url": "https://www.example.com/deep-research-agent"
  }
]
}

演练

  1. 🧠 规划代理 - 分析研究查询并生成一系列专门的研究任务

  2. 🖧 子代理 - 创建多个研究子代理,利用网页搜索、网页抓取和arXiv 工具进行专项研究

  3. ✍️写作助手 - 将所有发现综合成一份条理清晰、内容全面的报告,并附上引用

  4. ⇄ 条件判断代理 - 确定是否需要进一步研究,或者现有发现是否足够

  5. 🔄 循环回至规划器代理以生成更多子代理

🧠 规划代理

作为专家研究负责人,以实现以下目标:

  • 分析并分解用户查询

  • 制定详细的研究计划

  • 为子代理生成特定任务

输出一组研究任务。

🖧 子代理

对于任务列表中的每一项任务,都会生成一个新的子代理来进行专项研究。

每个子代理都有:

  • 清晰的任务理解能力

  • 高效的研究规划(每项任务2-5次工具调用)

  • 源质量评估

  • 并行使用工具以提高效率

子代理可以访问网页搜索、网页抓取和arXiv 工具。

  • 🌐 Google搜索 - 用于网页搜索链接

  • 🗂️ 网络爬虫 - 用于网页内容提取。该工具将从谷歌搜索中抓取链接的内容。 📑 ArXiv - 搜索、下载并阅读arXiv 论文的内容

✍️作家代理

作为一名研究报告撰写者,将原始研究结果转化为清晰、结构化的Markdown报告。保留所有上下文和引用。

我们发现Gemini在这方面表现最佳,这得益于其广阔的上下文窗口,使其能够有效地整合所有发现。

⇄ 条件代理

根据生成的报告,我们让大型语言模型(LLM)来判断是否需要进一步研究,或者现有发现是否足够。

如果需要更多信息,规划代理会审查所有消息,确定需要改进的方面,生成后续研究任务,然后继续循环。

如果调查结果充分,我们只需将Writer Agent的最终报告作为输出返回。

高级配置

自定义研究深度

您可以通过修改规划师的系统提示来调整研究深度:

  • 针对复杂主题,增加子代理的数量(最多可达10-20个)

  • 调整每个子代理的工具调用预算

  • 调整循环次数以进行更多迭代研究

但这也会因消耗更多代币而产生额外费用。

添加专用工具

通过增加特定领域的工具来提升研究能力:

  • 个人工具,如Gmail、Slack、谷歌日历、Teams等

  • 其他网页抓取工具,如Firecrawl、Exa、Apify等网页搜索工具

添加RAG上下文

您可以使用RAG为大型语言模型(LLM)添加更多上下文。这样,LLM在需要时就能从相关的现有知识源中提取信息。

最佳实践

  • 由于大量研究发现会导致令牌溢出,因此模型选择和后备选项至关重要。

  • 提示是关键。Anthropic开源了他们的整个提示结构,涵盖了任务委托、并行工具使用和思维过程——https://github.com/anthropics/anthropic-cookbook/blob/main/patterns/agents/prompts

  • 工具需要精心设计,包括何时使用,以及如何限制工具执行后返回的结果长度。 这与权衡三角非常相似,在权衡三角中,优化三角形的两个边往往会对另一个边产生负面影响,在这里就是速度、质量和成本。

Last updated