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