对应: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 学完本讲,你应该能够
- 区分三个层次的信息需求:问答(已知的未知)、知识策展(未知的未知)、知识发现(真正的未知)。
- 说出”研究智能体”和 RAG 的区别,以及构建研究智能体的五个设计选择:编排、广度、深度、记忆、综合。
- 解释 STORM 为什么先调研、再写作:视角怎样解决广度问题,模拟对话怎样解决深度问题,大纲和参考文献池怎样充当记忆。
- 说出四种编排方式(固定流水线、规划者 + 执行者、训练出来的智能体、通用 harness)的区别,以及 harness 是什么。
- 解释 Co-STORM 的设计:混合主动权、主持人的打分公式、思维导图;以及为什么”轻松的答案可能意味着浅的学习”。
- 说出评估研究智能体的四个选择(目标、评委、任务、环境),以及它们各自的陷阱:评委的偏差、引用不等于支持、评测答案泄漏、分数被预算左右。
- 解释调查型问题为什么”只靠搜索不够”,画出 GRILL 的流程:假设 → 筛查 → 深度检验(找反证)→ 修正 → 信念账本。
- 把本讲的内容和作业 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 种疾病的平均):
| 提问方式 | 问题数 | 方面覆盖 | 事实覆盖 | 追问事实 |
|---|---|---|---|---|
| 泛泛地提问 | 3 | 38.6% | 9.7% | 0.7% |
| 泛泛地提问 | 6 | 38.6% | 9.7% | 0.7% |
| 泛泛地提问 | 15 | 53.9% | 21.0% | 11.3% |
| 泛泛地提问 | 30 | 53.9% | 21.0% | 11.3% |
| 5 个视角,各问 2 个根问题 | 10 | 70.8% | 39.4% | 12.5% |
| 5 个视角 + 读完再追问 | 20 | 70.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,大纲与人类写的维基百科文章比较;数字来自幻灯片):
| 系统 | 标题召回 | 实体召回 |
|---|---|---|
| 大纲驱动的 RAG | 89.55 | 42.38 |
| STORM | 92.73 | 45.91 |
| 去掉多视角 | 92.39 | 42.70 |
| 去掉对话 | 88.75 | 39.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.0 | 2.0 |
| RAG(检索一次) | 99.2% | 39.9% | 5.0% | 97.6% | 90.3% | 1.0 | 7.0 |
| 大纲驱动的 RAG | 65.6% | 31.2% | 3.6% | 96.2% | 89.7% | 4.7 | 9.6 |
| STORM | 77.8% | 64.9% | 61.5% | 95.2% | 88.9% | 22.6 | 66.5 |
| 去掉多视角 | 53.6% | 30.8% | 31.3% | 95.9% | 88.4% | 23.1 | 51.3 |
| 去掉对话(不追问) | 78.1% | 39.9% | 11.5% | 95.9% | 89.4% | 13.0 | 26.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 个智能体、3
10 次调用;做比较,24 个子智能体、各 10~15 次调用;复杂的调研,10 个以上子智能体。 - 工具描述就是提示词:让一个模型重写一个有缺陷的工具描述,后续任务的完成时间减少了 40%。
- 先宽后窄:先用简短、宽泛的查询,像专家一样先了解全貌;智能体默认倾向于过于具体的查询。
- 并行阅读:3~5 个子智能体同时工作,每个同时发起 3 个以上的工具调用。
- 早评估、小规模评估:从大约 20 个真实的查询和一个带评分细则的 LLM 评委开始;人工检查能发现评委漏掉的问题。
代码 01 演示 4 看”投入与收益”(40 个长尾和新近话题):
| 视角数 | 对话轮数 | 事实召回 | 深度召回 | 检索次数 | 串行轮次 |
|---|---|---|---|---|---|
| 1 | 5 | 25.9% | 23.1% | 8.4 | 5 |
| 3 | 5 | 48.4% | 44.8% | 15.6 | 5 |
| 5 | 3 | 54.4% | 41.9% | 17.1 | 3 |
| 5 | 5 | 65.3% | 61.5% | 22.9 | 5 |
| 5 | 8 | 65.8% | 62.3% | 23.2 | 8 |
| 8 | 8 | 91.8% | 87.1% | 33.2 | 8 |
轮数加到 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) 共享的讨论(基于检索) ──► 思维导图 ──► 报告
↘ ↙ ↑
主持人:提出还没探索过的方向 你:旁观,或者接过任何一轮
主持人怎样挑方向? 问题在于:专家们一直在回答问题,讨论会越来越窄。主持人的规则是:连续两轮都只是在回答之后,抛出一条还没人用过的检索结果。检索时每次会拿到好几篇文档,专家只用了其中一部分;剩下的进入”未使用池”。怎样从池子里挑?幻灯片上的公式:
其中 是一条还没人用过的信息, 是讨论的话题, 是当初检索到 的那个问题,。
- 第一项 :和话题相关。跑题的信息不要。
- 第二项 :对于当初那个问题来说是意外的。它和那个问题越不像,越说明它是检索时”顺带捞到”的、讨论里还没覆盖的新方向。
- 两项相乘:任何一项接近 0,分数就接近 0。
代码 02 演示 1 是一个具体的例子:专家刚回答了”病人怎样治疗”,用了”用 Jorcorzole 治疗”那条;未使用池里有两篇本话题的文档(“避免剧烈运动""剧烈运动可能引发代谢危象”)和三篇讲别的疾病怎样治疗的文档(因为”patients""treated”这些词被捞上来)。别的疾病的文档 ,分数只有 0.06;本话题的两篇分数约 0.5,主持人抛出了”避免剧烈运动”那条——一个讨论还没碰过的方向。Co-STORM 原文用的是神经网络的句子嵌入;代码里用 TF-IDF 向量的余弦相似度代替,道理相同。
思维导图怎样长出来:
- 插入:一条新信息挂到最匹配的概念下。
- 重组:某个概念下超过 10 条信息时,LLM 把它拆成几个子主题(例如”各国入场”拆成”入场顺序”和”旗手”)。
- 写作:整张图就是报告的大纲,每一节引用它的信息。
好处是:人能看到已经覆盖了什么,报告的大纲也是现成的。代码 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.3 | 3.4 | 2.5 | 8.3 | 16.0 |
| Co-STORM,1 位专家 | 10.1 | 3.5 | 4.3 | 9.9 | 10.1 |
| Co-STORM,去掉主持人 | 10.1 | 3.0 | 4.3 | 9.9 | 12.2 |
| Co-STORM(2 位专家 + 主持人) | 12.0 | 4.3 | 6.2 | 11.8 | 11.6 |
聊天机器人只回答用户问的问题,用户问完自己关心的就只能问泛泛的问题;Co-STORM 里,用户不增加任何提问负担,却接触到了两倍多”没想到要问”的内容,检索次数反而更少(主持人的发言不需要检索)。
α 的作用(代码 02 演示 4)。把主持人抛出的内容分成四类:
| α | 新事实 | 概述页 | 跑题 | 重复 |
|---|---|---|---|---|
| 0.00 | 42% | 2% | 56% | 1% |
| 0.25 | 74% | 23% | 3% | 1% |
| 0.50 | 65% | 29% | 5% | 1% |
| 0.75 | 63% | 31% | 5% | 1% |
| 1.00 | 59% | 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 人类评委 1 | 73.3% | 0.48 |
| LLM 评委(交换顺序,只保留两次一致的结论)vs 人类评委 1 | 94.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(检索次数) 做线性回归,——检索次数这一个变量就解释了 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 调用 / 题 |
|---|---|---|---|---|
| 直接问 LLM | 15.1% | 6.0% | 0.0 | 2.0 |
| RAG(读完 X 的全部文献,数重合个数) | 7.8% | 91.1% | 1.0 | 1.0 |
| 按信念去搜索 | 27.0% | 25.1% | 4.0 | 5.0 |
| GRILL | 94.4% | 0.0% | 30.9 | 40.9 |
| 去掉深度检验(只筛查) | 21.1% | 75.6% | 1.0 | 11.0 |
| 去掉假设修正 | 66.7% | 0.0% | 28.5 | 38.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):结账和浏览都失败了,智能体手里有指标、调用链和代码;第一轮检验推翻了两个假设,第二轮把这两个观察组合成一个新假设”支付失败”,代码层面的观察又把另外两个假设细化成更具体的版本。消融实验(数字来自幻灯片,越高越好):
| DiagnosisArena | ORCA-Bench | ARC-AGI-2 | |
|---|---|---|---|
| SHELDON | 84.00 | 66.67 | 59.17 |
| 去掉比较分析 | 78.00 | 56.67 | 50.00 |
| 去掉观察空间 | 70.00 | 53.33 | 50.00 |
| 去掉持续探索 | 82.00 | 53.33 | 57.70 |
去掉观察空间,每个基准都下降(DiagnosisArena −14.0,ORCA-Bench −13.3)。
6. 本讲小结
幻灯片的总结:一个研究智能体就是一组设计选择。
| 部分 | 问题 | 设计选择 |
|---|---|---|
| ① 构建智能体 | 哪些选择定义了它? | 编排、广度、深度、记忆、综合 |
| ② 人在回路 | 人放在哪里? | 主动权、可见性、目标 |
| ③ 评估 | 怎么知道它有效? | 目标、评委、任务、环境 |
| ④ 调查型问题 | 搜索不够时怎么办? | 假设、检验、修正 |
- 知识策展处理的是未知的未知:难的是决定该问哪些问题。RAG 回答你问的问题,研究智能体决定该问哪些问题。
- STORM 先调研再写作:视角解决广度,对话解决深度,大纲 + 参考文献池充当记忆,逐节写作保证引用。消融实验证明每个部件都有用。
- 编排是一个光谱:从代码决定(固定流水线)到模型决定(训练出来的智能体、通用 harness)。它们都是 harness;区别在于谁决定下一步、技能存在哪里。广度很贵,要按问题的难度分配投入。
- Co-STORM 让人旁听并随时加入一场专家讨论:主持人用 抛出新方向,思维导图让人看见讨论、并直接变成大纲。要为学习和校准过的信任设计。
- 评估要过四关:评委要和人对齐、引用要逐条核查、环境要防泄漏、分数要和成本一起报告。
- 调查型问题需要先写下假设、再主动找反证。GRILL 的信念账本让每个结论都有据可查,也让错误分析成为可能。
7. 与作业的关系
作业 1:找到那个病人(2026 年 10 月 6 日截止;12 个待办项共 53 分)。
| 作业部分 | 待办项 | 本讲 |
|---|---|---|
| 第 3 节:建立基线 | 1.1 评价网页搜索结果;1.2 比较有无检索结果的回答;3.1 病人匹配结果;3.2 结果中的区分因素 | 第 1 讲第 4 节;本讲代码 04 的直接问 LLM 和 RAG |
| 第 4 节:GRILL | 4.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 的 、;B 的 、;C 的 、。 (a) 计算三者的分数,主持人会抛出哪一条? (b) 如果 α = 1 呢?α = 0 呢? (c) 为什么用乘法而不是加法组合两项?
参考答案
(a) A:;B:;C:。抛出 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)的架构,以及这门课的研究项目可以从哪里入手。