EN

LLM Notes

LLM · RLVR · GenRec · MLSys

Deep Research 技术综述

2026-01-23 · Qi Lu · Views:

Deep Research 是一类让 LLM 自主进行多步骤信息检索与综合分析的技术。本文从方法论角度综述这一领域的核心技术,包括迭代检索框架、基于强化学习的端到端训练、以及多代理协作架构。


1. 问题形式化

1.1 从单轮 RAG 到多轮研究

传统 RAG 采用单轮检索-生成范式。给定查询 $q$,系统检索文档集 $D = \text{Retrieve}(q)$,然后生成回答:

\[a = \text{LLM}(q, D)\]

这种方式的局限在于:单次检索难以覆盖复杂问题所需的多方面信息,且无法根据中间结果调整搜索策略。

Deep Research 将问题扩展为序贯决策过程。给定初始查询 $Q$,系统需要执行一系列动作 $a_1, a_2, …, a_T$,每个动作可能是:

1.2 形式化定义

将 Deep Research 建模为马尔可夫决策过程 (MDP):

目标是学习策略 $\pi$ 最大化期望奖励:

\[\pi^* = \arg\max_\pi \mathbb{E}_{\tau \sim \pi}\left[\sum_{t=1}^{T} \gamma^{t-1} R_t\right]\]

不同的方法在如何定义动作空间、如何训练策略、以及如何设计奖励函数上有所不同。


2. 方法分类

根据策略获取方式,现有方法可分为三类:

graph TD A[Deep Research] --> B[基于提示的方法] A --> C[基于强化学习的方法] A --> D[基于多代理的方法] B --> B1[ReAct 框架] B --> B2[迭代检索链] C --> C1[GRPO 训练] C --> C2[课程强化学习] D --> D1[分层代理] D --> D2[多视角协作]

3. 基于提示的迭代检索

3.1 核心思想

通过精心设计的提示,让 LLM 在推理过程中自主决定何时检索、检索什么。这类方法不需要额外训练,依赖 LLM 的 instruction following 能力。其核心优势是部署简单、通用性强,但策略的质量完全取决于提示设计。

3.2 ReAct 框架

ReAct (Reason + Act) 是这类方法的基础范式,其核心思想是让模型在行动前先进行显式推理,形成”思考-行动-观察”的循环。

形式化定义

在时间步 $t$,模型基于当前状态 $s_t$ 生成三元组 $(\text{thought}_t, a_t, o_t)$:

\[p(\text{thought}_t, a_t, o_t \mid s_t) = p(\text{thought}_t \mid s_t) \cdot p(a_t \mid s_t, \text{thought}_t) \cdot p(o_t \mid a_t)\]

其中:

状态更新为 $s_{t+1} = s_t \oplus (\text{thought}_t, a_t, o_t)$,其中 $\oplus$ 表示序列拼接。

执行流程

graph LR S[状态 s_t] --> T[生成 Thought] T --> A[选择 Action] A --> E[环境执行] E --> O[获取 Observation] O --> S2[更新状态 s_t+1] S2 --> T A -->|Finish| R[输出结果]

与 Chain-of-Thought 的区别

ReAct 的关键创新在于将推理与外部工具交互交织在一起。对比标准 CoT:

方面 Chain-of-Thought ReAct
知识来源 仅模型内部知识 内部知识 + 外部检索
推理形式 连续推理链 推理与行动交替
可验证性 低(幻觉风险) 高(有外部依据)
适用任务 纯推理任务 需要信息获取的任务

3.3 迭代检索的查询分解

复杂研究任务通常无法通过单次检索完成。查询分解将复杂问题转化为可检索的子问题序列。

静态分解

给定查询 $Q$,一次性分解为子查询集合:

\[\{q_1, q_2, ..., q_k\} = \text{Decompose}(Q)\]

对每个子查询独立检索,然后综合:

\[a = \text{Synthesize}(Q, \{(q_i, D_i)\}_{i=1}^k)\]

动态分解

更灵活的方式是根据已获取的信息动态调整后续查询。定义知识空白:

\[\text{Gap}_t = \text{Required}(Q) \setminus \text{Coverage}(H_t)\]

其中 $\text{Required}(Q)$ 是回答 $Q$ 所需的信息集合,$\text{Coverage}(H_t)$ 是历史检索 $H_t = {(q_1, D_1), …, (q_{t-1}, D_{t-1})}$ 已覆盖的信息。

下一个查询基于当前空白生成:

\[q_t = \arg\max_{q} \mathbb{E}_{D \sim \text{Retrieve}(q)}[\text{InfoGain}(q, D \mid H_t)]\]

其中 $\text{InfoGain}$ 衡量新检索对填补知识空白的贡献。

实践中的分解策略

输入: 复杂查询 Q
输出: 研究报告 A

1. 初始化 H_0 = ∅
2. 生成初始分解 {q_1, ..., q_k} = Decompose(Q)
3. for t = 1 to T:
     a. 执行检索 D_t = Retrieve(q_t)
     b. 更新历史 H_t = H_{t-1} ∪ {(q_t, D_t)}
     c. 识别知识空白 Gap_t
     d. if Gap_t = ∅: break
     e. 生成新查询 q_{t+1} 填补 Gap_t
4. return Synthesize(Q, H_T)

3.4 局限性分析

基于提示的方法存在根本性局限:

策略不可学习:搜索策略完全由提示决定,无法从环境反馈中优化。即使某个查询策略表现不佳,系统也无法自动调整。

错误累积:在长序列推理中,早期的错误会传播到后续步骤。设每步的错误率为 $\epsilon$,$T$ 步后的成功率为 $(1-\epsilon)^T$,随着 $T$ 增大迅速下降。

提示工程瓶颈:性能高度依赖提示设计,而最优提示因任务、模型、搜索引擎而异,难以泛化。

这些局限性推动了基于学习的方法发展——既然 Deep Research 是序贯决策问题,为何不用强化学习直接优化策略?


4. 基于强化学习的端到端训练

4.1 动机

既然 Deep Research 可以形式化为 MDP,自然的想法是用强化学习直接优化策略。与基于提示的方法相比,RL 训练可以:

4.2 DeepResearcher:真实环境中的 GRPO 训练

DeepResearcher (GAIR-NLP, EMNLP 2025) 是首个在真实网络搜索环境中进行端到端 RL 训练的框架。

训练目标

采用 Group Relative Policy Optimization (GRPO),完整目标函数为:

\[\mathcal{J}(\theta) = \mathbb{E}\left[\frac{1}{G}\sum_{i=1}^{G}\left[\min\left(\frac{\pi_\theta(y_i \mid x)}{\pi_{\theta_{\text{old}}}(y_i \mid x)} \cdot \hat{A}_i, \text{clip}(\cdot, 1-\epsilon, 1+\epsilon) \cdot \hat{A}_i\right) - \beta \mathbb{D}_{\text{KL}}(\pi_\theta \| \pi_{\text{ref}})\right]\right]\]

其中组内相对优势为:

\[\hat{A}_i = \frac{R(\tau_i) - \text{mean}(\{R(\tau_j)\}_{j=1}^G)}{\text{std}(\{R(\tau_j)\}_{j=1}^G)}\]

关键超参数:$G=16$(每 prompt 的 rollout 数),$\epsilon$ 为裁剪参数,$\beta$ 为 KL 散度系数。

奖励函数

采用双组件设计:

\[R = r_{\text{format}} + r_{\text{performance}}\]

格式惩罚确保输出结构正确:

\[r_{\text{format}} = \begin{cases} -1 & \text{结构错误} \\ 0 & \text{格式正确} \end{cases}\]

性能奖励基于 Word-level F1:

\[r_{\text{performance}} = \text{F1}(y_{\text{pred}}, y_{\text{gold}}) = \frac{2 \cdot P \cdot R}{P + R}\]

观测掩码

工具返回的内容(搜索结果、网页内容)在训练时被掩码,只有模型生成的 token 参与梯度计算,避免外部内容干扰策略学习。

实验结果

数据集 DeepResearcher Search-R1 R1-Searcher
NQ 39.6 45.4 35.4
TriviaQA 78.4 71.9 73.1
HotpotQA 52.8 55.9 44.8
2WikiMQA 59.7 44.6 59.4

相比 prompt engineering 基线提升 28.9 分,相比 RAG-based RL 代理提升 7.2 分。

涌现行为

训练过程中模型自发学会:制定搜索计划、交叉验证信息、承认不确定性。

4.3 Search-R1:推理过程中的动态检索

Search-R1 (COLM 2025) 将检索集成到推理模型的思维链中,让 LLM 在逐步推理过程中自主生成搜索查询。

交互格式

模型在生成推理链时,可以插入搜索调用:

\[y = y_1, ..., y_i, \texttt{<search>}, q, \texttt{</search>}, \texttt{<info>}, d, \texttt{</info>}, y_{i+1}, ...\]

其中 $q$ 是模型生成的查询,$d$ 是检索返回的文档(包裹在 <information> 标签中)。

GRPO 损失函数

\[\mathcal{J}_{\text{GRPO}}(\theta) = \mathbb{E}\left[\frac{1}{G}\sum_{i=1}^{G} \frac{1}{\sum_{t} I(y_{i,t})} \sum_{t:I(y_{i,t})=1} \min(\cdot)\hat{A}_{i,t} - \beta \mathbb{D}_{\text{KL}}[\pi_\theta \| \pi_{\text{ref}}]\right]\]

检索 Token 掩码

定义指示函数 $I(y_t)$:

\[I(y_t) = \begin{cases} 1 & y_t \text{ 是 LLM 生成的 token} \\ 0 & y_t \text{ 是检索返回的 token} \end{cases}\]

掩码操作排除检索内容参与优化,避免外部内容的随机性导致高方差梯度。

消融实验 (LLaMA3.2-3b-base):

奖励函数

采用简单的基于结果的奖励:

\[r(x, y) = \text{EM}(a_{\text{pred}}, a_{\text{gold}})\]

使用规则奖励而非神经奖励模型,避免 reward hacking。

实验结果

在多个 QA 数据集上的平均相对提升:

模型 相对提升
Qwen2.5-7B +26%
Qwen2.5-3B +21%
LLaMA3.2-3B +10%

4.4 R1-Searcher:两阶段奖励训练

R1-Searcher 采用两阶段训练策略,分别学习”何时检索”和”如何回答”。

阶段一:学习检索调用

奖励鼓励模型学会正确调用检索:

\[R_1 = R_{\text{retrieval}} + R_{\text{format}}\]

其中:

\[R_{\text{retrieval}} = \begin{cases} 0.5 & n \geq 1 \text{ (至少调用一次检索)} \\ 0 & n = 0 \end{cases}\]

阶段二:学习答案准确性

基于 F1 的答案奖励:

\[R_2 = \text{F1} + R'_{\text{format}}\]

其中 F1 计算预测与参考答案的词级匹配:

\[\text{F1} = \frac{2 \cdot \text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}\]

实验结果

基于 Qwen-2.5-7B-Base 的 F1 分数:

数据集 R1-Searcher (F1) 相比 ReARTeR
HotpotQA 71.9 +48.2%
2WikiMQA 63.7 +21.7%
Bamboogle (OOD) 50.4 -

4.5 WebRL:自演化课程学习

WebRL (ICLR 2025) 提出课程强化学习框架,解决 RL 训练中的冷启动问题。

自演化课程

从失败轨迹中生成新任务,采用广度优先进化:

\[\mathcal{T}_{t+1} = \mathcal{T}_t \cup \text{Filter}(\text{Generate}(\text{Failures}(\mathcal{T}_t, \pi_t)))\]

过滤条件:critic 分数在 $[0.05, 0.75]$ 之间(避免过易或过难)。

结果监督奖励模型 (ORM)

通过二元分类评估轨迹成功:

\[r = \begin{cases} 1 & P(\text{YES}) > P(\text{NO}) \\ 0 & \text{otherwise} \end{cases}\]

ORM 准确率达 80.8%,超过 GPT-4-Turbo 的 71.9%。

Actor-Critic 训练

策略更新目标:

\[\max_{\pi_\theta} \mathbb{E}\left[\sum\left(r(s_t, a_t) + \beta \log \pi_{\text{ref}}(a_t \mid s_t)\right) + \beta \mathcal{H}(\pi_\theta)\right]\]

优势估计平衡偏差-方差:

\[A(s_t, a_t) = \lambda(r + V(s_{t+1}) - V(s_t)) + (1-\lambda)(r_T - V(s_t))\]

其中 $\lambda = 0.5$。

经验回放过滤

仅选择 perplexity 在 $[1/0.95, 1/0.5] \approx [1.05, 2.0]$ 范围内的动作,排除过于熟悉(perplexity 过低)和过于困难(perplexity 过高)的经验。

实验结果

模型 WebRL GPT-4-Turbo 提升
Llama-3.1-8B 42.4% 17.6% +141%
Llama-3.1-70B 49.1% 17.6% +179%

4.6 方法对比

方法 训练算法 环境 奖励设计 关键创新
DeepResearcher GRPO 真实网络搜索 Format + F1 端到端真实环境
Search-R1 GRPO Wikipedia + 搜索 EM 检索 token 掩码
R1-Searcher Reinforce++ RAG 两阶段 F1 分阶段学习
WebRL Actor-Critic WebArena ORM 自演化课程

核心技术差异

  1. 环境真实性:DeepResearcher 使用真实搜索引擎,其他方法多用静态语料
  2. 奖励信号:WebRL 使用学习的 ORM,其他方法用规则奖励
  3. 训练稳定性:Search-R1 的掩码机制、R1-Searcher 的两阶段设计都是为了稳定训练

5. 基于多代理的协作架构

5.1 动机

单一模型难以同时具备规划、检索、分析、写作等多种能力。多代理架构通过专门化分工解决这一问题。

5.2 STORM:多视角问答

STORM (Stanford, NAACL 2024) 模拟研究人员的工作方式:通过多视角对话收集信息。核心思想是写作前的信息收集比直接生成更重要。

视角发现

给定主题 $T$,通过相似主题的 Wikipedia 文章发现相关视角。设已有文章集合为 $\mathcal{W}$,视角发现过程为:

\[\{v_1, ..., v_k\} = \text{Discover}(T, \text{TopK}(\text{Sim}(T, \mathcal{W})))\]

例如对于主题”深度学习”,可能发现视角包括:研究者、工程师、伦理学家、投资者等。

视角引导问答算法

每个视角的作者代理 $\mathcal{A}_v$ 与专家代理 $\mathcal{E}$ 进行多轮对话。问题生成考虑三个因素:

  1. 主题相关性:问题应与主题 $T$ 相关
  2. 视角一致性:问题应反映视角 $v$ 的关注点
  3. 历史避免重复:问题不应与已有对话 $\text{dialogue}_{<t}$ 重复

形式化为:

\[q_t = \arg\max_q \left[\text{Rel}(q, T) + \text{Align}(q, v) - \text{Overlap}(q, \text{dialogue}_{<t})\right]\]

实践中通过 prompt 实现:让 LLM 扮演特定视角的作者,基于已有对话生成下一个问题。

专家代理的检索增强回答

专家代理 $\mathcal{E}$ 使用检索增强生成回答:

\[a_t = \text{LLM}\left(q_t, \text{Retrieve}(q_t)\right)\]

关键设计:专家回答时必须引用来源,确保可追溯性。

大纲生成

收集完所有视角的对话后,生成文章大纲:

\[\text{Outline} = \text{Organize}\left(\bigcup_{i=1}^k \text{dialogue}_i\right)\]

大纲组织遵循层次结构,自动识别章节和子章节。

完整流程

输入: 主题 T
输出: 带引用的长文章

1. 视角发现:
   similar_pages = Retrieve(T, Wikipedia)
   perspectives = Extract(similar_pages)

2. 模拟对话 (对每个视角并行):
   for v in perspectives:
       author = LLM.roleplay(v)
       expert = RAG_enabled_LLM
       dialogue[v] = MultiTurnConversation(author, expert)

3. 大纲生成:
   all_info = Merge(dialogue.values())
   outline = GenerateOutline(T, all_info)

4. 文章生成:
   for section in outline:
       content[section] = Generate(section, relevant_dialogue)

5. 后处理: 添加引用、润色

Co-STORM 扩展

Co-STORM 将用户引入协作环中,支持人机协作研究:

形成 Turn-Level 协作:用户可随时介入对话、修正方向、追问细节。

实验结果

在 FreshWiki 数据集上,相比直接生成基线:

评估维度 STORM 相对提升
文章组织性 +25%
信息覆盖广度 +10%

人工评估显示 STORM 生成的文章在组织性和覆盖度上均显著优于基线,且引用质量更高(引用能够支持对应陈述)。

5.3 分层代理架构

以 SkyworkAI DeepResearchAgent 为例:

┌─────────────────────────────────┐
│        规划代理 (Planner)         │
│   - 任务分解                      │
│   - 进度监控                      │
│   - 结果整合                      │
└─────────────┬───────────────────┘
              │
    ┌─────────┼─────────┐
    ▼         ▼         ▼
┌───────┐ ┌───────┐ ┌───────┐
│搜索代理│ │分析代理│ │写作代理│
└───────┘ └───────┘ └───────┘

代理间通信

代理通过结构化消息传递信息:

\[m_{i \to j} = (\text{type}, \text{content}, \text{metadata})\]

规划代理维护全局状态,协调子代理执行。

5.4 与单代理方法的对比

维度 单代理 (RL) 多代理
训练复杂度 高(端到端) 低(可分别优化)
推理开销 低 高(多次 LLM 调用)
可扩展性 受限 易于添加新代理
错误处理 隐式 可在代理间显式传播

6. 评估方法

6.1 基准测试

基准 任务类型 规模 评估维度
Humanity’s Last Exam 博士级问答 3000+ 准确率
DeepSearchQA 因果链推理 900 推理深度
HotpotQA 多跳问答 113k F1, EM
FreshWiki 长文生成 - 质量评估

6.2 评估指标

对于研究报告类任务,常用指标包括:


7. 开放问题

  1. 奖励设计:如何定义”好的研究报告”?现有奖励函数难以捕捉研究质量的所有维度。

  2. 效率与质量的权衡:多轮检索提升质量但增加延迟,如何在有限预算下最大化信息增益?

  3. 幻觉控制:即使有检索增强,模型仍可能生成无据陈述。

  4. 泛化性:在特定搜索引擎上训练的策略能否迁移到其他环境?


参考文献

核心论文

开源实现

商业产品

← Back to Home

Comments