当前位置: 首页 > news >正文

【阿里DeepResearch】写作组件WebWeaver详解 - 指南

【阿里DeepResearch】写作组件WebWeaver详解 - 指南

以下是针对论文《WebWeaver: Structuring Web-Scale Evidence with Dynamic Outlines for Open-Ended Deep Research》的数据构造、训练方式和效果提升的纯技术细节拆解。

一、数据构造方式:WebWeaver-3k —— 基于真实人类问题的高质量轨迹材料

核心目标:构建能教会小模型执行“规划-搜集-写作”完整研究流程的监督微调(SFT)数据,而非用于强化学习的合成数据。

详细过程与中文示例

  1. 数据来源:从互联网上爬取真实、开放式的复杂研究问题

  2. 数据生成:采用一个强大的“教师模型”(如Claude-sonnet-4),在WebWeaver框架内完整执行研究任务,生成端到端的轨迹。

  3. 数据筛选:实施严格的质量控制协议,仅保留成功执行完整工作流且严格遵守预定义动作格式的轨迹。

  4. 数据规模与统计:最终得到一个高质量数据集,包含3.3k条规划轨迹和3.1k条写作轨迹。

工程化提示


二、训练方式:监督微调(SFT)冷启动 + 框架即能力

核心目标:经过SFT,将“教师模型”在WebWeaver框架中展现的复杂能力(思考、搜索、写作)蒸馏到一个小模型中,使其能独立执行完整的OEDR流程。

详细过程

  1. SFT冷启动:这是唯一的训练阶段。论文没有使用强化学习(RL),而是完全依赖SFT。

  2. 训练目标:让模型学会在ReAct框架下,根据上下文生成正确的“思考”和“行动”。

  3. 框架即能力:论文的核心思想是,框架本身(动态大纲+分层写作)就是一种能力。通过SFT教会模型使用这个框架,就等于教会了它如何进行深度研究。

工程化提示


三、效果提升:小模型击败大模型,框架设计是核心

核心指标

  • DeepResearch Bench: 50.62(SOTA, 超越Gemini-2.5-pro-deepresearch的49.71)
  • DeepConsult: 6.96平均分 (SOTA)
  • DeepResearchGym: 96.77平均分 (SOTA)

效果提升来源分析

  1. 动态大纲(Dynamic Outline)是核心

  2. 分层写作(Hierarchical Writing)解决长上下文问题

  3. SFT数据的威力

工程化提示

四、困难分析

问题1:规划轨迹和写作轨迹大概长什么样子?如何确保规划准确?如何确保写作符合规则?
困难2:动态大纲如何生成?
  • 初始大纲:基于初始搜索结果,生成一个初步的、较粗略的大纲。
  • 动态优化:在后续的每一次搜索后,规划者会重新审视大纲
    1. 扩展新证据揭示了初始大纲未覆盖的重要维度(如“帕金森病”案例中发现“DBS设备安全”这一新主题),就就是:要新增章节
    2. 细化:将已有章节拆分为更具体的子章节。
    3. 引用绑定:为每个章节/子章节显式链接到内存库中的证据ID(如 <citation>id_54</citation>)。
  • 终止条件:当规划者认为大纲已足够全面,能覆盖问题的所有方面时,输出 <terminate>

【有意思发现】:论文Fig. 4显示,在WebWeaver-3k数据集中,59%的案例进行了2轮大纲优化,21%进行了3轮。这证明单次静态大纲是远远不够的高质量研究的必要条件。就是,动态迭代

什么意思?就是问题3:分层写作
  • 核心思想不一次性喂入所有证据,而是按大纲章节,逐个处理
  • 具体流程
    1. 写作器从大纲中取出第一个章节(如“帕金森病早期症状”)。
    2. 执行 retrieve 动作,只从内存库中拉取该章节引用的证据(如 id_2, id_5, id_7)。
    3. 在“思考”步骤中,只基于这些相关证据进行内部推理和内容规划。
    4. 执行 write 动作,生成该章节的文本。
    5. 关键一步:在开始写下一章节前,将本章节的证据从上下文中移除(或用占位符替换),以释放上下文空间。
  • 解决的问题:此方法直接处理了“中间丢失(lost in the middle)”和“上下文干扰(contextual bleeding)”问题。如Fig. 9, 10所示,与一次性喂入所有证据的“暴力写作”相比,分层写作在“洞察力”和“可读性”上提升巨大(40.97→50.02, 42.29→49.79)。

障碍4:是否是先进行规划、再进行写作?

是的,严格分阶段、串行执行

  • 规划阶段:由 Planner 智能体 负责。它通过多轮 searchwrite_outline 交替执行,最终输出一个带引用ID的、结构完整、经过多次优化的动态大纲,并以 <terminate> 动作结束。
  • 写作阶段:由 Writer 智能体 负责。它只有在规划阶段完全结束后才开始工作。Writer 的输入是 Planner 产出的最终大纲和一个已填充好的“证据记忆库(Memory Bank)”。
  • 关键证据:论文图3(Workflow of WebWeaver)清晰地将整个流程分为左右两部分:左侧是 Planner 的“Research Cycle”,右侧是 Writer 的“Hierarchical Writing”。两者之间通过“Outline”和“Memory Bank”进行信息传递,没有交叉或并行

工程化提示:在您的系统中,必须将 Planner 和 Writer 达成为两个独立的执行单元。Planner 的终止是 Writer 启动的唯一信号。


障碍5:SFT阶段核心训练哪些能力?动态大纲生成需要训练吗?分层写作要求训练吗?是一起训练还是分开训练?

SFT阶段训练的是“规划”和“写作”两种能力,它们被封装在一个统一的端到端轨迹中,但由两个不同的智能体(Planner/Writer)分别执行。动态大纲和分层写作都是核心训练目标,且是“一起训练”的。

详细拆解:

  1. SFT数据构成

  2. 训练的能力

  3. 训练方式:一起训练,但角色分离

工程化提示


问题6:模型时如何做到“在后续的每一次搜索后,规划者会重新审视大纲”?

模型通过 “显式动作触发 + 结构化记忆绑定”实现“在每次搜索后重新审视大纲”,其核心机制如下:

1. 每次搜索后,强制执行 <write_outline> 动作
在 WebWeaver 的 ReAct 框架中,规划者(Planner)的行动空间包含三个动作:searchwrite_outlineterminate
关键设计:在每次 search 动作返回结果后,规划者必须执行一次 <write_outline> 动作(见论文 Section 3.2 和附录 B.2 的轨迹示例)。

原文轨迹示例(中文转写)

  • Step 1: <search> → 获取帕金森病阶段信息
  • Step 2: <search> → 获取家庭紧急预警信号
  • Step 3: <search> → 获取 DBS 手术信息
  • Step 5: <write_outline> → 生成初始大纲
  • Step 6: <search> → 获取 DBS 舒适护理新信息
  • Step 7: <write_outline>更新大纲,新增“设备安全与维护”子章节

这表明,<write_outline> 不是一次性动作,而是每次获得新证据后都必须调用的反思与优化步骤


2. 大纲与证据通过引用ID强绑定
每次 <write_outline> 生成的大纲,会显式引用内存库(Memory Bank)中的证据 ID,格式为 <citation>id_xx</citation>

原文示例

1.1.1 A. Definition id_1
1.1.2 B. Evolution from Traditional Sports...id_2

当新搜索返回新证据(如 id_54),规划者在下一次 <write_outline> 中会:

  • 扩展大纲结构(如新增 “1.1.3 C. Role of Multimodal Data Fusion”)
  • 绑定新引用<citation>id_3</citation>

这种结构+引用的双重更新,确保大纲始终与最新证据对齐。


3. “重新审视”的触发逻辑由内部思考(<think>)驱动
在每次 <write_outline> 前,规划者会先执行 <think> 步骤,显式分析新证据对大纲的影响

原文 <think> 示例(Step 7 前)

“I have now created a comprehensive outline… However, I should search for any additional information that might be missing, particularly around specific comfort measures…”

搜索后 <think>(Step 7)

“I have now created a comprehensive, detailed outline that addresses all aspects… The outline is well-structured with four levels of hierarchy and covers all essential aspects.”

这表明,“重新审视”不是自动的,而是由模型在 <think> 中主动判断“是否有新维度需加入大纲”,再决定如何优化。

工程化构建要点

  1. 动作空间设计:必须将 write_outline 作为独立动作,而非隐式步骤。
  2. 引用机制:所有证据入库时分配唯一ID,大纲必须通过 <citation> 引用。
  3. 思考引导:在 Planner 的 Prompt 中明确要求:“每次搜索后,评估新证据是否需要扩展或修改大纲,并生成新版本。”

此机制确保大纲是动态、可追溯、与证据强耦合的活文档,而非静态模板。困难6:模型时如何做到“在后续的每一次搜索后,规划者会重新审视大纲”?