第 31 课:假设、规划与搜索

上一课我们把"新想法"从文献里筛了出来,并证明它真的新。可想法有了,怎么把它变成能跑的东西?这一课回答"在巨大的可能性空间里怎么搜":先算清 搜索空间 有多大,再理解"多试几次"为什么有用却没那么有用,然后把孤立尝试升级成一棵会累积证据的 假设树,用期望增益决定砍哪条枝、用"薄控制、厚状态"决定谁来下命令——最后用一个有争议的实测问题收口:这套多智能体编排,到底值不值。

🎯 学完这 6 步你将能够:
① 用 b^d 估算搜索空间,并解释"多试几次"的真实收益(以及它为什么低于独立假设的上限)
② 说清假设树精化(HTR)与 best-so-far 怎么把孤立尝试变成累积过程
③ 用期望增益判断该不该砍掉一个方向,并用"薄控制、厚状态"解释谁定"下一步做什么"
④ 用实验证据(而不是直觉)判断多智能体编排在什么条件下才值得
🗺 本节推理链(6 步逻辑递进:从"空间有多大"到"这套编排值不值")
1要把一个研究想法变成能跑的方案,这就要求先承认一件事:每一步都有好几个选择,可能性是连乘出来的——b 个分支走 d 层就是 b^d 条路径,b=5、d=4 时是 625 条,穷举不动,一条条试要烧掉海量 tokens。空间大得穷举不动。
↓
2既然「空间大得穷举不动」,所以不能只赌一次——这就要求多试几次,把单次 16.9% 的命中率抬到 8 次 34.1%;可这提升远小于独立假设的 77.3%,说明几次试探高度相关、共享同一套错误(而且每次都要烧 tokens)。多试几次收益有限。
↓
3既然「多试几次收益有限」,因此零散重试还不够——这就要求把每次得到的证据留下来,用一棵 假设树 累积假设、工件、证据与洞见,把长历史移出 context、写进持久结构;Arbor 靠它把六项任务的 held-out 增益做到 Codex/Claude Code 的 2.5 倍以上。要用累积的树而非孤立尝试。
↓
4既然「要用累积的树而非孤立尝试」,那么树会长出许多条枝——这就要求判断哪条枝该砍:只看"再走一步"的期望增益(成功概率 × 收益 − 成本),而不是看已经投入多少,把省下的 tokens 转给高期望的枝。按期望增益砍枝。
↓
5既然「按期望增益砍枝」,那么同时管好几条枝就会撑爆一个脑子——这就要求把控制与状态分开:一个长驻协调器管策略,N 个短命执行器在隔离的 worktree 里跑实验,让厚状态落在 context 之外。控制薄、状态厚。
↓
6既然「控制薄、状态厚」,那么下一个问题就是这套编排到底值不值——这就要求用实验而非直觉判断:同样的 tokens 预算、同样的模型下,单 Agent + 好编码环境能追平多智能体;换个条件,多智能体又领先。编排值不值要看实验。
搜索空间 b^d假设树精化 HTRbest-so-far弱方向拒绝薄控制、厚状态多智能体编排
1
想法已经有了,怎么在巨大的可能性里把它搜出来?
提示:先别急着定策略——把「要做几步、每步几个选择」连乘起来,看看空间到底多大。
▾
知识背景
AIDE(Jiang 等,Weco AI,arXiv:2502.13138,2025)把"机器学习工程"建模为代码空间里的树搜索:不是一次生成就定稿,而是反复改写候选方案、保留高分者。它评测用的底座是 MLE-bench(Chan 等,OpenAI,arXiv:2410.07095,2024;ICLR 2025),75 个真实 Kaggle 竞赛。"搜索"在这里不是形容词,而是一个能被算出来的量。

上一课我们把"新想法"从文献里筛出来、并证明它真的新。可想法有了,下一步是怎么把它变成能跑的东西——怎么在巨大的可能性里把它搜出来?

因为一个研究方案不是一次写完的:选方法、选超参、选特征、选数据切分,每一步都有好几个选项,路线数是这些选项连乘出来的。就像在原始森林里找路:每走一段多一个岔口,可走的路线数随深度指数增长。省下来的 tokens(词元,模型计费与容量的最小单位)就是你能用来试探的"体力"。所以先算空间,再谈策略。

🧮 第一笔账:搜索空间到底有多大
Step 1:把空间写成 b^d
符号含义取值
b每层可选的方案数(分支)5
d要做几步决策(深度)4
b^d完整路径数5⁴ = 625 条
算术:5⁴=625。把每个岔口的 5 个选择连乘 4 层,就是"穷举"要面对的规模——这个数会随深度指数增长。
Step 2:每多一层,路径数 ×5
深度 d路径数 5^d
15
225
3125
4625
算术:5²=25、5³=125、5⁴=625——每加一层就乘 5,空间是指数增长的,不是线性。这就是"一条路走到黑"注定低效的原因:它在 625 条路里只走了一条。
Step 3:真实系统怎么在空间里搜
做法机制
AIDE 的树搜索复用高分候选、反复精化,而不是一次性生成
best-so-far当前最好结果,每轮实验后更新
实测(AiScientist,arXiv:2604.13018)74 轮实验 / 18 次 best-so-far(无人干预)
算术:18÷74≈24%——74 轮实验里只发生了 18 次 best-so-far 更新(占 24%),其余尝试没有超过当时最好。这说明大部分试错是"没超过",但它们的记录不该被丢掉,否则下一轮还会重复踩坑。怎么留住?看下一张卡片。
🎯 关键认知

搜索的第一步是把空间量出来:路线数 = 分支数^深度。有这一步,才知道该不该穷举、该并行几条、预算够不够;没有这一步就直接开搜,等于把有限预算扔进一个注定爆炸的空间里。

AI 助教
👋 对"搜索空间"有疑问?比如「b 和 d 怎么估」「为什么是指数增长」?

说清你的任务,我帮你把空间算出来。
2
「多试几次」到底能带来多大提升?为什么它远低于独立假设的上限?
提示:先看单次和 8 次的实测差多少,再想如果每次都是独立的,本该差多少。
▾
知识背景
MLE-bench(Chan 等,arXiv:2410.07095)报告:o1-preview + AIDE 的奖牌率从 pass@1 的 16.9% 升到 pass@8 的 34.1%(约翻倍);把 GPT-4o 的单次时间从 24 小时放宽到 100 小时,奖牌率从 8.7% 升到 11.8%。这里的 pass@k(k 次里只要有 1 次成功就算过)衡量的是"能力上限",不是稳定性(稳定性见第 28 课)。

上一张卡片算出空间有 625 条路径——那就多试几次。为什么"多试几次"的收益远低于独立假设的上限?

因为每一次尝试都带着一点点成功概率,次数越多,"至少命中一次"的机会越大:这正是 pass@k 的直觉。就像买彩票,单张几乎不中,多买几张至少中一张的概率一定上升。所以真实系统普遍靠多次采样提分。但注意——每次试探都要付 tokens,而且这些试探未必相互独立。

🧮 第二笔账:多试几次的真实收益
Step 1:实测 pass@1 与 pass@8
指标奖牌率
pass@1(试 1 次)16.9%
pass@8(试 8 次取最好)34.1%
倍数34.1÷16.9 ≈ 2.02×
算术:34.1÷16.9≈2.02,约翻倍——这是 MLE-bench 论文的实测读数,来源 arXiv:2410.07095。
Step 2:如果每次独立,本该是多少
项数值
单次成功 p0.169
8 次全不中0.831⁸ ≈ 0.227
至少中一次1 − 0.831⁸ ≈ 0.773(77.3%)
算术:若 8 次相互独立,至少一次成功应为 1−(1−0.169)⁸≈77.3%。这是按"8 次互不相关"算出的直觉上限(其口径与 pass@8 的估计器并不完全一致,仅作方向性对比)。
Step 3:实测与上限差在哪
项数值
独立假设上限约 77.3%
实测 pass@834.1%
差距77.3 − 34.1 ≈ 43.2 ≈ 43 个百分点
算术:实测 34.1% 远低于该直觉上限 77.3%——说明几次尝试高度相关,反复犯同一类错。所以"多试几次"有用,但绝不能按独立上限估它的收益;要真正提升,得让每次尝试学到点新东西。这正好把问题推给下一张卡片。
🎯 关键认知

有"多次采样"这一步,分数会从 16.9% 抬到 34.1%;但没有"让每次试探相互独立、各学一点"这一步,收益就被相关性锁死——远远够不到独立上限 77.3%。次数能买到的,只是误差,不是新知。

AI 助教
👋 对 pass@k 有疑问?比如「k 取多少」「为什么实测远低于独立上限」?

说清你的场景,我帮你估采样收益。
3
树搜索比一条路走到黑强在哪?
提示:别只看"试了几次",看它有没有把每次得到的证据留下来、传下去。
▾
知识背景
假设树精化(Hypothesis Tree Refinement,HTR):Arbor(Jin 等,人民大学 & 微软,arXiv:2606.11926,2026)把假设、工件、证据与洞见挂在同一棵持久树上,跨时间彼此关联;一条枝上得到的教训会传播到其它枝。实测:MLE-Bench Lite 上 86.36% Any Medal(GPT-5.5),六项真实任务的 held-out 增益超过 Codex 与 Claude Code 的 2.5 倍。

上一张卡片说多试几次有用,但收益被相关性锁住。树搜索比一条路走到黑强在哪?

因为孤立重试每次都从零开始,失败的经验随手丢掉;而树把"哪条假设、配哪个工件、得到什么证据"挂在节点上,一条枝的教训能传给另一条枝。就像做菜时把每次调味的结论记在同一个本子上,下次只改一处,而不是整锅重做。当 context(上下文,模型一次能看到的全部 token)装不下几百轮历史时,就把这棵树落到外部持久结构里,按需读取。

🧮 第三笔账:证据累积带来的增益
Step 1:链式重试 vs 树式累积
结构状态怎么放教训能否传播
链式(孤立重试)每次从零开始不能
树式(HTR)假设/工件/证据/洞见挂节点能,跨枝传播
算术无关的一条:链式与树式的差别不在"试几次",而在证据是否累积——树让"没超过"的记录也变成可复用的资产。
Step 2:实测增益(BrowseComp 搜索 Agent 优化)
项held-out 准确率
基线45.33%
Arbor 优化后67.67%
提升67.67 − 45.33 = 22.34 个点(≈1.49×)
算术:67.67−45.33=22.34 个百分点;67.67÷45.33≈1.49。来源 arXiv:2606.11926。
Step 3:六项真实任务的总账
项结果
任务数6 项(模型训练 / harness 工程 / 数据合成)
对比对象Codex 与 Claude Code(同接口、同预算)
平均相对 held-out 增益Arbor >2.5×
算术:2.5× 是论文给出的下界(原文为"more than 2.5×")。同样的模型、同样的资源,多出来的只是"把证据累积成树"这一件结构——这就是树搜索的价值。
🎯 关键认知

有假设树,一条枝的教训能传给另一条枝、搜索边界持续精化;没有它,链式重试反复犯同一个错,预算全烧在重复试错上。树搜索真正强的不是"多试",而是让每次尝试都成为下一次的起点。

AI 助教
👋 对假设树有疑问?比如「树上的节点存什么」「为什么能提升 held-out」?

说清你想解决的问题,我帮你设计这棵树。
4
什么时候该把一个方向砍掉?
提示:把"已经花掉"和"再走一步要花"分开看,哪个才该出现在决定里?
▾
知识背景
弱方向拒绝(weak-direction rejection):研究里大量候选方向一开始就该被砍掉,判据不是"已经投入了多少",而是期望增益 = 成功概率 × 成功收益 − 成本。Arbor 的协调器正是按"证据是否支持继续"来精化搜索边界、拒绝弱方向。

上一张卡片让假设树越长越大,但枝不能无限长。什么时候该把一个方向砍掉?

因为资源有限,把算力压在低期望的枝上,就等于从高期望的枝挪走。判断只看"再走一步"的未来账,不看沉没成本。就像等一班总误点的公交:已经等了 20 分钟不是继续等的理由,要看"下一班还有多久"。省下的 tokens 应该转给更可能出结果的方向。

🧮 第四笔账:期望增益怎么算(示意)
Step 1:把"值不值得再走一步"写成一个式子
符号含义取值(示意)
p这一步成功的概率见 Step 2
G成功带来的增益10
C这一步的成本1
期望增益p×G − C>0 才继续
示意:p、G、C 的取值为便于演示而设定,非论文读数(示意,需人工核实)。公式本身的含义是"这一步的预期净收益"。
Step 2:两个候选方向,谁该砍
方向成功概率 p期望增益 = p×10−1决定
A0.20.2×10−1 = 1.0继续
B0.050.05×10−1 = −0.5砍掉
算术:0.2×10−1=1.0>0,方向 A 继续;0.05×10−1=−0.5<0,方向 B 该砍。判据只看未来账。
Step 3:沉没成本为什么不算
项数值是否进入判断
已经投入 S100否
未来净收益p×G − C是
继续的门槛期望增益 > 0—
算术:若把已投入的 100 也算进去,就会得出"继续才不浪费"的错误结论——已花掉的钱收不回来,只有未来账算数。
🎯 关键认知

有"按期望增益砍枝"这一步,资源会集中到高期望的方向;没有它、改用"看沉没成本"决策,低期望的枝会把整条预算拖死。砍方向不是认输,是把资源换到更可能出结果的地方。

AI 助教
👋 对该砍哪个方向有疑问?比如「p 怎么估」「阈值定多少」?

说清你的任务与预算,我帮你把期望账算出来。
5
谁来定「下一步做什么」?
提示:想清楚"策略"和"执行"要不要由同一个脑子同时扛——它记住了所有细节,还转得动吗?
▾
知识背景
thin control over thick state(薄控制、厚状态):AiScientist(Chen 等,arXiv:2604.13018,2026)让轻量协调器只读一份紧凑的项目地图,把代码、日志、实验记录这些"厚状态"落到 File-as-Bus(把共享文件夹当作通信总线)工作区,按需读取。Arbor 同样采用长驻协调器 + 短命执行器的结构,执行器在隔离的 worktree(独立工作树)里实现并验证单个假设。

上一张卡片砍完枝,还剩几条要同时推进。谁来定"下一步做什么"?

因为如果同一个 Agent 既记住所有细节又做决策,context 会被几百轮历史撑爆、注意力被稀释;把控制与状态分开,协调器只读摘要就能决策,细节留在文件里按需读取。就像总指挥只翻地图和战报,具体战斗交给各小队——他不需要记住每个士兵的弹匣余量。

🧮 第五笔账:控制与状态怎么分工
Step 1:两种架构,差别在"状态放哪"
架构谁决策状态放哪风险
单脑全包同一个 Agent全塞 context上下文爆、策略漂移
薄控制、厚状态长驻协调器厚状态落文件需维护文件接口
算术无关的一条分工:控制薄(协调器只读地图)、状态厚(细节落到文件)。
Step 2:角色配比(示意)
角色数量职责
协调器1管全局策略、精化搜索边界
执行器N = 8每个在一个假设上跑实验
隔离工作树8一个假设一个 worktree,互不踩
合计角色1 + 8 = 9控制 1、执行 8
算术:1+8=9 个角色,8 个执行器各占一个隔离 worktree。N=8 为示意取值,需人工核实。
Step 3:上下文负债对比(示意)
方案协调器每次要装什么随步数的变化
单脑全包全部历史线性膨胀
薄控制地图 + 摘要保持紧凑
执行器只装当前假设每次重新初始化
示意:把厚状态外置后,协调器的 context 不再随总步数线性膨胀——这是长时程能连续跑下去的前提(第 32 课展开)。
🎯 关键认知

有"薄控制、厚状态"这一步,协调器的上下文保持稳定、多个执行器并行也不互相污染;没有它、让一个脑子全包,上下文很快爆掉、策略越跑越漂。长时程的关键不是记性更好,而是"该记的记在文件里,该决策的只读地图"。

AI 助教
👋 对协调器/执行器分工有疑问?比如「协调器该读什么」「worktree 怎么隔离」?

说清你的任务规模,我帮你划角色。
6
多智能体编排到底有没有用?
提示:这个问题现在有争议——先看两边各自在什么条件下做的实验,再下结论。
▾
知识背景
2026 年 9 月的一篇论文(Brilliantov 等,EPFL & Apple,arXiv:2609.40303,2026-09-30)在相同时间预算、相同前沿模型下,把"最小编码 Agent 单会话(Malena)"和四个开源 SOTA harness(harness = 套在模型外面、负责编排/执行/评分的框架)对比,发现前者不被后者超过,并称"编码 Agent 环境"是最大的单项效应。另一条线上,Agensh(Zhan 等,微软,arXiv:2609.26781,2026-09)把多智能体扩到 1,024 个,任务通过率明显上升。两边都能复现——争议的根源是条件不同。

上一张卡片用协调器 + 执行器把多个角色组织起来。但这套编排到底有没有用?

因为"多智能体更好"和"单 Agent 就够"两派都能拿出可复现的实验,所以不能靠直觉站队,要先看在什么条件下做的实验。就像问"团队协作有没有用":三个人干一件小事可能不如一个人利索,但一件要几天的大工程,分工就赢了。

🧮 第六笔账:把两边的数字摆在一起
Step 1:条件 A —— 强模型 + 好编码环境 + 同预算
项内容
代表方案单会话最小编码 Agent(Malena)
对手四个开源 SOTA harness(多智能体/复杂编排)
结论前者不被超过;编码环境是最大单项效应
其余 harness 干预无统计显著增益
算术无关的一条:在该论文的条件下(强 backbone、相同时间预算),"给模型一个能读写文件、执行代码的环境"是最大效应,其余编排层无统计显著增益。来源 arXiv:2609.40303。
Step 2:条件 B —— 需要并行与更多智能体
实验(Agensh,arXiv:2609.26781)配置结果
5 个最难 ProgramBench 任务1 → 128 个 agent19.31% → 28.78%
相对提升(28.78−19.31)÷19.31≈ 49%
pandoc 任务1 → 1,024 个 agent33.89% → 55.06%
相对提升55.06÷33.89 − 1≈ 62%
算术:(28.78−19.31)÷19.31≈0.49,即 +49%;55.06÷33.89≈1.62,即 +62%。这是多智能体领先的一面。
Step 3:判决 —— 没有普遍答案,答案是条件函数
条件谁追平 / 领先依据
强 backbone + 好编码环境 + 相同 tokens 预算单 Agent 能追平多智能体arXiv:2609.40303
backbone 较弱需工作流先验,或任务需高并发与上下文隔离多智能体领先arXiv:2609.26781
算术无关的一条判决:同预算下把"模型能力"提上去,编排的边际收益会变小;反过来,当任务必须并行、必须把不同上下文隔开时,多智能体(多角色协调,coordination)才会拉开差距。所以该问的不是"多智能体有没有用",而是"在我的条件下有没有用"。
🎯 冲突对照:两种条件,两个结论

有 X(强 backbone + 一个能读写文件、执行代码的编码环境 + 相同 tokens 预算)→ 单 Agent 能追平甚至超过多智能体编排;没有 X(backbone 较弱、需要工作流先验,或任务要求高并发与上下文隔离)→ 多智能体明显领先。两边的实验都可复现,差别只在条件——用实验定,不用直觉定。

AI 助教
👋 对"多智能体值不值"有疑问?比如「我的场景该上几个」「怎么控制变量做对比」?

说清你的任务与预算,我帮你设计对照实验。