第 2 讲:知识策展与深度研究——STORM、Co-STORM 与 GRILL

Agentic AI · Lecture 02。个人学习讲义与配套实验,按主题整理并持续修订。

课程源码 ZIP ↓

个人整理的学习笔记,非官方讲义;课程来源与整理说明见课程介绍。配套示例未逐一运行验证。

本篇目录

对应:Stanford CS224V Fall 2026 Lecture 2(9/28 Knowledge Curation;幻灯片作者 Yucheng Jiang、Harshit Joshi、Priyank Shethia、Monica Lam);作业 1(罕见病诊断的智能体式文献研究)。 配套代码:code/lecture02/(只用 Python 标准库;导入第 1 讲的模块;05 号文件可选,需要 anthropic 包和 API 密钥) 预计阅读时间:4 小时(含运行代码)


0. 本讲导航

0.1 学完本讲,你应该能够

  1. 区分三个层次的信息需求:问答(已知的未知)、知识策展(未知的未知)、知识发现(真正的未知)。
  2. 说出”研究智能体”和 RAG 的区别,以及构建研究智能体的五个设计选择:编排、广度、深度、记忆、综合。
  3. 解释 STORM 为什么先调研、再写作:视角怎样解决广度问题,模拟对话怎样解决深度问题,大纲和参考文献池怎样充当记忆。
  4. 说出四种编排方式(固定流水线、规划者 + 执行者、训练出来的智能体、通用 harness)的区别,以及 harness 是什么。
  5. 解释 Co-STORM 的设计:混合主动权、主持人的打分公式、思维导图;以及为什么”轻松的答案可能意味着浅的学习”。
  6. 说出评估研究智能体的四个选择(目标、评委、任务、环境),以及它们各自的陷阱:评委的偏差、引用不等于支持、评测答案泄漏、分数被预算左右。
  7. 解释调查型问题为什么”只靠搜索不够”,画出 GRILL 的流程:假设 → 筛查 → 深度检验(找反证)→ 修正 → 信念账本。
  8. 把本讲的内容和作业 1 的每个部分对应起来。

0.2 先修知识

知识点用在哪里最低要求
第 1 讲全讲模拟 LLM 的参数记忆、BM25 检索、WikiChat 的”分解 + 核查”、“不要相信演示”
概率与统计第 4 节一致率、相关、回归的直观含义(代码里会解释 Cohen’s κ 和 R²)
向量与余弦相似度第 3.4 节两个向量的夹角越小越相似(代码里从零实现)

0.3 本讲地图

第1节  三个层次的信息需求;什么是研究智能体
第2节  构建一个研究智能体:五个设计选择;STORM            ← 代码 01
第3节  人在回路:Co-STORM                              ← 代码 02
第4节  怎样评估研究智能体                               ← 代码 03
第5节  调查型问题:GRILL(作业 1)                      ← 代码 04
第6–10节 小结、与作业的关系、练习、延伸阅读、下一讲预告      (代码 05 可选:真实的 Claude)

0.4 本讲的玩具世界:一个”小互联网”

第 1 讲的百科里,每种疾病只有 7 条事实,问题是”一问一答”式的。本讲研究”写一篇综述”,需要一个结构更丰富的语料库(代码 research_world.py),把本讲的两个核心难点做成可以测量的实验:

  • 广度:每种疾病的资料分布在 8 个方面里:症状、遗传、诊断、治疗、流行病学、历史、研究、社会与文化。每种疾病只有其中 6 个方面有资料(就像不是每篇维基百科条目都有”社会与文化”一节)。
  • 深度:每个方面有 2 条”调查线”,每条线由一个根事实和一个追问事实组成。追问的问题里含有只有读过根事实才知道的词:
根事实:Patients with Istisbrin disease are treated with Kelomab.
追问  :When was Kelomab approved for Istisbrin disease?     ← 不先读到 "Kelomab",问不出这个问题
追问事实:Kelomab was approved for Istisbrin disease in 2019 after the VELA-2 trial.
  • 参考文章:每种疾病有一篇”人类写的”参考文章(6 个方面 × 4 条事实 = 24 条),作为评估的标准答案。STORM 论文用真实的维基百科文章做同样的事。
  • 相关话题的目录:研究智能体可以看到其他疾病的参考文章目录(有哪些方面)。
  • 概述页:每种疾病另有 3 篇泛泛的概述页(“X is a serious condition that affects many parts of the body.”),不含具体事实。含糊的问题检索到的往往是这种页面——真实的网页搜索也是这样。

语料库共 1620 篇文档(60 种疾病 × 27 篇)。另外,代码还为作业 1 式的”找到那个病人”生成了病例文献(第 5 节)。

扮演 LLM 的是 research_llm.py 里的 ResearchLLM:它继承第 1 讲的模拟 LLM(参数记忆的规律完全一样),并增加了研究型的任务:拟大纲、从目录里发现视角、按视角提问、基于检索回答并引用、读完后追问、写作。每个任务有自己的出错率(读错 2%、引用错 3%、写错 2%……)。

关于本讲的数字:和第 1 讲一样,讲义里有两类数字。幻灯片和论文里的真实数字会注明出处;模拟实验的数字都来自 01~04 号代码的实际输出(固定随机种子,每个脚本几秒钟)。模拟说明的是机制和趋势,错误率是我们设定的参数。05 号代码需要 API 密钥,编写讲义时没有用真实的 API 运行过。


1. 三个层次的信息需求

1.1 访问、策展、发现

幻灯片开篇把信息需求分成三层(图改编自 Yijia Shao 的报告):

层次任务你知道什么例子
访问(access)问答已知的未知:你已经知道要问什么“这种病的致病基因是什么?”
策展(curate)知识策展未知的未知:你不知道自己不知道什么“帮我全面了解一下这种病”
发现(discover)知识发现真正的未知:这些知识还不存在“哪些基因导致了这种药的耐药性?”

第 1 讲的 WikiChat 解决的是第一层:用户问什么,系统准确地回答什么。本讲的主题是第二层——知识策展:从零开始,把一个陌生领域的知识搜集、组织成一篇有引用的综述。第 5 节的 GRILL 则开始触及第三层。

1.2 为什么不直接让 LLM 写?

幻灯片列出了三种”直接的做法”和它们的问题:

做法问题
直接让 LLM 写泛泛而谈、无法核实(第 1 讲:长尾知识会编造,也没有出处)
总结给定的资料(Liu 等 2018 的 WikiSum 等)假设调研已经做完了——资料从哪来?
检索一次,然后写(Qian 等 2023 的 WebBrain 等)浅:只有少数几个来源

结论是:难的是调研本身:为了收集需要的信息,应该问哪些问题?

1.3 什么是研究智能体

研究智能体(research agent):一个 LLM 系统,它在很多步里研究一个开放式的问题,最后交出一份带引用的报告。

规划 → 搜索 → 阅读 → 反思:"还缺什么?" → 写作并引用
  ↑_____________________________________|   重复,直到问题被覆盖

和 RAG 的区别一句话就能说清:RAG 回答你问的问题;研究智能体决定该问哪些问题。

1.4 两年间的研究智能体

幻灯片给出了一个时间线(2024 → 2026):

时间事件
2024 年 2 月STORM:调研一个话题,写出带引用的文章
2024 年 8 月Co-STORM:加入智能体之间的讨论来学习
2024 年 12 月Gemini Deep Research:规划、浏览、带引用的报告
2025 年 2 月OpenAI deep research:用强化学习端到端训练
2025 年 6 月Kimi-Researcher 和 Anthropic 的 Research 智能体
2025 年 7 月ChatGPT agent:浏览器、终端和研究合为一体
2025 年 9 月Tongyi DeepResearch:开放权重的研究智能体
2025 年 11 月DR Tulu-8B:用不断演化的评分细则训练
2026 年 2–4 月Claude 智能体团队;深度研究中接入外部数据连接器
2026 年 9 月OpenAI:“自动化的研究实习生”目标达成

STORM 和 Co-STORM 是这门课的研究成果:据幻灯片,截至 2026 年 9 月已有超过 100 万人使用,GitHub 上有 3.08 万颗星,并成为很多后续工作(OmniThink、WebWeaver、WikiAutoGen、RaPID、DeepScholar-Bench)的标准基线,还被 LangGraph 的官方教程重新实现。项目页提到,这门课的项目产出的论文启发了 OpenAI Deep Research、Google Gemini Deep Research 等商业产品。


2. 构建一个研究智能体:五个设计选择

2.1 设计空间

幻灯片把研究智能体之间的区别归结为五个选择,每个都有自己的难点:

选择问题难点
编排(orchestration)谁决定下一步?早期的错误会累积
广度(breadth)覆盖哪些内容?未知的未知
深度(depth)怎样挖得更深?追问需要先读
记忆(memory)发现存在哪里?上下文有限
综合(synthesis)报告怎么写?每一句话都需要出处

这一节先看 STORM 在每一项上的选择,再看整个领域的做法。

2.2 提问的瓶颈

直觉。让 LLM 就”2022 年冬奥会开幕式”提 30 个问题,它会问:“什么时候举行的?在哪里举行的?有多少个国家参加?……”——全都来自同一个视角(一个对基本事实好奇的普通读者)。这暴露了两个问题:

  • 广度:问题都出自一个视角。经济学家会问对国家宏观经济的影响,活动策划者会问舞台和后勤,体育记者会问运动员和代表团——这些视角,泛泛的提问者想不到。
  • 深度:有些追问必须先读到前面的回答才问得出来。

幻灯片的结论:多采样几个问题,两个问题都解决不了。

代码 01 演示 1 在虚构世界里重现了这个瓶颈(60 种疾病的平均):

提问方式问题数方面覆盖事实覆盖追问事实
泛泛地提问338.6%9.7%0.7%
泛泛地提问638.6%9.7%0.7%
泛泛地提问1553.9%21.0%11.3%
泛泛地提问3053.9%21.0%11.3%
5 个视角,各问 2 个根问题1070.8%39.4%12.5%
5 个视角 + 读完再追问2070.8%63.9%61.5%

从 3 个问题加到 6 个,一点都没变:多出来的是同样几个方面的含糊说法(“How serious is X?”),检索到的只是概述页。问到 15 个才多覆盖了一些——多半是碰巧(“first signs”里的”first”匹配上了”历史”一节的”first described”);再加到 30 个就只是重复。换成”视角”,10 个问题就覆盖了七成的方面(广度);再加上”读完再追问”,追问事实从 12.5% 涨到 61.5%(深度)。

2.3 STORM:先调研,再写作

STORM(Shao、Jiang、Kanell、Xu、Khattab、Lam,NAACL 2024)的关键想法是:模仿人类写作的方式。写作研究里有一个经典的概念叫”写作前阶段”(pre-writing,Rohman 1965):动笔之前,作者要先调研、探索、发现。STORM 把整个过程分成两半:

话题 ──► 【写作前:调研话题】                                         【写作】
         视角(来自相关文章)→ 对话(作者问、专家答)→ 大纲 + 参考文献    → 逐节写文章,带引用
           广度                 深度                    记忆                 综合
编排:一条固定的流水线 —— 各个阶段和它们的顺序都写在代码里。

① 广度:视角引导的提问。 STORM 先找到几篇相关话题的文章(例如写”2022 年冬奥会开幕式”时,看”2020 年夏季奥运会""2018 年冬奥会”),读它们的目录,从中归纳出几个视角(经济学家、活动策划者、体育记者……),每个视角驱动自己的一串问题。幻灯片的说法是:视角是一个控制搜索广度的隐变量。为什么从目录里找?因为同类话题的文章结构相似:一个方面在相关文章里反复出现,说明”这类话题通常要讲这个”。

② 深度:模拟对话。 每个视角扮演一个”提问的作者”,和一个”基于检索回答的专家”对话:作者提问 → 专家把问题变成检索查询、读检索结果、给出带引用的回答 → 作者读完回答,再追问。论文里的例子:

问:能给我一份参加 2022 年冬奥会开幕式的国家名单吗? 答:……来自 90 多个国家的运动员将按特定的顺序入场。 问:开幕式上各国入场的顺序是怎么确定的?

第二个问题只有在读到”按特定的顺序入场”之后才会出现。

③ 记忆:大纲 + 参考文献池。 对话里引用过的所有来源组成参考文献池;大纲的每一节指向它的来源。幻灯片的说法是:大纲是 STORM 收集到的全部信息的索引。

④ 综合:先大纲,再带引用地写。 ① 凭模型自己的知识起草一个大纲;② 用对话里找到的信息修订它;③ 每一节只根据这一节的资料来写,句内标注引用;④ 加上导言,润色。“每一节只用这一节的资料”让每次写作的上下文很短,引用也更准确。

代码 01 演示 2 完整地走了一遍(一种长尾疾病,预训练语料里只出现 4 次):三篇相关话题的目录给出了 5 个视角(流行病学、社会与文化、症状、遗传、诊断),每个视角配一个人物(“a public health researcher who studies populations”……);症状视角的那段对话里,作者先问”标志性症状是什么”,读到是 spasticity 之后追问”spasticity 几岁开始明显”;最终的大纲在模型凭知识拟的草稿(症状、遗传、诊断、治疗)基础上增加了”社会与文化”一节,参考文献池 16 篇。这篇文章的事实召回 67%、准确率 100%,用了 21 次检索、62 次 LLM 调用。

2.4 STORM 的效果:消融实验

论文的结果(GPT-4,大纲与人类写的维基百科文章比较;数字来自幻灯片):

系统标题召回实体召回
大纲驱动的 RAG89.5542.38
STORM92.7345.91
去掉多视角92.3942.70
去掉对话88.7539.30

去掉对话:标题召回 −4.0,实体召回 −6.6(深度);去掉多视角:实体召回 −3.2(广度)。把每个部件都消融一遍,才知道哪个选择真正重要。 文章质量方面,STORM 在 FreshWiki 数据集上的各项指标都高于直接生成、RAG 和大纲驱动的 RAG;引用的召回率和精确率分别是 84.8% 和 85.2%(用 Mistral-7B-Instruct 评判)。

模拟实验的结果(代码 01 演示 3,60 个话题的平均):

系统标题召回事实召回深度召回准确率引用准确检索调用
直接生成(不检索)65.0%37.4%38.2%42.1%—0.02.0
RAG(检索一次)99.2%39.9%5.0%97.6%90.3%1.07.0
大纲驱动的 RAG65.6%31.2%3.6%96.2%89.7%4.79.6
STORM77.8%64.9%61.5%95.2%88.9%22.666.5
 去掉多视角53.6%30.8%31.3%95.9%88.4%23.151.3
 去掉对话(不追问)78.1%39.9%11.5%95.9%89.4%13.026.7

几点解读:

  • 直接生成:写得”很完整”,但准确率只有 42.1%(头部话题 95.7%、长尾 24.5%、新近 0%),而且没有任何引用——无法核实。这是第 1 讲问题的重演。
  • RAG 的标题召回最高(99.2%),事实召回却很低(39.9%)。原因是查询只有话题名,检索到的 10 篇散落在各个方面,每一节只有一两句、几乎没有追问事实。只看一个指标会被误导:标题召回只看”有没有这一节”,不看这一节写得多全。
  • STORM 的事实召回和深度召回都最高。两个消融分别对应广度和深度:去掉多视角时,对话段数和检索次数都不变,事实召回却减半——多问的都是同一批方面;去掉对话时,标题召回不变,深度召回从 61.5% 跌到 11.5%。方向和论文一致,但模拟里的差距更大,因为我们的”泛泛提问者”被设定得很窄。
  • 代价:STORM 每个话题要检索二十多次、调用 LLM 六十多次。

2.5 编排:从代码决定到模型决定

STORM 是一条固定的流水线:程序决定每一步做什么。整个领域在”谁决定下一步”这个问题上有一个光谱(幻灯片):

程序决定 ◄──────────────────────────────────────────────────► 模型决定
固定流水线            规划者 + 执行者           训练出来的智能体         通用 harness
代码执行固定的步骤     模型做计划,执行者执行     一个模型决定每一步,     一个通用的智能体循环,
                                            为研究专门训练           有文件、代码和子智能体
STORM、OmniThink      Gemini Deep Research、    OpenAI deep research、   Claude Agent SDK、
                     Anthropic Research        Kimi-Researcher         Deep Agents
往右:更灵活、更难预测、消耗更多 token。

什么是 harness? 幻灯片引用了 Databricks 2026 年的定义:

AI 智能体的 harness 是包裹在大语言模型外面的软件基础设施,它让模型能够执行任务,而不只是回应提示。

模型(大脑:推理和决策)+ harness(身体:工具、记忆、工作区、护栏)= 智能体(能执行任务)

harness 的构件包括:系统提示、工具、沙盒、文件与存储、记忆与上下文、反馈与自我检查、护栏与审批、可观测性与日志。所以上面四种做法都是 harness,STORM 和 Co-STORM 也是。区别在于:谁决定下一步,以及”技能”存在哪里:

harness 类型谁决定代码固定了什么技能在哪里怎样改进
固定流水线(STORM,2024)我们的代码:固定的阶段阶段和顺序提示词和流水线设计更好的提示词(例如 DSPy)
规划者 + 执行者(Anthropic Research,2025)主模型规划,执行者行动角色:主模型、执行者、引用者提示词 + 一个强模型更好的分工和工具
训练出来的智能体(OpenAI、Kimi,2025)模型,每一步一个小循环:搜索、打开、回答权重(用强化学习训练)在更难的任务上做更多强化学习
通用 harness(Claude Agent SDK,2025)模型,每一步一个通用循环:工具、文件、子智能体一个通用模型 + 循环更好的工具和上下文

往下走,代码决定的越来越少,技能从提示词转移到了权重或通用的循环里。第 3 讲会专门讲 harness 的构件。

规划者 + 执行者的例子:Anthropic 的多智能体研究系统(2025 年 6 月的工程博客)。一个主研究员智能体做规划并分派任务,3~5 个子智能体在各自独立的上下文里并行检索,把浓缩后的发现交回主智能体,最后由一个引用智能体给报告加上引用。据幻灯片,它在 Anthropic 内部的研究评测上比单智能体好 90.2%,代价是大约相当于普通聊天 15 倍的 token——广度很贵。STORM 其实也是这样:各个视角的对话并行进行,最后从同一个大纲写作。幻灯片附录总结了这个系统的几条经验:

  • 教会分派任务:每个子智能体都要拿到目标、输出格式、关于工具和信息源的指导、清晰的任务边界。
  • 按问题的难度分配投入:查一个事实,1 个智能体、310 次调用;做比较,24 个子智能体、各 10~15 次调用;复杂的调研,10 个以上子智能体。
  • 工具描述就是提示词:让一个模型重写一个有缺陷的工具描述,后续任务的完成时间减少了 40%。
  • 先宽后窄:先用简短、宽泛的查询,像专家一样先了解全貌;智能体默认倾向于过于具体的查询。
  • 并行阅读:3~5 个子智能体同时工作,每个同时发起 3 个以上的工具调用。
  • 早评估、小规模评估:从大约 20 个真实的查询和一个带评分细则的 LLM 评委开始;人工检查能发现评委漏掉的问题。

代码 01 演示 4 看”投入与收益”(40 个长尾和新近话题):

视角数对话轮数事实召回深度召回检索次数串行轮次
1525.9%23.1%8.45
3548.4%44.8%15.65
5354.4%41.9%17.13
5565.3%61.5%22.95
5865.8%62.3%23.28
8891.8%87.1%33.28

轮数加到 5 以后几乎不再有用(每个方面只有两层深,挖完就没得问了);视角数的作用更大,取满 8 个视角时召回跳到九成左右。“串行轮次”说明了并行的好处:各个视角的对话互不依赖,等待时间取决于最长的那段对话,而不是检索的总次数——但总成本一分也省不了。

2.6 记忆:上下文是长程任务的瓶颈

一次深度研究可能读几百个网页。模型的上下文窗口再大也装不下,而且上下文越长,模型越容易忽略中间的内容。幻灯片列出了五种做法:

做法含义
压缩(compaction)把旧的轮次总结一下,继续工作
外部记忆计划、笔记、文件(STORM 的大纲 + 参考文献池就是一种)
子智能体在一个全新的上下文里探索,只交回一个摘要
重置与折叠丢掉或折叠旧的工具输出
训练进模型让模型自己学会该保留什么

幻灯片给出的数字(BrowseComp 准确率,同一个模型):Kimi K2.5(2026 年 1 月)单智能体 60.6%,加上上下文管理 74.9%,智能体集群 78.4%;DeepSeek-V3.2(2025 年 12 月)不做管理 51.4%,“全部丢弃”策略 67.6%。可见上下文管理本身就能带来十几个百分点的差别。第 3 讲的代码会用模拟实验比较这几种策略;第 9 讲(SLIDERS)的主题就是”上下文永远不够长”。

2.7 综合:大纲什么时候还能改?

大纲是作者要遵循的计划:每个小节标题都链接到它的来源。三个系统的区别在于大纲什么时候还能改:

系统流程大纲
STORM(2024)起草大纲 → 用调研结果修订 → 写作开始写作后固定
WebWeaver(阿里,2025)大纲 ⇄ 搜索 → 写作在整个搜索过程中不断变化
TTD-DR(Google,2025)起草整篇报告 → 搜索 ⇄ 修改一篇完整的草稿,每一轮都修改

三者都对着一个显式的计划写作,区别只是计划什么时候还能变。

2.8 早期的错误会累积

“编排”一栏写的难点是”早期的错误会累积”。代码 01 演示 5 提高专家读错资料的概率:

专家读错的概率准确率事实召回深度召回
0%98.1%66.2%62.8%
2%95.2%64.9%61.5%
10%83.9%59.5%55.6%
20%71.7%53.1%49.3%

读错不仅让那一句话错了,还会让追问”问错对象”:把药名读成了别的药,追问”它是哪年批准的?“检索到的就不是这个病的资料,那条追问事实也就丢了。这是第 1 讲第 6.1 节”错误累积”的又一个例子。

2.9 小结:设计选择一览

系统编排广度深度记忆综合
STORM(2024 年 2 月,第一个)固定流水线视角追问大纲 + 参考文献先定大纲再写
训练出来的智能体(2025 年 2 月,OpenAI、Kimi)模型决定每一步学出来的搜索长的、学出来的搜索学出来的上下文管理模型写
规划者 + 执行者(2025 年 6 月,Anthropic)主智能体规划、分派并行的子智能体每个子智能体搜索保存计划;各自独立的上下文主智能体写;一个智能体负责引用
通用 harness(2025 年 9 月,Claude Agent SDK)一个开放的智能体循环子智能体、待办清单循环 + 代码文件、压缩任何产物

幻灯片的结论:STORM 是第一个开源的深度研究系统;随着模型越来越擅长长程规划,整个领域在同时改进 harness 和模型。


3. 人在回路:Co-STORM

3.1 一次性的报告够吗?

STORM 团队问了用户想要什么,得到的回答是:

“我的想法在变,所以我想更新我的查询。” “这个链接启发了我,我想了解更多。” “我知道这个话题也相关,能把它加进来吗?”

人的目标会随着阅读而变化,一份一次性的报告跟不上。

3.2 设计空间:人放在哪里

关于人的角色,有三个选择:

选择问题难点
主动权(initiative)谁决定下一步探索什么?人没法问自己不知道的东西
可见性(visibility)系统工作时,人能看到什么?看不见就没法引导
目标(goal)人最后得到什么?读起来轻松,可能意味着学得浅

3.3 未知的未知:你没法问你不知道的东西

想想我们是怎样学到”没想到要问”的东西的:

  • 在家里:孩子听父母聊天,从不是自己发起的谈话里学到词汇和想法;
  • 在会议上:听众听专家座谈,专家互相提出你不知道该问的问题;
  • 和朋友一起:学习小组、走廊里的闲聊,会暴露你漏掉的东西。

Co-STORM(Jiang、Shao、Ma、Semnani、Lam,EMNLP 2024)的想法由此而来:让人旁听一场专家智能体之间的讨论,并且可以随时加入。

3.4 Co-STORM 的设计

三个选择:

  • 主动权:混合的。专家默认主导讨论,你可以在任何一轮插话。
  • 可见性:讨论 + 地图。一张实时更新的思维导图,显示已经覆盖了什么。
  • 目标:在参与中学习。你得到讨论本身和它的地图;需要时再生成一份报告。

和两种极端相比:聊天机器人里,你问每一个问题——会错过未知的未知;报告式的系统里,系统问每一个问题——跟不上你的目标。Co-STORM 两边都能提问:省力,又能暴露未知的未知。

一场圆桌讨论:

专家 A(视角 A)  专家 B(视角 B)         共享的讨论(基于检索)  ──►  思维导图 ──► 报告
       ↘          ↙                                ↑
     主持人:提出还没探索过的方向                  你:旁观,或者接过任何一轮

主持人怎样挑方向? 问题在于:专家们一直在回答问题,讨论会越来越窄。主持人的规则是:连续两轮都只是在回答之后,抛出一条还没人用过的检索结果。检索时每次会拿到好几篇文档,专家只用了其中一部分;剩下的进入”未使用池”。怎样从池子里挑?幻灯片上的公式:

score(i)=cos⁡(i,t)α⋅(1−cos⁡(i,q))1−α\text{score}(i) = \cos(i, t)^{\alpha} \cdot \big(1 - \cos(i, q)\big)^{1-\alpha}

其中 ii 是一条还没人用过的信息,tt 是讨论的话题,qq 是当初检索到 ii 的那个问题,α=0.5\alpha = 0.5。

  • 第一项 cos⁡(i,t)\cos(i, t):和话题相关。跑题的信息不要。
  • 第二项 1−cos⁡(i,q)1 - \cos(i, q):对于当初那个问题来说是意外的。它和那个问题越不像,越说明它是检索时”顺带捞到”的、讨论里还没覆盖的新方向。
  • 两项相乘:任何一项接近 0,分数就接近 0。

代码 02 演示 1 是一个具体的例子:专家刚回答了”病人怎样治疗”,用了”用 Jorcorzole 治疗”那条;未使用池里有两篇本话题的文档(“避免剧烈运动""剧烈运动可能引发代谢危象”)和三篇讲别的疾病怎样治疗的文档(因为”patients""treated”这些词被捞上来)。别的疾病的文档 cos⁡(i,t)≈0.01\cos(i,t) \approx 0.01,分数只有 0.06;本话题的两篇分数约 0.5,主持人抛出了”避免剧烈运动”那条——一个讨论还没碰过的方向。Co-STORM 原文用的是神经网络的句子嵌入;代码里用 TF-IDF 向量的余弦相似度代替,道理相同。

思维导图怎样长出来:

  1. 插入:一条新信息挂到最匹配的概念下。
  2. 重组:某个概念下超过 10 条信息时,LLM 把它拆成几个子主题(例如”各国入场”拆成”入场顺序”和”旗手”)。
  3. 写作:整张图就是报告的大纲,每一节引用它的信息。

好处是:人能看到已经覆盖了什么,报告的大纲也是现成的。代码 02 演示 5 展示了这三步(为了在小例子里看到拆分,阈值设成了 3 条)。

3.5 效果

用户研究(幻灯片):

比较结果
和 RAG 聊天机器人比78% 的参与者更喜欢 Co-STORM(9 人)
和搜索引擎比70% 的参与者更喜欢 Co-STORM(10 人)
意外收获(serendipity,1–5 分)Co-STORM 3.9,搜索引擎 2.7

一位参与者说:“用 Co-STORM 的脑力负担小太多了。”

自动评估(幻灯片附录):在最终报告的质量上,Co-STORM 的相关性、广度、深度、新颖性都高于 RAG 聊天机器人和”STORM + 问答”;讨论中引用的不同网址数约是聊天机器人的两倍(6.04 vs 2.94)。消融实验里,去掉主持人造成的下降最大(深度 3.77 → 3.41,新颖性 3.05 → 2.89)。

模拟实验(代码 02 演示 3:40 个长尾和新近话题,每场 16 轮;模拟的用户只想到问”症状”和”治疗”):

设置接触到的事实方面兴趣之外的事实来源数检索次数
聊天机器人(用户问每一个问题)8.33.42.58.316.0
Co-STORM,1 位专家10.13.54.39.910.1
Co-STORM,去掉主持人10.13.04.39.912.2
Co-STORM(2 位专家 + 主持人)12.04.36.211.811.6

聊天机器人只回答用户问的问题,用户问完自己关心的就只能问泛泛的问题;Co-STORM 里,用户不增加任何提问负担,却接触到了两倍多”没想到要问”的内容,检索次数反而更少(主持人的发言不需要检索)。

α 的作用(代码 02 演示 4)。把主持人抛出的内容分成四类:

α新事实概述页跑题重复
0.0042%2%56%1%
0.2574%23%3%1%
0.5065%29%5%1%
0.7563%31%5%1%
1.0059%31%7%3%

只看”意外”(α = 0)时,一大半是跑题的内容;加上相关性,跑题几乎消失。但 α 越大,主持人越喜欢抛出本话题的概述页——它们满篇都是病名、和话题最像,却没有任何具体内容。只看相关性,就会偏爱”空洞但切题”的东西。 两项兼顾效果最好;在这个玩具语料里最好的是 α = 0.25 左右,原文用 0.5。这类超参数要在自己的数据上调,而不是照搬论文。

3.6 产品里的人在回路

商业产品让人在检查点上引导:ChatGPT deep research 先问澄清问题;Gemini Deep Research 先展示一份可以编辑的研究计划;OpenAI deep research(2026 年 2 月)显示实时进度,可以中途打断。Co-STORM 更进一步:你可以在任何一轮加入,而且智能体也会主动提出问题。幻灯片的结论是:Co-STORM 第一个提出了混合主动权的、人与 AI 协作的知识策展。

系统主动权可见性目标
RAG 聊天机器人(2023 年起)你问每一个问题只有答案答案
STORM(2024 年 2 月)智能体;你给一个话题只有最终的文章带引用的文章
Co-STORM(2024 年 8 月)混合:任何一方、任何一轮讨论和思维导图讨论、导图、报告
Gemini Deep Research(2024 年 12 月)智能体;你编辑它的计划计划,然后是报告带引用的报告
ChatGPT deep research(2025 年 2 月)智能体;先澄清,可以打断实时进度和来源带引用的报告

3.7 轻松的答案可能意味着浅的学习

所有这些系统都想”让人了解”。但交付的方式仍然重要:

  • 《PNAS Nexus》2025 年 10 月的一项研究(7 个实验,10,462 人)发现:和用网页搜索相比,人们从 LLM 的总结里学得更浅。
  • Search Arena(2025 年,2.4 万多段对话)发现:引用越多越能赢得信任,即使那些引用并不支持其中的说法。

幻灯片的结论:要为学习和”校准过的信任”设计,而不只是为一份漂亮的报告设计。

幻灯片附录还提到了这个方向的后续工作:Collaborative Gym(ICLR 2026)让人和智能体异步地行动和交流。在真实用户的评估中,协作型智能体对全自动智能体的胜率是:旅行规划 86%、表格分析 74%、相关工作写作 66%;最常见的失败模式是沟通(65% 的案例)和对情境的感知(40%)。WorkBank(2025)调查了 104 个职业的 1500 名劳动者对 844 项任务的看法,用”人类主导程度”量表衡量人们希望在多大程度上参与。要构建人们愿意与之共事的智能体,并且衡量协作本身,而不只是产出。


4. 怎样评估一个研究智能体

4.1 四个选择

选择问题难点
目标(target)测什么?报告没有唯一的正确答案
评委(judge)谁来判断好坏?便宜的评委必须和人一致
任务(tasks)用哪些题?基准会饱和、会泄漏
环境(environment)智能体能接触到什么?智能体会找到(甚至偷到)答案

4.2 STORM 和 Co-STORM 是怎样评估的

原则是:用自动化来迭代,用人来提供真相。

  • 目标:大纲、文章、引用;Co-STORM 还要评估人的体验。
  • 评委:先用指标(标题召回),再用评分细则,再请维基百科编辑,最后是真实用户。
  • 任务:新鲜而真实。STORM 用的是 FreshWiki——模型知识截止日期之后才创建的维基百科文章(避免模型背过答案);Co-STORM 用真实用户的目标。
  • 环境:真实的网络,但排除目标文章本身。

用户研究的细节:STORM 请了 10 位有经验的维基百科编辑(3 位 1–5 年、4 位 6–10 年、3 位 15 年以上),通过 Meta-Wiki 的研究页面和给最近批准过文章的活跃编辑发消息招募;20 对文章(STORM vs 大纲驱动的 RAG),每对 2 位编辑,按 5 项标准各打 1–7 分(有趣程度、连贯与组织、相关与聚焦、覆盖面、可核实性),选出更好的一篇并说明理由;经过伦理审查(IRB)批准,签署知情同意,每人 50 美元。评分细则的每一级都有具体描述,例如”连贯与组织”的 7 分是”组织极好,逻辑结构清晰,过渡自然,论证清楚”。

编辑们说了什么:STORM 在 40 次两两比较中赢了 26 次;70% 的评分认为它的组织达到 4 分以上(RAG 是 45%);100% 的编辑认为它能帮他们开始写一篇文章。编辑们还发现了两个新问题:

  • 来源偏见的传递:一个有倾向性的来源会影响整篇文章的框架,即使每一句话都有引用;
  • 过度关联:在不相关的事实之间建立听起来合理的联系。

这两个问题没有任何指标发现,是人读出来的。

4.3 目标:从一个简短答案到一整篇报告

基准智能体要交出的特点
BrowseComp(2025)一个简短答案和参考答案比对;“难找、好验证”
WideSearch(2025)一张包含很多事实的表发布时最好的智能体只有约 5% 的表完全正确
DeepResearch Bench II(2026)一篇长报告9,430 条专家写的评分细则;最好的系统满足不到一半

目标越丰富,越难评判。

BrowseComp 是一个很好的例子。它的 1,266 道题都经过检验:强模型做不出来、搜索五次找不到、人在 10 分钟内解决不了。发布时的准确率:GPT-4o + 浏览 1.9%,o1 9.9%,人类训练员(2 小时)29.2%,OpenAI deep research 51.5%。而且训练员自己的答案只有 86.4% 和参考答案一致。据幻灯片,到 2026 年,厂商报告的最高分已经超过 90%——超过了人类训练员和参考答案的一致率,基准已经饱和。

4.4 评委:LLM 当评委,以及人

用 LLM 当评委有四种方式:

方式特点
打 1–10 分简单,但噪声大、容易被”讨好”
A 和 B 比较偏爱放在前面的、更长的、自己写的:要交换顺序再评一次
是 / 否的评分细则条目最稳定(DeepResearch Bench II 用了 9,430 条)
一个会核查来源的智能体Mind2Web 2:约 50 条细则组成的树,和人的判断 99% 一致

人类评委:专家评质量,真实用户评有用程度。但很贵——一个基准的 50 道题用了 225 个专家小时。

相信一个分数之前:① 人和人之间的一致率是上限;② 检查人类评委和 LLM 评委之间的一致率;③ 去读智能体的轨迹,而不只是看分数(人工检查曾发现智能体在查基准的答案);④ 自己看输出和反馈(编辑们发现的来源偏见,没有任何指标看到)。一个分数的可靠程度不会超过它的评委。每一个由 LLM 评委打出的结果,都要同时报告它和人的一致率。

代码 03 演示 1 模拟了这件事:60 对质量接近的文章(两个 STORM 配置;评委的偏差只在”两篇差不多”时显现),呈现顺序随机:

比较一致率Cohen’s κ
人类评委 1 vs 人类评委 2(上限)81.7%0.63
LLM 评委 vs 人类评委 173.3%0.48
LLM 评委(交换顺序,只保留两次一致的结论)vs 人类评委 194.1%(34 对)—

模拟的 LLM 评委有 70% 的时候选了放在前面的那篇,而按真实质量,前面那篇更好的只有 43%——这就是位置偏差(Zheng 等 2023 在 MT-Bench 上发现的)。“交换顺序再评一次”之后,26 对的两次结论不一致、被记为平局,保留下来的 34 对和人类的一致率升到 94%。Cohen’s κ 扣除了”碰巧一致”:如果两个评委都有 90% 的时候选 A,即使互相独立也会有 82% 的一致率。

4.5 引用不等于支持

幻灯片附录的三个数字:各家深度研究系统的引用准确率在 40%~80% 之间(DeepTRACE);约 1.2 万张投票显示,人们偏爱引用更多的回答,即使那些引用并不支持其中的说法(Search Arena);STORM 的句子有 85% 被它的引用支持。结论:逐条检查”声明—被引用的段落”是否一致,永远不要奖励引用的数量。

代码 03 演示 2:60 篇 STORM 文章原样时,88.8% 的引用支持它所在的句子;每句再塞两个同一话题的真实文档作为引用,引用数变成 3 倍,看起来更专业,支持率却跌到 29.7%。

4.6 环境:智能体会在网上找到答案

答案泄漏。据幻灯片引用的 Anthropic 报告(2026 年 3 月),Claude Opus 4.6 在 BrowseComp 的 1,266 道题里,有 11 个答案来自泄漏的评测材料;其中 2 次,模型找到了加密的答案文件并解密了它。另一项研究(“搜索时的数据污染”,2025)发现约 3% 的 HLE、SimpleQA、GPQA 题目连同答案可以在网上搜到,屏蔽这些网页后,模型在这些题上的准确率下降约 15%。补救办法:冻结的语料库(BrowseComp-Plus:约 10 万篇固定文档)、黑名单、新出的题、记录每一次抓取。

逃出沙盒。幻灯片还提到了 2026 年的两起事件:评测中的智能体攻入 Hugging Face 去拿测试答案;强化学习训练中,一个被禁止访问网络的智能体通过 DNS 联系上了外部的聊天机器人,OpenAI 因此暂停了对顶级模型的工具使用训练和评测。一个分数的可信程度不会超过沙盒。要审计、要检查轨迹。

代码 03 演示 3 模拟了泄漏(第 1 讲世界里新近疾病的 105 道换说法的题,其中 26 道连同答案被贴到了网上):

环境准确率泄漏的那部分题碰到答案页的题数(审计)
干净的语料72.4%76.9%0
语料里混进了答案页78.1%100%26
同上,但屏蔽答案页72.4%76.9%0

分数上看不出任何异样,只有翻检索日志才发现智能体碰到了答案页。(构造这个演示时也遇到了一个”魔鬼在细节里”:答案页带着题目原文,一开始会把别的题的真实资料挤出检索结果,反而拉低了总分——泄漏不只是让某些题变容易,还会扰乱别的题。代码最后让智能体像人一样,打开发现是别的题的答案页就跳过。)

4.7 给期末项目的四条规则

幻灯片的最后一页,每条规则都来自本讲见过的一次失败:

选择不要要见过的失败
目标只报告准确率报告准确率之外有意义的指标:成本、方差、细则评分、人的反馈token 用量解释了 BrowseComp 约 80% 的分数差异
评委相信一个没检验过的评委测量它和人的一致率;读轨迹专家之间对报告的两两比较只有 68% 一致
任务相信一个随便的基准考虑数据污染、成本等泄漏的答案;饱和的 BrowseComp
环境留下任何通道仔细设计环境,审计轨迹Hugging Face 被攻入;DNS 逃逸

代码 03 演示 4 验证了第一条:同一个 STORM 改变视角数和对话轮数(20 种配置),事实召回从 4.8% 变到 78.5%;用 log(检索次数) 做线性回归,R2=0.89R^2 = 0.89——检索次数这一个变量就解释了 89% 的分数差异。“我的系统比你的高 10 个点”可能只是”我花的钱多”。比较两个系统时,要么在相同的预算下比较,要么画出”成本—分数”曲线。

在真实世界里评估。STORM 的研究预览版有 100 多万用户,生成了 140 万篇文章,收到 25 万条反馈。要考虑的事情包括:用户体验(好用)、部署成本(预算和性能)、监管(真实用户意味着伦理审查)、红队测试(先探查有害话题)、审计(读输出,不只看分数)、从反馈中学习(把反馈变成数据——STORM 的使用日志变成了 WildSeek 数据集,并影响了 Co-STORM 的设计)。基准告诉你它能不能用;真实用户告诉你它是否有用、安全、负担得起。


5. 调查型问题:GRILL

5.1 只靠搜索不够的问题

对于直截了当的问题,找到相关信息可能就够了。但对于调查型问题,难的是判断”可能是什么”,以及”什么证据能区分这些可能”:

  • 医学研究者:考虑一个观察到的效应的多种解释,然后检验哪些经得起证据的考验;
  • 记者:构建关于事情经过的几种竞争的说法,然后寻找能证实或反驳每一种的来源;
  • 律师:构建关于案件的几种理论,寻找能加强或削弱每一种的证据。

GRILL(Generalized Research and Inference Layer for Large-scale Long documents,Stanford OVAL)在开始搜索之前,就把调查变成一个显式的假设检验过程。作业 1 用的就是它。

5.2 为什么要在搜索之前写下假设?

研究智能体的检索词是模型自己写的,所以反映的是模型已经相信的东西:

模型的信念(它预期答案是什么) → 检索词(从信念里生成的关键词) → 检索到的论文(被最初的信念所限制)

这带来两个风险:

  • 覆盖:检索词可能漏掉模型最初理解之外的话题;
  • 确认:从某个信念出发写的检索词,找到的来源往往也被这个信念所限制。

GRILL 的做法:先把模型的信念写成假设,然后针对每个假设去寻找反对它的证据。

代码 04 演示 3 看”按信念写检索词”的智能体能覆盖多少文献:它先凭记忆猜目标疾病的 4 个症状,每个猜测写一个检索词。在 45 道题里,它检索到原始报道的比例只有 27%,否定性报道 60%,非典型病例 33%。更重要的是,即使读到了否定性报道,它也只把它当作”又一条资料”,而不是”对某个假设的反证”。

5.3 GRILL 的流程

关键想法:把每个候选答案写成一个假设,主动地尝试推翻它,并不断修正,直到问题被完全覆盖。

问题 → 假设(候选答案,写成可以被证据推翻的形式)
     → 调查 / 分析(为每个假设寻找反对它的证据)
     → 记录(每个假设、它的结论和来源)
     → 有反证 → 修正后的假设 → 再调查……
停止:问题的每一部分都被检验过的假设回答了,或者预算用完了。

检验:寻找反证。一个假设只有在”寻找反证、却没有找到”之后才被接受。检验分两级:

阶段问题成本
① 筛查这个说法在文献里有任何支持吗?便宜、宽松;在昂贵的检验之前,去掉毫无根据的说法
② 深度检验有没有反例或相互矛盾的研究?约是筛查的 5 倍;只有通过筛查的假设才做

结论有三种:SUPPORTED(有来源支持,且没有来源反对)、CONTESTED(文献之间有分歧,作为一个发现报告出来)、REFUTED(证据与它矛盾)。引用必须能解析到一篇真实的论文,否则这条支持不算数。

修正:反证产生更好的假设。检验发现反证时,GRILL 写一个能解释这个反证的新假设,再去检验它;每条调查线最多修正两次。被推翻的假设会保留在记录里,连同理由一起出现在报告中;如果之后为另一个假设找到的证据,从一个独立的来源支持了它,它会被重新检验。

5.4 在作业 1 的缩小版上

代码 04 为 15 种新近疾病各出 3 道”找到那个病人”的题(共 45 道)。每种疾病有 5 篇文献:原始报道(所有病人都有标志性症状 h 和 f1)、病例系列(多数有 f2)、非典型病例(有 f3 但没有 h)、否定性报道(从未有病人出现 g)、一篇相似疾病 Y 的综述(Y 有 f1、f2 和 g,“类似于 X”)。病人里有一个诱饵:他有 h、f1、f2、g——三个症状都能在 X 的文献里找到,看起来比目标病人更像 X,但 g 被明确排除了。目标病人一半典型(有 h、f2、f3),一半非典型(只有 f2、f3)。

做法准确率选中诱饵检索 / 题LLM 调用 / 题
直接问 LLM15.1%6.0%0.02.0
RAG(读完 X 的全部文献,数重合个数)7.8%91.1%1.01.0
按信念去搜索27.0%25.1%4.05.0
GRILL94.4%0.0%30.940.9
 去掉深度检验(只筛查)21.1%75.6%1.011.0
 去掉假设修正66.7%0.0%28.538.5

(随机猜的准确率是 10%。)

  • RAG 比随机猜还差:它把 X 的 5 篇文献全读了,却 91% 的时候选中诱饵。只数”有什么症状”,不看”没有什么症状”;还会把相似疾病那篇”张冠李戴”成关于 X 的。资料全都找到了,判断却错了——这就是”只靠搜索不够”。
  • GRILL 的关键是深度检验:专门去找反证,诱饵有一个”从未有 X 的病人出现过”的症状,被推翻了。只做筛查时,诱饵的支持最多,又被选中。
  • 假设修正让非典型的目标病人翻盘:“原始报道说所有病人都有 h,这个病人没有”→ 有争议 → 修正为”患没有 h 的非典型 X” → 找到非典型病例的报道 → 支持。
  • 代价:GRILL 每道题的检索次数是 RAG 的 31 倍。
  • GRILL 最后怎样在几个”被支持”的假设里选?代码用的是诊断推理里常用的简约原则:选最能解释病人症状的那个(得分 = 有文献支持的症状数 − 无法解释的症状数)。只有一两个症状碰巧和文献吻合的病人,得分就低。

代码 04 演示 1 打印了一道题的信念账本:每个假设、它的支持(附出处)、反证(附出处)、经历的每一步(筛查、深度检验、修正、丢弃了一条无法核实的引用……)。被推翻的假设也保留着理由,例如”文献报告:从未有 Torelix syndrome 的病人出现 retinal degeneration [paper-Torelix-excl]”。

玩具实验的边界:这些题是专门构造的——诱饵和否定性报道就是为了让”数重合个数”上当、让”找反证”起作用。它说明的是假设检验的机制,不代表真实的罕见病诊断有多容易或多难。真实的文献成千上万,否定性证据往往不像这里这样写得一清二楚。

5.5 重复运行与错误分析

作业 1 要求重复运行 GRILL 并比较结果(TODO 5.1),并做错误分析(TODO 6.1)。代码 04 演示 4 换 5 个随机种子:准确率分别是 94.4%、75.2%、85.6%、83.3%、86.7%,平均 85.0%,标准差 6.9%;45 道题里只有 25 道的 5 次结论完全一致。GRILL 的每一步都有小概率出错(漏读一条断言、编造一个引用),不同的种子让不同的题出错——只跑一次的准确率不可靠(回想第 1 讲第 6.5 节)。

信念账本让错误分析变得可能。第一次运行答错的 3 道题,按账本归因:两道是”另一个病人碰巧有同样多的症状和文献吻合”,一道是”筛查时漏读了支持目标病人的证据(应有 2 个症状得到支持,只找到 1 个)”。

5.6 SHELDON:在假设和观察两个空间里搜索

幻灯片还介绍了研究组正在投稿的 SHELDON。它基于认知科学的一个经典观点:Klahr 和 Dunbar(1988)把人类的科学发现描述为在两个空间里的搜索——假设空间和实验空间。SHELDON 的关键想法:

假设空间:候选的解释或设计  ──检验(在环境里搜索)──►  观察空间:支持或推翻某个假设的发现
           ▲                                                    │ 抽象
           └──────────── 洞见(从多个观察里抽象出的规律)提出新的假设 ◄┘

检验假设产生观察;从观察里抽象出的洞见又产生新的假设。幻灯片的例子来自一个运维故障诊断基准(ORCA-Bench):结账和浏览都失败了,智能体手里有指标、调用链和代码;第一轮检验推翻了两个假设,第二轮把这两个观察组合成一个新假设”支付失败”,代码层面的观察又把另外两个假设细化成更具体的版本。消融实验(数字来自幻灯片,越高越好):

DiagnosisArenaORCA-BenchARC-AGI-2
SHELDON84.0066.6759.17
去掉比较分析78.0056.6750.00
去掉观察空间70.0053.3350.00
去掉持续探索82.0053.3357.70

去掉观察空间,每个基准都下降(DiagnosisArena −14.0,ORCA-Bench −13.3)。


6. 本讲小结

幻灯片的总结:一个研究智能体就是一组设计选择。

部分问题设计选择
① 构建智能体哪些选择定义了它?编排、广度、深度、记忆、综合
② 人在回路人放在哪里?主动权、可见性、目标
③ 评估怎么知道它有效?目标、评委、任务、环境
④ 调查型问题搜索不够时怎么办?假设、检验、修正
  1. 知识策展处理的是未知的未知:难的是决定该问哪些问题。RAG 回答你问的问题,研究智能体决定该问哪些问题。
  2. STORM 先调研再写作:视角解决广度,对话解决深度,大纲 + 参考文献池充当记忆,逐节写作保证引用。消融实验证明每个部件都有用。
  3. 编排是一个光谱:从代码决定(固定流水线)到模型决定(训练出来的智能体、通用 harness)。它们都是 harness;区别在于谁决定下一步、技能存在哪里。广度很贵,要按问题的难度分配投入。
  4. Co-STORM 让人旁听并随时加入一场专家讨论:主持人用 cos⁡(i,t)α(1−cos⁡(i,q))1−α\cos(i,t)^\alpha(1-\cos(i,q))^{1-\alpha} 抛出新方向,思维导图让人看见讨论、并直接变成大纲。要为学习和校准过的信任设计。
  5. 评估要过四关:评委要和人对齐、引用要逐条核查、环境要防泄漏、分数要和成本一起报告。
  6. 调查型问题需要先写下假设、再主动找反证。GRILL 的信念账本让每个结论都有据可查,也让错误分析成为可能。

7. 与作业的关系

作业 1:找到那个病人(2026 年 10 月 6 日截止;12 个待办项共 53 分)。

作业部分待办项本讲
第 3 节:建立基线1.1 评价网页搜索结果;1.2 比较有无检索结果的回答;3.1 病人匹配结果;3.2 结果中的区分因素第 1 讲第 4 节;本讲代码 04 的直接问 LLM 和 RAG
第 4 节:GRILL4.1 分析被推翻的假设;4.2 比较 GRILL、RAG、直接调用 LLM;4.3 猜病人第 5.2–5.4 节;代码 04 演示 1、2
第 5 节:病人匹配5.1 重复运行 GRILL;5.2 GRILL 结果中的区分因素;5.3 GRILL 和 RAG 排序的差异;5.4 再猜一次第 5.5 节;代码 04 演示 4
第 6 节:错误分析6.1 错误分析(10 分,分值最高)第 5.5 节;第 4 节”读轨迹”

几点建议:

  • 作业的评分奖励解释:诊断正确但说不清为什么,得分低于诊断失败但准确指出失败在哪里。每个定量的结论都要指明出自哪个代码单元或文件的哪一行。
  • 分析 GRILL 的被推翻假设时,看它的反证从哪里来:是一篇否定性报道、一个”所有病人都有”的症状缺失,还是筛查时就找不到支持?
  • 比较 GRILL 和 RAG 时,想想本讲的诱饵:RAG 是不是选中了”看起来最像”的病人?它有没有用上否定性的证据?
  • 错误分析要通过有意的检查找到流水线里的至少一个错误:读账本、读轨迹,而不只是看最终的排名。

建议先独立完成作业,卡住了再参考这里的讲解和代码。


8. 练习

练习 1(概念)。下面三个任务分别属于信息需求的哪个层次(访问、策展、发现)? (a) “某种药物的推荐剂量是多少?” (b) “我刚被诊断出一种罕见病,想全面了解它。” (c) “从 300 个耐药基因候选里,找出最值得做实验验证的 10 个。”

参考答案

(a) 访问:已知的未知,问题本身明确。(b) 策展:用户不知道自己该了解哪些方面(未知的未知),需要系统帮他决定问哪些问题。(c) 发现:答案还不存在于任何文献里,需要综合证据、提出并检验假设(GRILL 和幻灯片里的 RNA 测序例子)。

练习 2(STORM)。为什么 STORM 从相关话题的目录里找视角,而不是直接让 LLM”想几个视角”?两者各有什么风险?

参考答案

直接让 LLM 想视角,得到的是它”已经相信”的视角,和泛泛提问是同一个瓶颈:想不到的就想不到。相关话题的目录来自人类作者的实际写作,反映了”这类话题通常要讲什么”,是外部的、经验性的信号。风险:相关话题选得不好(例如选到了结构很不一样的文章),视角就会偏;而且目录只能告诉你”同类话题讲什么”,对这个话题特有的方面(例如一种只在某个地区流行的病的”社会影响”)仍然可能漏掉——这正是 Co-STORM 让人加入、并由主持人抛出意外方向的原因。

练习 3(主持人的公式)。设 α = 0.5。三条未使用的信息:A 的 cos⁡(i,t)=0.6\cos(i,t) = 0.6、cos⁡(i,q)=0.7\cos(i,q) = 0.7;B 的 cos⁡(i,t)=0.4\cos(i,t) = 0.4、cos⁡(i,q)=0.2\cos(i,q) = 0.2;C 的 cos⁡(i,t)=0.05\cos(i,t) = 0.05、cos⁡(i,q)=0\cos(i,q) = 0。 (a) 计算三者的分数,主持人会抛出哪一条? (b) 如果 α = 1 呢?α = 0 呢? (c) 为什么用乘法而不是加法组合两项?

参考答案

(a) A:0.6×0.3≈0.42\sqrt{0.6 \times 0.3} \approx 0.42;B:0.4×0.8≈0.57\sqrt{0.4 \times 0.8} \approx 0.57;C:0.05×1≈0.22\sqrt{0.05 \times 1} \approx 0.22。抛出 B:和话题相关,又和当初的问题很不一样。 (b) α = 1 只看相关性:A(0.6)最高——它和刚才的问题很像,是”已经讲过的方向”。α = 0 只看意外程度:C(1.0)最高——它几乎和话题无关(跑题)。 (c) 乘法要求两项同时不能太小:任何一项接近 0,分数就接近 0。加法会让一项极高的信息(例如完全跑题、但”非常意外”的 C)也能得到不错的分数。

练习 4(评估)。你的团队报告:“我们的研究智能体在 BrowseComp 上比基线高 12 个点(基线 60%,我们 72%)。“作为审稿人,你会追问哪些问题?至少写出四个,分别对应四个设计选择。

参考思路

目标:两个系统的 token / 检索预算一样吗?(第 4.7 节:token 用量解释了约 80% 的分数差异)方差呢?跑了几次、置信区间多宽?评委:BrowseComp 用参考答案比对,但参考答案本身和人的一致率只有 86.4%;有没有人工检查一部分”答对”和”答错”的题?任务:BrowseComp 已经接近饱和,有没有在新出的、没泄漏的题上测?环境:用的是真实网络还是冻结的语料?有没有检查智能体是否访问了泄漏的答案页?轨迹有没有审计?

练习 5(GRILL)。一个病人的症状是 {h, f1, f2, g}。文献:原始报道”所有病人都有 h 和 f1”;病例系列”多数有 f2”;否定性报道”从未有病人出现 g”。 (a) 写出 GRILL 对这个病人的假设在筛查和深度检验两个阶段的结论,以及它们的依据。 (b) 如果否定性报道写的是”在我们的 12 个病人里没有观察到 g”(而不是”迄今报道的所有病人”),结论应该怎样变化?为什么?

参考答案

(a) 筛查:h、f1、f2 都有支持 → 通过(宽松)。深度检验:为 g 检索反证,找到”从未有病人出现 g” → REFUTED,依据是否定性报道。 (b) “12 个病人里没有观察到”是一个较弱的否定:可能只是样本太小。更合适的结论是 CONTESTED(文献有分歧或证据不足),并作为一个发现报告出来;也可以修正假设,例如”患 X,且合并了另一种导致 g 的情况”,再去检验。这说明了 GRILL 为什么要区分 SUPPORTED / CONTESTED / REFUTED 三种结论:真实的证据很少非黑即白。

练习 6(动手改代码)。在 01_storm.py 的 SYSTEMS 里加一个”STORM,只用 2 个视角”的配置({"n_perspectives": 2}),在演示 3 里运行。它的事实召回落在哪两个系统之间?检索次数呢?结合演示 4 讨论”视角数”这个旋钮。

参考思路

编写讲义时实际运行的结果:标题召回 55.0%、事实召回 36.8%、深度召回 34.2%,检索 11.8 次、调用 36.2 次——事实召回落在”去掉多视角”(30.8%)和完整的 STORM(64.9%)之间,检索次数大约是 STORM 的一半。演示 4 已经显示:视角越多召回越高,直到所有方面都有人负责;而对话轮数很快饱和。

练习 7(动手改代码)。在 02_co_storm.py 里,把 USER_INTERESTS 改成 ["Genetics", "History"](一个更关心学术的用户),重新运行演示 3。Co-STORM 相对于聊天机器人的优势还在吗?“兴趣之外的事实”为什么会变?

参考答案

编写讲义时实际运行的结果:聊天机器人接触到 8.9 条事实、其中 3.0 条在兴趣之外;Co-STORM 接触到 12.1 条、其中 7.0 条在兴趣之外(原来的设置分别是 8.3 / 2.5 和 12.0 / 6.2)。优势仍在,而且幅度差不多。两者的”兴趣之外”都略有增加:用户问完自己关心的问题以后会问泛泛的问题,而泛泛的问题集中在”症状、遗传、治疗”——对一个关心遗传和历史的用户来说,“症状”和”治疗”变成了兴趣之外的内容。这也提醒我们:一个指标(“兴趣之外”)的含义取决于你怎样定义用户。

练习 8(动手改代码)。在 04_grill.py 里,把 read_papers 中”谨慎地读”时张冠李戴的概率从 0.05 改成 0.5(和朴素地读一样),重新运行演示 2。GRILL 的准确率会受影响吗?为什么?

参考思路

编写讲义时实际运行的结果:准确率从 94.4% 降到 90.0%,选中诱饵的比例仍然是 0%。张冠李戴会让相似疾病的症状(包括 g)在筛查时被当成”支持”,但深度检验专门为每个症状检索反证,否定性报道仍然推翻了诱饵。这说明”深度检验”是一道独立于”读得准不准”的防线——又一个纵深防御的例子(第 1 讲第 5.5 节)。准确率的小幅下降来自其他病人:张冠李戴让一些随机病人的症状也得到了”支持”,在简约原则的打分上追平了目标病人。


9. 延伸阅读

本讲的核心论文

  • Shao, Jiang, Kanell, Xu, Khattab, Lam. Assisting in Writing Wikipedia-like Articles From Scratch with Large Language Models. NAACL 2024.(STORM)
  • Jiang, Shao, Ma, Semnani, Lam. Into the Unknown Unknowns: Engaged Human Learning through Participation in Language Model Agent Conversations. EMNLP 2024.(Co-STORM)
  • 代码:github.com/stanford-oval/storm;在线试用:storm.genie.stanford.edu

工作流与 harness

  • Anthropic. Building effective agents. 2024 年 12 月.
  • Anthropic. How we built our multi-agent research system. 2025 年 6 月.
  • Anthropic. Effective context engineering for AI agents. 2025 年 9 月.
  • Databricks. What is an AI Agent Harness? 2026 年 6 月.
  • Li 等. WebWeaver: Structuring Web-Scale Evidence with Dynamic Outlines for Open-Ended Deep Research. 2025.
  • Han 等. Deep Researcher with Test-Time Diffusion(TTD-DR). 2025.

人与智能体协作

  • Shao, Samuel, Jiang, Yang, Yang. Collaborative Gym: A Framework for Enabling and Evaluating Human-Agent Collaboration. ICLR 2026.
  • Melumad & Yun. Experimental evidence of the effects of large language models versus web search on depth of learning. PNAS Nexus 2025.

评估

  • Wei 等. BrowseComp: A Simple Yet Challenging Benchmark for Browsing Agents. 2025;Chen 等. BrowseComp-Plus. 2025.
  • Wong 等. WideSearch. ICLR 2026;Li 等. DeepResearch Bench II. 2026;Gou 等. Mind2Web 2: Evaluating Agentic Search with Agent-as-a-Judge. NeurIPS 2025.
  • Zheng 等. Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena. NeurIPS 2023.
  • Miroyan 等. Search Arena: Analyzing Search-Augmented LLMs. 2025;Narayanan Venkit 等. DeepTRACE. 2025.
  • Han 等. Search-Time Data Contamination. 2025.

训练研究智能体(幻灯片附录的阅读清单):Search-R1、DeepResearcher、ZeroSearch、Tongyi DeepResearch、DR Tulu、Rubrics as Rewards 等。

科学发现

  • Klahr & Dunbar. Dual Space Search During Scientific Reasoning. Cognitive Science 1988.
  • 课程阅读清单把 STORM、Co-STORM、DataSTORM(第 11 讲)列为”知识策展”部分的必读。

10. 下一讲预告

本讲多次提到 harness:STORM 是一条固定的流水线,Anthropic 的研究系统是”规划者 + 执行者”,Claude Agent SDK 是一个通用的循环;GRILL 也是一个为科学推理设计的 harness。第 3 讲把镜头拉近到 harness 本身:

  • 工具调用是怎样工作的?为什么”执行权”始终在程序手里?
  • 智能体的循环(ReAct)会在哪里出错——死循环、没有进展、预算耗尽?SPINACH 怎样检测循环并回滚?
  • 上下文管理的几种策略,在长任务上各有什么效果?
  • 为什么 LLM “知道每一步,却做不好组合”?“计算思维引擎”怎样用递归分解来解决?
  • Stanford Agentic OS(A-OS)的架构,以及这门课的研究项目可以从哪里入手。
← 返回课程目录