当 Agent 学会回头看:DiscoPER 用"元反思"把自主科学发现拉到了新水位
你有没有一种感觉:现在做 AI for Science 的论文里,"自主发现系统"已经不是一个新词了。AI Scientist 写 ML 论文,AI Co-Scientist 做生物医学假设,Robin 跑实验做药物发现,ExperiGen 把假设和验证打通——一个比一个能讲故事。
但我自己看下来有个挺别扭的事:这些系统里,"提出下一个假设"这一步,几乎都是独立的一锤子买卖。模型拿到一个数据集或者一个研究问题,提一个假设,验证完就清空记忆,进入下一轮。它从来不回头看自己之前提过什么、测过什么、哪些变量被反复错过、哪些混杂因素被反复忽略。
这种"金鱼式"循环有个明显的问题:搜索很容易困在已经看过的角落。如果不在生成新假设时回顾已有发现,搜索空间里的盲区会越积越多,最后系统要么在已经验证过的事实上反复横跳,要么沿着某条 early winner 的路径一直走下去,掉进 local optimum。
DiscoPER(arXiv:2607.01131)这篇论文瞄的就是这个痛点。它干的事其实不复杂——在 Propose–Evaluate 之外加一个 Reflect 模块,每隔几轮把"已被接受的 claim"和"已被拒绝的 claim"打包喂给一个 LLM,让它生成一份结构化的下一步指导。这个指导不是具体假设,而是"哪些变量是缺口"、"哪些变量在多条已接受 claim 里都扮演了混淆因子"、"哪两个已有 claim 暗示了一个更高阶的联合假设没被测过"。
听起来挺轻量的对吧?但它在 iNatDisco 生态学基准上把 9 个同行评议过的真模式恢复了 8 个,假设支持率 72.7%,同时在反事实数据上证明这些发现不是 LLM 背书常识,而是真的在跟数据较劲。
更让我眼前一亮的是作者把整个领域塞进了一个统一框架:Propose × Evaluate × Reflect × Prior Information,并证明现存所有系统都是这个框架的受限实例。这种"先建坐标系再放点"的写法在 AI4Science 圈子里不多见,值得细读。
核心摘要
痛点:现有 LLM 驱动的自主科学发现系统普遍缺一个关键能力——回头看。每轮假设生成是独立的,模型既不知道过去发现了什么,也不知道哪里还藏着没探过的区域。结果就是搜索低效、容易被早期偶然结果带偏、且对"是否真的在做发现"这件事没有自检机制。
方案:DiscoPER 把发现循环拆成三个显式模块——Propose(生成假设)、Evaluate(代码 + 统计测试 + 留出集验证)、Reflect(元级 LLM,对 claim 集合做结构化分析,输出下一轮指导)。关键点有三个: 1. 假设是可执行 Python 代码,表达力是图灵可计算级别,远超传统因果发现的"边"假设空间; 2. 留出集验证避免 p-hacking,代码可在训练集上调,但在验证集上只跑一次; 3. Reflect 不是事后总结,而是下一次 Propose 的输入条件,相当于"二阶推理"。
效果:在 iNatDisco-800(800 个观察,9 个真模式)上恢复 8/9,支持率 72.7%;在 iNatDisco-50K(5 万观察、9776 个物种、12 个真模式)上 8/12,支持率 74.2%。在 SACHS/ASIA 经典因果基准上 F1 拿到 0.83/0.86,超过所有传统结构学习方法。
我的判断:这篇论文最值钱的地方不是那 8/9 的恢复率,而是把"反思"从可选项变成了显式的一阶对象——这是给整个 AI Scientist 系列立了一块新坐标。局限性也很清楚:多模态发现受限于视觉验证的统计功效(合成视觉基准上跨模态模式 0/8),且它不会自己生成数据,所有发现都受限于观测数据的偏差。
论文信息
- 标题:Autonomous Scientific Discovery via Iterative Meta-Reflection
- 作者:Bingchen Zhao, Sara Beery, Oisin Mac Aodha
- 机构:Caltech (Beery) / University of Edinburgh (Mac Aodha) 等
- 链接:https://arxiv.org/abs/2607.01131
- 发表时间:2026 年 7 月 1 日
问题动机:为什么"金鱼"模式撑不住开放发现
我先把作者对现有工作的归类摆出来,省得后面方法部分再反复解释。
作者把所有自主发现系统塞进了一个 2×2 的坐标系: - 假设空间 ℋ:是只能测"边"(\(\mathcal{H}_{edge}\)),还是能写可执行代码(\(\mathcal{H}_{code}^{guided}\) / \(\mathcal{H}_{code}^{open}\)) - 先验信息 𝒫:是空(\(\emptyset\))、是部分(任务描述/种子假设),还是完整(明确的研究问题)
按照这个坐标系:
| 系统 | ℋ | 𝒫 | Reflect |
|---|---|---|---|
| PC / GES / NOTEARS | \(\mathcal{H}_{edge}\) | \(\emptyset\) | 无 |
| GPT-4 BFS | \(\mathcal{H}_{edge}\) | Full | 无 |
| AI Scientist | \(\mathcal{H}_{code}^{guided}\) | Full | 无 |
| AI Co-Scientist | \(\mathcal{H}_{code}^{guided}\) | Full | 无(多智能体辩论) |
| HeurekaBench | \(\mathcal{H}_{code}^{guided}\) | Full | 无 |
| ExperiGen | \(\mathcal{H}_{code}^{guided}\) | Partial | 短期记忆 |
| DiscoPER | \(\mathcal{H}_{code}^{open}\) | \(\emptyset\) | 显式 |
作者的核心论断是:真正"开放"的发现需要三件事同时满足——(i)从原始数据开始,没有预设问题;(ii)假设可以表达为可执行代码,不限于边;(iii)搜索方向要根据已有发现动态调整。现有系统至少缺一项。
这个判断对不对?我自己重读一遍觉得是站得住的。说几个具体的不爽点:
边空间的表达能力天花板。PC、NOTEARS 这些经典因果发现方法输出的本质是一个 DAG 的边集合。但真实科学发现里的 pattern 经常不是边——可能是"温度 × 物种 × 季节的三阶交互"(mediation chain),可能是"某物种在某个纬度的密度分布是双峰的"(cluster structure),可能需要从图像里读出"该物种生活在密闭林冠下"才能跟数据 join。\(\mathcal{H}_{edge}\) 装不下这些 pattern。
预设问题 vs 数据驱动。AI Co-Scientist、Robin 这类系统强是真的强——后者真在湿实验里发现了一个新治疗方案——但它们都是带着研究问题出发的。这意味着它们的"发现"在某种程度上是"确认"而不是"发现"。DiscoPER 想要做的是后者:没有预设问题,从数据里自己冒出来。
金鱼式循环。这一条是 DiscoPER 的主要发力点。ExperiGen 算最先进的同期工作,它的 memory 是"短期"的——只 conditioning 在上一对 (hypothesis, result) 上,但不对历史做结构化分析。DiscoPER 干的事其实就一件:把"短期记忆"升级成"显式反思"。
坦白讲,从工程角度这个升级看起来小,但实测收益相当能打。后面会看到 Reflect 关闭时,8/9 直接掉到 7/9,6/12 直接掉到 8/12——这是 0.5 到 0.7 个真模式的差距。
方法核心:把"发现"拆成三件可独立调的事
整体框架
先看一眼作者画的 teaser,思路一眼就清楚。

图 1:DiscoPER 整体框架。输入是图像+表格(iNaturalist 观察记录),中间跑 Propose–Evaluate–Reflect 循环 100 轮,右侧输出的"Validated Discoveries"是 claim store 里的最终结果。比如"Mammals 在开阔栖息地有更强的季节迁移"——这条 claim 的关键变量'栖息地类型'是从 VLM 读图像读出来的,不在元数据里。
最让我意外的是右侧那个"Validated Discoveries"卡片的精细度。绿色框里不只列了发现文本,还把 VLM 读出的视觉关键变量单独标出来("Key: habitat type from VLM, not metadata"),训练集和验证集上的 effect size/p-value 都摆出来。这不是糊弄的演示,是真的在演示"代码 + 留出验证"是怎么把幻觉挡在门外的。
具体到内部结构,论文 Figure 2 拆得更细。

图 2:三模块的内部数据流。注意 Propose 不只接收当前数据 X,还显式接收"上轮的 guidance"和"累计的 claim set"——这就是二阶推理的物化形态。Evaluate 强制 train/val 双 split,验证集上每条 hypothesis 只跑一次。Reflect 同时看被接受和被拒绝的 claim——被拒绝的 claim 同样是信息。
形式化
设数据集 \(\mathcal{X}\),先验 \(\mathcal{P}\)(默认 \(\emptyset\)),假设 \(h\) 是一个程序,输入 \(\mathcal{X}\) 输出判断 \(b \in \{\text{supported, rejected}\}\) 和证据 \(e\)。假设空间 \(\mathcal{H}\) 是所有这样的程序的集合,\(h \in \mathcal{H}\)。一个被 Eval 接受并加入 store 的假设叫 claim。
整个循环是:
公式本身不复杂,关键是看清楚谁依赖谁。Propose 依赖 guidance \(\mathcal{G}_{t-1}\)——这就是"反思影响下一步搜索"的物化形态。Reflect 依赖整个 claim 集合——它不是看上一条,是看全部。
Propose:代码即假设
Propose 模块拿到的是(i)数据的 schema + 列统计 + 样本行;(ii)当前的 claim 集合;(iii)当前的 guidance;(iv)可选的图像。输出 K 个结构化 hypothesis,每条包含自然语言描述 + 涉及的变量 + Python 代码。
注意一个工程细节:guidance 是"建议往哪走",不是"必须测什么"——它不强制 hypothesis 的具体形态。这避免了 guidance 把搜索锁死到某条路径上。
默认情况下 \(\mathcal{P} = \emptyset\)——系统不被告知任何研究目标。这是 DiscoPER 跟其他系统的根本差别。
Evaluate:双 split 验证 + 统计阈值
每条 hypothesis 的 Python 代码在训练 split 上跑一次得到 effect size δ_train 和 p_train;如果 δ ≥ 0.2 且 p ≤ 0.05,则再在验证 split 上跑一次得到 δ_val 和 p_val;最终接受条件是验证集也满足阈值,并且 \(|\delta_{val}| \geq 0.6 \cdot |\delta_{train}|\)(防过拟合检查)。
可用的统计工具 7 个:Spearman/Pearson 相关、Cliff's delta/Mann–Whitney 群组差异、随机森林预测 AUC、k-means + χ² 聚类富集、分层重测、视觉属性 VLM 分类、视觉群组差异比较。Effect size 阈值 0.2、p 阈值 0.05 都是经验值。
训练集上调代码、验证集上只跑一次——这是经典的p-hacking 防御。如果允许验证集上反复调,迟早能找到一个偶然显著的发现,搜出来就是幻觉。
Reflect:核心创新在这一段
这是论文的"灵魂"模块。每 5 轮跑一次(这是个超参,作者没在正文里做消融,但附录里可以看到)。Reflect 拿到 \(\mathcal{C}_t\)(已接受 claim)和 \(\hat{\mathcal{C}}_t\)(已拒绝 claim),让一个 LLM 生成结构化 guidance \(\mathcal{G}_t\)。
guidance 不是随便吐的——按论文描述,它至少包含三类东西:
- Gap detection:哪些变量/关系在 claim store 里覆盖率为 0。例:iter 5 反思发现"positional accuracy"在 3 次尝试中支持率都是 0%,于是建议放弃这个变量,转向 kingdom 级别的地理比较。
- Compound hypothesis generation:把多个已接受 claim 拼起来,生成高阶联合假设。例:iter 34 反思发现 Fungi 和 Plantae 已经被分开测过 latitude 和 longitude,于是建议测二者的 joint latitude × longitude 空间 niche 分离。
- Confound detection:发现某变量在多条已接受 claim 里都扮演 moderator 角色。例:iter 49 反思发现"hemisphere"在所有季节性 claim 里都是 moderator,于是建议在做任何季节性测试前先按 hemisphere 分层。
第一类是在找未探过的区域,第二类是在做归纳跳跃,第三类是在做混杂控制。这三件事其实对应了科学方法里"观察–归纳–控制变量"的三个基本动作——DiscoPER 算是把科学方法论显式地塞进了一个 LLM 循环里。
假设空间层级
作者画了一个包含关系:
\(\mathcal{H}_{edge}\) 的 size 是 \(O(d^2)\),\(d\) 是变量数;\(\mathcal{H}_{code}^{open}\) 的大小是图灵可计算统计测试的全集——后者对前者的包含是严格包含,因为前者能表达的边测试只是后者的一个小子集。
这条性质决定了 DiscoPER 在多变量交互、mediation chain、跨模态模式上原则上就比传统因果发现更强。后面会看到实验数据确实撑住了这一点。
iNatDisco:第一个真"开放发现"的生态学基准
这部分我得稍微多花点篇幅,因为基准的构造思路对理解整篇论文很关键。
现有基准的不足
作者列了一串现有基准:BioDSA、HeurekaBench、BLADE、DiscoveryBench。共同的毛病是——它们都给定了研究问题。Edge-recovery 类指标(SHD、edge F1)只能衡量"边对不对",不能衡量"是否发现了复杂的生态 pattern";QA 类基准告诉 agent 要找什么,跟"开放发现"的初衷就矛盾。
iNatDisco 的设计
数据源是 iNaturalist 的研究级公民科学观察记录。每条记录包含:图像、经纬度、定位精度、观察日期、物种名 + 分类层级。
两个子集: - iNatDisco-800:800 条观察,8 个物种,9 个真模式(来自同行评议文献) - iNatDisco-50K:5 万条观察,9776 个物种,12 个真模式
"真模式"是有明确文献出处的生态关系。比如: - 真菌秋季结果(Amanita muscaria 在 9–11 月集中观测,Boddy et al., 2014) - 帝王蝶北迁(Danaus plexippus 纬度 3–8 月北移,Brower, 1996) - 植物 vs 动物的物候偏移(植物 4–6 月峰,动物 5–8 月峰,Menzel et al., 2006) - 物种丰富度向赤道递增(Hillebrand, 2004)
这套 ground truth 设计的精妙之处在于:它们是定性的生态学关系,不是简单的统计 pattern;恢复它们需要 LLM 知道"秋季是几月到几月"(常识)+ 能在数据里做时空统计(代码能力)+ 知道这些 pattern 之间还会相互影响(元反思)。
反事实变体 iNatDisco-800-CF
这个设计我觉得是整篇论文最精巧的一笔。作者把 5 个真实生态关系人为反转——比如把"鸟类春季北迁"改成"鸟类无季节性纬度变化",把"真菌秋季结果"改成"真菌春季结果"——再让系统去发现。
这个变体解决的是"LLM 在背书常识"还是"LLM 真的在从数据里发现"的判别问题。如果一个系统跑反事实数据仍然报"鸟类春季北迁"——那就只是在复读训练数据里的常识。DiscoPER 在反事实上的表现如何?后面揭晓。
实验结果
主结果:8/9 模式恢复
直接看 Table 2。
| 数据集 | 方法 | 类型 | ℋ | Reflect | Recall | Support Rate |
|---|---|---|---|---|---|---|
| iNatDisco-800 | LLM+PC | 因果 | \(\mathcal{H}_{edge}\) | ✕ | 0/9 | – |
| iNatDisco-800 | LLM+NOTEARS | 因果 | \(\mathcal{H}_{edge}\) | ✕ | 0/9 | – |
| iNatDisco-800 | GPT-4 BFS | 因果 | \(\mathcal{H}_{edge}\) | ✕ | 1/9 | – |
| iNatDisco-800 | HeurekaBench | LLM | \(\mathcal{H}_{code}^{guided}\) | ✕ | 3/9 | 62.2%±6% |
| iNatDisco-800 | ExperiGen | LLM | \(\mathcal{H}_{code}^{guided}\) | ✓ | 3/9 | 56.6%±5% |
| iNatDisco-800 | DiscoPER w/o Reflect | LLM | \(\mathcal{H}_{code}^{open}\) | ✕ | 7/9 | 70.0%±2% |
| iNatDisco-800 | DiscoPER | LLM | \(\mathcal{H}_{code}^{open}\) | ✓ | 8/9 | 72.7%±3% |
| iNatDisco-50K | LLM+PC | 因果 | \(\mathcal{H}_{edge}\) | ✕ | 0/12 | – |
| iNatDisco-50K | LLM+NOTEARS | 因果 | \(\mathcal{H}_{edge}\) | ✕ | 1/12 | – |
| iNatDisco-50K | GPT-4 BFS | 因果 | \(\mathcal{H}_{edge}\) | ✕ | 1/12 | – |
| iNatDisco-50K | HeurekaBench | LLM | \(\mathcal{H}_{code}^{guided}\) | ✕ | 2/12 | 64.7%±4% |
| iNatDisco-50K | ExperiGen | LLM | \(\mathcal{H}_{code}^{guided}\) | ✓ | 3/12 | 67.8%±5% |
| iNatDisco-50K | DiscoPER w/o Reflect | LLM | \(\mathcal{H}_{code}^{open}\) | ✕ | 6/12 | 66.6%±3% |
| iNatDisco-50K | DiscoPER | LLM | \(\mathcal{H}_{code}^{open}\) | ✓ | 8/12 | 74.2%±3% |
读这张表我看到三件事:
第一,\(\mathcal{H}_{edge}\) 真的装不下。把 LLM 塞进 PC/NOTEARS 这种传统因果发现方法,结果是 0/9 或 1/9。哪怕有了 LLM 帮忙提变量,搜索空间的天花板就是"边"——你测不了"X 在 Y 季节的 Z 纬度密度分布"这种 pattern。
第二,\(\mathcal{H}_{code}^{open}\) 比 \(\mathcal{H}_{code}^{guided}\) 强。在 800 数据集上,DiscoPER w/o Reflect(开放空间 + 不反思)就拿到 7/9,已经比 HeurekaBench/ExperiGen(指导空间 + 反思/不反思)的 3/9 高出一倍多。空间大小是基础。
第三,Reflect 是真的有用。在 800 上从 7/9 涨到 8/9,在 50K 上从 6/12 涨到 8/12。50K 上少 1 个模式被找回,但 DiscoPER 找到了 6 个 w/o Reflect 错过的另外 2 个。Support rate 也都涨了 2–8 个点。
坦率讲,0.7 个模式的提升看起来不算大。但要想到这是新发现——意味着 DiscoPER 真的在 Reflect 的指导下走到了搜索空间里 w/o Reflect 没走到的地方。
缩放行为

图 3:缩放行为。(a) 数据越多,Recall 涨得越明显——这是"数据驱动的发现"的预期表现。Support Rate 也跟着涨,说明大数据集上假设的统计功效也更强。(b) 迭代越多,Recall 涨但 Support Rate 跌——典型长尾现象:早期假设容易成功,后期假设越来越 speculative,pass 率自然下降。
(a) 的曲线是单调上升的——800→2K 基本平,从 5K 开始 Recall 跳起来,到 50K 时 Recall 75%、Support Rate 72%。这说明 DiscoPER 是真的吃数据的,不是 LLM 背书——数据越多越能 ground 住。
(b) 的曲线是典型长尾:10 轮时 Support Rate 98%(基本稳赢),100 轮时跌到 70%(越来越难)。但 Recall 反过来涨:33% → 75%。这意味着 Reflect 在"难假设"上发挥了价值——把搜索从 easy region 拉到了 hard region。
反事实:发现是真的从数据里来的
这是我个人最喜欢的一组实验,因为它直接打到了"AI Scientist = 复读训练数据"这个最容易被质疑的点。

图 4:反事实评估。(a) 显示 DiscoPER 大部分假设是"基于 LLM 内部知识"的(红线远高于蓝线),但 Reflect 开启后数据驱动假设数翻倍多(3 → 7)。(b) 跑反事实数据集时,65/72 的"先验知识假设"被留出验证打回,5 条数据驱动的假设被验证为支持——而这 5 条全是反事实里的反转关系。
(a) 那张图很说明问题:随着迭代进行,"基于 LLM 内部知识"的假设占比越来越高(红线 27 条 vs 蓝线 7 条)。这其实是符合直觉的——LLM 在反复提出 hypothesis 的过程中会越来越倾向于从自己的 prior 知识里"想到"一些东西。但 Reflect 让数据驱动假设从 3 涨到 7,接近翻倍——这跟我前面说的"Reflect 把搜索从 easy region 拉回 hard region"是同一个故事。
(b) 是论文最硬核的一组数字:在反事实数据上,72 条假设被提出,其中 65 条"基于常识"的被留出验证打回(它们会去说"真菌秋季结果",但数据里真菌是春季结果),最终 5 条被支持——这 5 条全是反事实里的反转关系。这等于证明了 DiscoPER 不会瞎报常识,它会跟着数据走。
我自己做 AI for Science 相关项目的经验里,这种"系统能不能跟着数据走"的检验是最容易被忽略的——很多论文里报的漂亮数字,扣掉 LLM prior 之后其实没多少是真正从数据里"发现"的。DiscoPER 这套反事实设计是个非常好的范式,应该被后面所有 AI4Science 论文参考。
Reflect 的具体作用

图 5:Reflect 的具体作用。左图:无 Reflect 时 92% 的假设是"X 高于 Y"这种简单成对比较;有 Reflect 后降到 69%,且出现了 interaction(2%)、correlation(2%)、peak(14%)、visual/habitat(2%)这些更结构化的假设。右图是 Reflect 在 iter 5/14/34/49 输出的四类 guidance 例子——分别对应 gap detection、compound generation、confound detection。
左图是 DiscoPER 的"二阶推理"具体落到 hypothesis 形态上的物化形态。Reflect 不只是"提了更多假设"——它让假设类型从单调的"X vs Y"扩展到了"X×Z 联合分布""X 在 Y 时点峰""X 的视觉属性"。这个分布变化我觉得比 Recall 的 1 个模式差距更说明问题——它说明 Reflect 在改变系统的搜索结构,而不只是"搜得更勤奋"。
右图的几个具体例子是这种"二阶推理"的人味体现:
- iter 5 反思发现 "positional accuracy 测了 3 次都是 0%,建议放弃"——这是科学里的"放弃无效变量"决策;
- iter 14 反思发现 "Class-level taxonomic groups 在季节 timing 上还没测过"——这是缺口识别;
- iter 34 反思发现 "Fungi 和 Plantae 都被分开测过 lat/lon,建议测二者 joint 空间 niche"——这是归纳跳跃;
- iter 49 反思发现 "Hemisphere 在所有季节性 claim 里都当 moderator,建议先分层"——这是混杂控制。
这四件事其实就是科学方法论的四个基本动作。DiscoPER 把它们显式化了。
视觉能力:真的能从图像里读信息

图 6:多模态发现。两条 claim 的关键变量(habitat type、vegetation density)都不在元数据里,纯粹是 VLM 读图像读出来的。统计工具用的是 group_diff_test + longitude/latitude 元数据,effect size 0.57–0.64 都过阈值,文献也有对应支持。
这两个 case 是我看完整篇论文最让我信服的"它真的在做发现"的证据。Habitat type 和 vegetation density 这两个变量在 iNaturalist 的原始元数据里根本不存在——它们是 VLM 读图像读出来的标签。DiscoPER 用这些 VLM 标签 + longitude/latitude 元数据,跑出统计上显著的 pattern,且跟生态学文献(Cooper and Purvis 2010 / Tedersoo et al. 2014)一致。
这就是 \(\mathcal{H}_{code}^{open}\) 真正发挥威力的地方——它能"看到"传统方法看不到的变量。
基础 LLM 消融
| 基础 LLM | Support Rate | Recall |
|---|---|---|
| Claude Sonnet 4.5 | 72.7% | 8/9 |
| Claude Opus 4.6 | 76.5% | 4/9 |
| GPT-5.4 | 70.1% | 3/9 |
| DeepSeek V4 Pro† | 65.2% | 2/9 |
† 无 vision,文本 only。
一个反直觉的发现:Opus 4.6 的 Support Rate(76.5%)比 Sonnet 4.5(72.7%)还高,但 Recall 只有 4/9 vs 8/9。作者的解释是 Opus 更保守——它只敢提有把握的假设,所以 pass 率高,但搜索覆盖度低。这是个典型的"explore vs exploit"权衡在模型选择上的体现。
GPT-5.4 和 DeepSeek V4 Pro(文本 only)明显掉队——3/9 和 2/9。这个差距提示了视觉通道对发现能力的不可替代性。
可控性消融
| Setting | Default | Prior Know. | Guided |
|---|---|---|---|
| Support Rate | 72.7% | 45.5% | 36.7% |
| Recall | 8/9 | 7/9 | 6/9 |
| Topic adherence | N/A | 54% | 68% |
让用户给"已知事实"或"研究方向"作为 prior,Topic adherence 从 N/A 涨到 54% / 68%——DiscoPER 真的能被引导。但 Support Rate 和 Recall 同时下降——给它先验反而让它的假设变得更窄、更浅。这个 trade-off 我觉得是开放发现系统都该警惕的:prior 帮你聚焦,但也会绑架你的搜索方向。
经典因果基准的意外胜利
论文把 DiscoPER 拿到 SACHS 和 ASIA 这两个经典因果基准上跑,结果:
| 方法 | SACHS F1 | ASIA F1 |
|---|---|---|
| DiscoPER | 0.83 | 0.86 |
| DiscoPER (no Reflect) | 0.72 | 0.80 |
| PC | 0.48 | 0.77 |
| GES | 0.42 | 0.73 |
| NOTEARS | 0.36 | 0.68 |
| DAG-GNN | 0.33 | 0.65 |
| GOLEM | 0.38 | 0.69 |
| GPT-4 BFS | 0.74 | 0.93 |
SACHS 上的 0.83 把传统方法的 0.33–0.48 拉开了 0.35–0.5 个点,这是个很大的提升。更意外的是,去掉 Reflect 后从 0.83 掉到 0.72——说明 Reflect 在经典因果基准上也有用。
但我得稍微质疑一下这个比较的公平性:传统方法只输出一个 DAG,DiscoPER 输出的是经过 LLM 翻译的边集合。在"边 F1"这个 metric 上拿 LLM 跟传统方法比,有点像用大语言模型去刷问答榜——它表达力强,但它同时也被 LLM 自身的错误污染了。0.83 这个数字的"真"含金量需要更多 ablation 才能验证(比如加一个"只用 LLM 提变量、传统 NOTEARS 来发现边"的对照组)。但这个细节不影响主结论。
合成视觉基准:暴露了多模态发现的瓶颈
合成数据集(5000 张程序生成的图像,8 个真模式,3 类:metadata-only / vision-only / cross-modal)的结果:
| 迭代 | 方法 | 类型 | Support Rate | Recall |
|---|---|---|---|---|
| – | HeurekaBench | All | 34.5% | 0/8 |
| – | ExperiGen | All | 41.1% | 1/8 |
| 100 | Ours | All | 54.2% | 3/8 |
| 100 | Ours | Metadata | – | 2/2 |
| 100 | Ours | Vision | – | 1/3 |
| 100 | Ours | Cross-Modal | – | 0/3 |
跨模态模式 0/3——这个数字是论文里最让我皱眉的一项。作者也承认了原因:"the agent often proposes correct visual hypotheses ... but the current vision tool pipeline lacks the statistical power to validate them on held-out data, as individual image classification followed by a chi-squared test introduces substantial noise."
翻译成大白话:问题不在假设生成,在验证。VLM 把图像分成"红色"和"非红色",然后跟季节做 χ² 检验——但 VLM 分类本身有噪声,5000 张图分下来信号被稀释了。
这其实指出了多模态自主发现的下一个关键瓶颈:如何把 VLM 输出的视觉特征稳定地工程化成可以反复测试的数值特征。一种思路是让 VLM 输出的同时给出 uncertainty;另一种是用 VLM embeddings 替代离散分类。这个问题没解决,DiscoPER 在更野生的多模态数据上就会掉链子。
计算开销
附录里作者也算了一笔账:
- 总共跑 ~86 个 run
- ~8250 次 LLM API call
- 输入 token 33M,输出 token 8M
- 总成本(按 Sonnet 定价)~220 美元
- 端到端 wall-clock ~72 小时
每轮 3 次 LLM call(Propose + experiment planning + Reflect 每 5 轮)。50 轮 30–60 分钟,100 轮 1–2 小时。
这个成本对学术研究完全可以接受,对工业部署还有压力。如果要做成"持续在线运行"的发现系统,220 美元一次的实验成本还偏高。但作为论文研究的标准,已经是合理范围了。
我的判断
亮点
-
二阶推理的形式化是真的漂亮。Reflect 不是花拳绣腿,guidance 的三类输出(gap / compound / confound)正好对应科学方法论的三个基本动作。作者不是硬塞一个 reflection prompt,而是把它做成了一个有明确输入输出语义的模块。这给后面所有想做"长期记忆+反思"的 Agent 系统立了一个范式。
-
统一坐标系(ℋ × 𝒫 × Reflect) 是这篇论文另一个真正有持久价值的贡献。它把 AI Scientist、AI Co-Scientist、Robin、HeurekaBench、ExperiGen、NOTEARS、PC 这些看起来八竿子打不着的系统塞进了同一个框架,并说清楚每个系统的能力边界在哪。这种工作对领域的发展比单纯刷一个 SOTA 更有意义。
-
反事实评估是范式级别的方法论创新。iNatDisco-800-CF 这一招应该被所有 AI4Science 论文效仿。能在反常识数据上仍然报告"数据告诉我的事实"——这才是"发现"和"回忆"的根本区别。
-
图像 VLM + 元数据联合推理 的 case study 让我相信 \(\mathcal{H}_{code}^{open}\) 确实能撑住"从图像里读出新变量再去做统计"这件事。DiscoPER 在 iNatDisco 上找 habitat type 的那个 case 是真的漂亮。
我觉得有疑问的地方
-
多模态验证瓶颈没解决。合成视觉基准 0/3 的跨模态 Recall 暴露了"假设生成 OK、验证失败"的问题。在真实、更杂乱的数据上,DiscoPER 的视觉能力是不是真的稳——目前看不出来。
-
LLM 选型对结果影响巨大。Sonnet 4.5 跟 GPT-5.4 差了 5 个真模式(8/9 vs 3/9),这不是小波动。这意味着 DiscoPER 的"发现能力"高度依赖底座模型。如果底座模型换了,结果可能完全不可复现。这对"开放发现系统"这个愿景是个挑战——它到底是个系统,还是个用某个特定 LLM 才能 work 的实验?
-
8/9 跟 7/9 之间的差距只来自 Reflect——这个 ablate 不够有说服力。要更强的证据是看 Reflect 输出的 guidance 跟实际 trajectory 之间的因果链——比如某个 Reflect 输出的 gap detection 是否真的把假设空间拉到了对应区域。论文只给了 4 个具体 example(iter 5/14/34/49),缺全 run 的 guidance-trail 分析。
-
支持率 72.7% 这个数字容易被误读。这个数字是"被提出的假设中过留出验证的比例",但 DiscoPER 提了 100 条假设里只有 ~25 条进 claim store,其他 75 条都失败了。支持率高≠发现能力强——它可能只是"模型提的少+提的准"。论文应该报"每条真模式平均需要提多少条假设"这种更细的效率 metric。
-
没有真的"开放"。iNatDisco 用的是 iNaturalist 这种已经被研究透了的数据集,且 ground truth 全是同行评议过的成熟生态 pattern。LLM 的训练集大概率见过这些 paper。说"开放发现"是有点夸的——更准确的说法是"在没有显式研究问题的前提下,在已知数据集上恢复已知 pattern"。真正的开放发现应该用 LLM 训练截止后产生的新数据。但这个批评可能过苛——目前所有 AI4Science 系统都在用这种半开放数据。
工程启发
如果你也在做类似系统,DiscoPER 给我最直接的启发有三条:
- 不要让你的 LLM 循环做金鱼。把"已发现的 claim"和"已失败的 claim"都结构化地存起来,周期性让一个独立的 LLM 做反思——成本极低(每 5 轮一次),收益明确(+1 个真模式)。
- 限制 hypothesis 的表达力是天花板。让假设是 Python 代码而不是结构化模板,是从"边"到"模式"的关键升级。
- 一定要做反事实评估。在 AI4Science 领域,"系统能不能跟着数据走"是核心 credibility,iNatDisco-800-CF 的范式值得抄。
收尾
DiscoPER 让我重新审视了一个老问题:Agent 的"反思"应该是什么形态?
我之前看到的"反思"大多是 ReAct 那种——在某一步失败后,回溯一步重试。这是个微观尺度的反思。DiscoPER 把反思拉到了整个发现历史的尺度——它不反思"我刚刚这一步做得对不对",它反思"我到现在为止做了什么、还没做什么、哪些事之间有被我忽略的连接"。
这个升维看起来轻巧,但意义是结构性的。当 Agent 真的开始对自己的认知地图做元级推理,它就从"执行者"变成了"研究者"。
当然,这篇论文离真正的"AI scientist 能独立做科研"还差得很远。视觉验证的瓶颈、底座模型的依赖、真"开放"数据集的缺乏——这些都不是 DiscoPER 一篇论文能解决的。但它给整个领域立了一块新坐标——以后谈"自主发现系统",大概率绕不开 Propose–Evaluate–Reflect 这条主线。
最后留一个我没想明白的问题:DiscoPER 的 Reflect 是显式调用的,每 5 轮一次。如果让 Agent 自己判断什么时候需要反思——这算不算下一阶的"元元反思"?做到极致会不会变成"我意识到我可能正在 LLM prior 上反复横跳,所以主动要求一个 reflection"?这个方向我觉得值得一篇文章。
觉得有启发的话,欢迎点赞、在看、转发。跟进最新 AI 前沿,关注我。