假设、规划与搜索
第 31 课:假设、规划与搜索
上一课我们把"新想法"从文献里筛了出来,并证明它真的新。可想法有了,怎么把它变成能跑的东西?这一课回答"在巨大的可能性空间里怎么搜":先算清 搜索空间 有多大,再理解"多试几次"为什么有用却没那么有用,然后把孤立尝试升级成一棵会累积证据的 假设树,用期望增益决定砍哪条枝、用"薄控制、厚状态"决定谁来下命令——最后用一个有争议的实测问题收口:这套多智能体编排,到底值不值。
② 说清假设树精化(HTR)与 best-so-far 怎么把孤立尝试变成累积过程
③ 用期望增益判断该不该砍掉一个方向,并用"薄控制、厚状态"解释谁定"下一步做什么"
④ 用实验证据(而不是直觉)判断多智能体编排在什么条件下才值得
上一课我们把"新想法"从文献里筛出来、并证明它真的新。可想法有了,下一步是怎么把它变成能跑的东西——怎么在巨大的可能性里把它搜出来?
因为一个研究方案不是一次写完的:选方法、选超参、选特征、选数据切分,每一步都有好几个选项,路线数是这些选项连乘出来的。就像在原始森林里找路:每走一段多一个岔口,可走的路线数随深度指数增长。省下来的 tokens(词元,模型计费与容量的最小单位)就是你能用来试探的"体力"。所以先算空间,再谈策略。
| 符号 | 含义 | 取值 |
|---|---|---|
| b | 每层可选的方案数(分支) | 5 |
| d | 要做几步决策(深度) | 4 |
| b^d | 完整路径数 | 5⁴ = 625 条 |
| 深度 d | 路径数 5^d |
|---|---|
| 1 | 5 |
| 2 | 25 |
| 3 | 125 |
| 4 | 625 |
| 做法 | 机制 |
|---|---|
| AIDE 的树搜索 | 复用高分候选、反复精化,而不是一次性生成 |
| best-so-far | 当前最好结果,每轮实验后更新 |
| 实测(AiScientist,arXiv:2604.13018) | 74 轮实验 / 18 次 best-so-far(无人干预) |
搜索的第一步是把空间量出来:路线数 = 分支数^深度。有这一步,才知道该不该穷举、该并行几条、预算够不够;没有这一步就直接开搜,等于把有限预算扔进一个注定爆炸的空间里。
上一张卡片算出空间有 625 条路径——那就多试几次。为什么"多试几次"的收益远低于独立假设的上限?
因为每一次尝试都带着一点点成功概率,次数越多,"至少命中一次"的机会越大:这正是 pass@k 的直觉。就像买彩票,单张几乎不中,多买几张至少中一张的概率一定上升。所以真实系统普遍靠多次采样提分。但注意——每次试探都要付 tokens,而且这些试探未必相互独立。
| 指标 | 奖牌率 |
|---|---|
| pass@1(试 1 次) | 16.9% |
| pass@8(试 8 次取最好) | 34.1% |
| 倍数 | 34.1÷16.9 ≈ 2.02× |
| 项 | 数值 |
|---|---|
| 单次成功 p | 0.169 |
| 8 次全不中 | 0.831⁸ ≈ 0.227 |
| 至少中一次 | 1 − 0.831⁸ ≈ 0.773(77.3%) |
| 项 | 数值 |
|---|---|
| 独立假设上限 | 约 77.3% |
| 实测 pass@8 | 34.1% |
| 差距 | 77.3 − 34.1 ≈ 43.2 ≈ 43 个百分点 |
有"多次采样"这一步,分数会从 16.9% 抬到 34.1%;但没有"让每次试探相互独立、各学一点"这一步,收益就被相关性锁死——远远够不到独立上限 77.3%。次数能买到的,只是误差,不是新知。
上一张卡片说多试几次有用,但收益被相关性锁住。树搜索比一条路走到黑强在哪?
因为孤立重试每次都从零开始,失败的经验随手丢掉;而树把"哪条假设、配哪个工件、得到什么证据"挂在节点上,一条枝的教训能传给另一条枝。就像做菜时把每次调味的结论记在同一个本子上,下次只改一处,而不是整锅重做。当 context(上下文,模型一次能看到的全部 token)装不下几百轮历史时,就把这棵树落到外部持久结构里,按需读取。
| 结构 | 状态怎么放 | 教训能否传播 |
|---|---|---|
| 链式(孤立重试) | 每次从零开始 | 不能 |
| 树式(HTR) | 假设/工件/证据/洞见挂节点 | 能,跨枝传播 |
| 项 | held-out 准确率 |
|---|---|
| 基线 | 45.33% |
| Arbor 优化后 | 67.67% |
| 提升 | 67.67 − 45.33 = 22.34 个点(≈1.49×) |
| 项 | 结果 |
|---|---|
| 任务数 | 6 项(模型训练 / harness 工程 / 数据合成) |
| 对比对象 | Codex 与 Claude Code(同接口、同预算) |
| 平均相对 held-out 增益 | Arbor >2.5× |
有假设树,一条枝的教训能传给另一条枝、搜索边界持续精化;没有它,链式重试反复犯同一个错,预算全烧在重复试错上。树搜索真正强的不是"多试",而是让每次尝试都成为下一次的起点。
上一张卡片让假设树越长越大,但枝不能无限长。什么时候该把一个方向砍掉?
因为资源有限,把算力压在低期望的枝上,就等于从高期望的枝挪走。判断只看"再走一步"的未来账,不看沉没成本。就像等一班总误点的公交:已经等了 20 分钟不是继续等的理由,要看"下一班还有多久"。省下的 tokens 应该转给更可能出结果的方向。
| 符号 | 含义 | 取值(示意) |
|---|---|---|
| p | 这一步成功的概率 | 见 Step 2 |
| G | 成功带来的增益 | 10 |
| C | 这一步的成本 | 1 |
| 期望增益 | p×G − C | >0 才继续 |
| 方向 | 成功概率 p | 期望增益 = p×10−1 | 决定 |
|---|---|---|---|
| A | 0.2 | 0.2×10−1 = 1.0 | 继续 |
| B | 0.05 | 0.05×10−1 = −0.5 | 砍掉 |
| 项 | 数值 | 是否进入判断 |
|---|---|---|
| 已经投入 S | 100 | 否 |
| 未来净收益 | p×G − C | 是 |
| 继续的门槛 | 期望增益 > 0 | — |
有"按期望增益砍枝"这一步,资源会集中到高期望的方向;没有它、改用"看沉没成本"决策,低期望的枝会把整条预算拖死。砍方向不是认输,是把资源换到更可能出结果的地方。
上一张卡片砍完枝,还剩几条要同时推进。谁来定"下一步做什么"?
因为如果同一个 Agent 既记住所有细节又做决策,context 会被几百轮历史撑爆、注意力被稀释;把控制与状态分开,协调器只读摘要就能决策,细节留在文件里按需读取。就像总指挥只翻地图和战报,具体战斗交给各小队——他不需要记住每个士兵的弹匣余量。
| 架构 | 谁决策 | 状态放哪 | 风险 |
|---|---|---|---|
| 单脑全包 | 同一个 Agent | 全塞 context | 上下文爆、策略漂移 |
| 薄控制、厚状态 | 长驻协调器 | 厚状态落文件 | 需维护文件接口 |
| 角色 | 数量 | 职责 |
|---|---|---|
| 协调器 | 1 | 管全局策略、精化搜索边界 |
| 执行器 | N = 8 | 每个在一个假设上跑实验 |
| 隔离工作树 | 8 | 一个假设一个 worktree,互不踩 |
| 合计角色 | 1 + 8 = 9 | 控制 1、执行 8 |
| 方案 | 协调器每次要装什么 | 随步数的变化 |
|---|---|---|
| 单脑全包 | 全部历史 | 线性膨胀 |
| 薄控制 | 地图 + 摘要 | 保持紧凑 |
| 执行器 | 只装当前假设 | 每次重新初始化 |
有"薄控制、厚状态"这一步,协调器的上下文保持稳定、多个执行器并行也不互相污染;没有它、让一个脑子全包,上下文很快爆掉、策略越跑越漂。长时程的关键不是记性更好,而是"该记的记在文件里,该决策的只读地图"。
上一张卡片用协调器 + 执行器把多个角色组织起来。但这套编排到底有没有用?
因为"多智能体更好"和"单 Agent 就够"两派都能拿出可复现的实验,所以不能靠直觉站队,要先看在什么条件下做的实验。就像问"团队协作有没有用":三个人干一件小事可能不如一个人利索,但一件要几天的大工程,分工就赢了。
| 项 | 内容 |
|---|---|
| 代表方案 | 单会话最小编码 Agent(Malena) |
| 对手 | 四个开源 SOTA harness(多智能体/复杂编排) |
| 结论 | 前者不被超过;编码环境是最大单项效应 |
| 其余 harness 干预 | 无统计显著增益 |
| 实验(Agensh,arXiv:2609.26781) | 配置 | 结果 |
|---|---|---|
| 5 个最难 ProgramBench 任务 | 1 → 128 个 agent | 19.31% → 28.78% |
| 相对提升 | (28.78−19.31)÷19.31 | ≈ 49% |
| pandoc 任务 | 1 → 1,024 个 agent | 33.89% → 55.06% |
| 相对提升 | 55.06÷33.89 − 1 | ≈ 62% |
| 条件 | 谁追平 / 领先 | 依据 |
|---|---|---|
| 强 backbone + 好编码环境 + 相同 tokens 预算 | 单 Agent 能追平多智能体 | arXiv:2609.40303 |
| backbone 较弱需工作流先验,或任务需高并发与上下文隔离 | 多智能体领先 | arXiv:2609.26781 |
有 X(强 backbone + 一个能读写文件、执行代码的编码环境 + 相同 tokens 预算)→ 单 Agent 能追平甚至超过多智能体编排;没有 X(backbone 较弱、需要工作流先验,或任务要求高并发与上下文隔离)→ 多智能体明显领先。两边的实验都可复现,差别只在条件——用实验定,不用直觉定。