文字版
斯坦福自改进 AI 智能体首讲:推理规模化的瓶颈不在生成,在挑不出来
编者按:本文内容出自斯坦福大学 CS329A《Self-Improving AI Agents》2025 年秋季学期第一讲,主讲人为 Akanshya 与 Azalia Mirhoseini,配图取自讲座画面。
过去五年,让语言模型变强的办法基本只有一条:做大。参数、数据、算力三个旋钮一起拧,测试损失就一路往下掉。这条路走了很久,大约从去年起开始有点拧不动。
于是有了第三条路:模型参数一个不改,只在它回答问题的那一刻多花算力。这条路叫推理规模化(inference scaling),今天几乎所有"会思考"的模型都建在它上面。
这堂课把这条路从头到尾讲了一遍,既讲了它最漂亮的实验,也放了它最难看的那张图。真正的结论是反直觉的:模型早就能生成正确答案,卡住所有人的是从一万个候选里把那几个对的挑出来。生成不是瓶颈,验证才是。
下面这些数字和机制,都来自那两个小时里的幻灯片。
01 三段路,第三段刚刚打开
先把语言模型这些年的路径压成三段:预训练、微调、推理。
预训练最费时间,动辄几个月、成千上万张 GPU,做的事却最简单——在海量文本上预测下一个 token。这一段的规律被 Kaplan 等人写成了扩展定律:测试损失与算力、数据量、参数量三者之间是幂律关系,三张曲线都是漂亮的直线下滑。
于是模型体量一路指数级往上走:BERT 约 3.4 亿参数,GPT-2 是 15 亿,GPT-3 跳到 1750 亿,PaLM 到 5400 亿,GPT-4 据估算已是万亿量级。"大语言模型"里的那个"大"字,名副其实。
把模型做大之后,会多出一些没被预定的东西。少样本学习是一个:不必为某个领域专门微调,在提示里给几个英译法的例子,模型就能照着格式翻译新词。更关键的是思维链——示例里不只给答案,还把推导过程一并写出来,模型就学会了分步骤解题。
思维链的特别之处在于,它不能从损失曲线上预测出来。模型不够大时它完全不起作用,大到某个点它突然就有了。
这张图是 GSM8K 小学数学应用题上的表现。LaMDA 和 GPT 在几十亿参数量级时,用思维链提示(紫线)和常规提示(黑线)几乎没有区别;PaLM 到 620 亿参数才开始明显拉开,到 5400 亿时越过了那条代表"此前最好的监督学习结果"的橙色虚线。
正因为涌现只能等出来、算不出来,前沿实验室才有动力继续把规模往上推。
第二段是微调。它先用书籍、创意写作这类高质量语料继续做下一 token 预测,再做指令微调,最后做 RLHF——雇人对同一问题的多个回答排序,训练出一个奖励模型,再让它替代人类去引导参数。ChatGPT 在 2022 年 11 月上线、五天破百万用户,靠的就是这几步叠加在 GPT-3 之上。
到大约一年半前,能提升模型的手段还只有这两段。然后第三段被打开了。
虚线框住的是推理。参数不动、不做任何微调,只在模型跑起来的那一刻多给算力——这是这门课真正要讲的东西。
02 无限猴子:8B 反超 GPT-4o
第三段路的起点是一篇叫《Large Language Monkeys》的论文,名字来自无限猴子定理:让猴子在打字机上随机敲无限久,终将敲出莎士比亚全集。
做法只有两步。第一步,让模型对同一个问题反复生成,几十次、几百次、上万次;第二步,用一个验证器从这堆候选里挑出正确的那个。编程任务里,验证器可以直接是单元测试——每份代码都跑一遍,通过的那份就是最终输出。
这张幻灯片值得多看一眼,因为它把整件事拆成了两个独立的问题,而这两个问题贯穿了整门课:
Problem 1 是覆盖率——我们能不能生成出一个正确解。Problem 2 是精确度——我们能不能从生成的样本里把它认出来。
这两个问题的难度差得很远。
先看覆盖率这一侧。四个基准,横轴是采样次数 k,从 1 一路加到一万;纵轴是覆盖率,即至少有一个样本答对的题目比例。红色虚线是 GPT-4o 只答一次的成绩。Llama-3-8B-Instruct 和 Llama-3-70B-Instruct 在单次作答时都不如它,可只要把采样次数加上去,两条线在四个基准上全部反超。
幻灯片的标题写得很直白:只靠重复采样,模型就能大幅变好。
多样性靠温度参数调,但温度不能一直往上加——超过大约 1.2 之后输出就开始退化成乱码,去年专门有研究在找这个区间。延迟倒不太是问题,这些样本可以并行跑;真正要权衡的是算力开销。
值得注意的是,这些题里最难的那些,一万个采样中往往只有三四个是对的。也就是说,必须把推理算力拉到足够大的量级,才能碰到模型能力的真实边界。而在数学领域,像 IMO 级别的竞赛题,用 70 亿参数的轻量模型配上这套方法就能解出来。
这不只在小基准上成立。
SWE-bench Verified 是模拟软件工程师改代码、出补丁的智能体基准。开源的 DeepSeek 配上重复采样,覆盖率爬到了 70% 以上;作为对照,当时的 SOTA 是 62.2%,由 Aide 团队在 2024 年 12 月 13 日拿到,后端用的是 Claude 3.5 Sonnet 的 new 版本;o1-preview 只有 38.4%。
一个开源模型,靠多采样几次,越过了当时的闭源最好成绩。
CUDA 代码生成上也一样。KernelBench Level 1 有 87 道题,DeepSeek 配合采样(温度 1.6)从三成出头一路爬到 72%,而各家模型贪心解码的基线分别停在 52%、40%、37%、24%。
这一档任务的便利之处在于验证近乎免费:让模型把 PyTorch 代码翻成 CUDA,只要拿任意输入喂进去,比较两边输出是否一致就行。任意两种语言之间的代码翻译也一样,等价性比正确性好判断得多。
03 幂律从哪来:难题的那条长尾
采样次数和覆盖率之间不是随便什么关系,而是一条可以拟合的曲线。
形式是指数化幂律:c = exp(a·k^b)。k 是样本数,a 和 b 是拟合参数,c 是覆盖率。它的实用价值和预训练扩展定律一样——可以在开跑之前就估出,要达到某个覆盖率大约需要多少次采样、多少算力。
但这里藏着一个不太显然的问题。
单看一道题,概率是初等的:一次答对的概率是 p,那么 k 次里至少对一次就是 1 减去 (1−p) 的 k 次方,一个指数式。可把一整套题合起来看,观察到的却是幂律。指数怎么变成的幂律?
答案是:题目的难度分布必须有一条足够长的左尾——也就是必须存在相当数量的、真正困难的题。
这是 Pythia 系列从 7000 万到 120 亿参数、七个规模的 pass@1 分布。每张图最左边都立着一根高柱:大量题目的单次正确率低到 10⁻⁴ 量级,剩下的沿着一条平缓的曲线摊到右边。模型越大,分布整体右移,但那条长尾始终在。
这项工作还带来一个很实际的副产品:它给出了一种预测幂律指数的方法,所需推理算力比直接跑出整条曲线少两到四个数量级。
04 智能体为什么突然可靠了
讲到这里,课程的主角才登场。
以聊天机器人或推理模型形态存在的大模型,本质上仍是单轮的。它有趣,但不真替你把事情做完。变化发生在今年——以 Claude Code、Deep Research 为代表的智能体,开始能端到端跑完一整条现实工作流。
差别在哪?智能体拿到的是一个目标,它自己规划步骤、与环境交互、根据反馈修正行为,直到达成目标,或者判断达不成并主动反馈。是否目标导向、能否按反馈调整、能否自己决定何时停下,这三条才是它和聊天机器人的分界。而为了追踪进度,它还需要某种形式的记忆。
工作流的组件被列得很清楚:提示链、路由、并行化、编排者、评估者/裁判、验证器。底下那句是这门课的骨架——智能体工作流需要三种能力:规划、多步推理,以及自我改进。
编排方式则大多沿用固定图结构。给定目标,一个模型产出方案,另一个模型充当评判者决定收不收;Deep Research 更接近并行那一路,多路调用之后再聚合成摘要。完全开放的"自行行动—获取反馈—决定下一步"循环仍然难做,现实里更常见的是人手工把流程固化成一张图,再让模型在节点上充当评估者。
编码智能体是这套范式最成熟的落地。用户下一条指令,智能体在仓库里导航、搜文件、看文件、改指定行、在终端跑命令,再根据命令输出决定下一步动作。
同样的架构,去年还很不可靠,今年开始稳了。听众当场就问了这个问题:范式没变,究竟是什么变了?
讲者的回答是两条:模型本身更强,以及强化学习方法的进步——可验证奖励在起作用,训练阶段的规模化也有效果。
然后是那个自我改进循环:模型变强之后,它生成的单元测试也更可靠;更可靠的测试反过来能验证它生成的代码,于是形成正反馈。有了足够好的验证器,就有可能引导模型生成正确的代码。
课程也把落地场景摊开讲了。最适合交给智能体的是高度重复的工作:代码迁移、版本升级、整库重构、数据抽取与清洗、数据仓库迁移,还有写单元测试。客服是另一个铺得最开的领域——实时转写、知识辅助、智能回复、通话摘要,乃至发起退款、更新工单。研究类工作流则可以从一个题目出发,自动找参考文献、判断相关性、逐篇摘要,最后合成一篇长文。
但这些全都压在同一个假设上:有人能判断结果对不对。
05 真正的坎:生成得出来,挑不出来
现在回到 Problem 2。
这张图的标题是"现有验证方法需要大幅改进",它大概是整堂课最难看、也最重要的一张。
四条线:多数投票、奖励模型加 Best-of-N、奖励模型加多数投票,以及紫色的覆盖率——也就是"假设存在一个完美验证器"的理论上限。
在 GSM8K 这类较简单的数据集上,三种实际方法还能贴着上限走。可到了 MATH,尤其是 8B 模型那一张,覆盖率一路爬到 0.95 附近,而三种验证方法全部卡死在 0.3 到 0.4 之间,且在采样十次到五十次之后就基本不动了。
同一个模型,同一批采样,能力上限和实际拿到手的成绩之间差了一倍以上,差距全部来自"挑不出来"。这就是生成–验证鸿沟。
多数投票为什么会失效,原因并不复杂:最难的那些题,模型在上千甚至上万次采样里也只答对一两次。正确答案稀少到这个程度,投票机制根本捕捉不到它。
所以问题变成了:哪些领域能拿到便宜且可靠的验证?
数学可以用形式化证明工具逐步核验;编程可以写单元测试,而写测试常常比写完整解法容易得多;PyTorch 编译成 CUDA、一种语言翻译成另一种语言,都可以直接比对输出。这些是幸运的一侧。
另一侧就没这么好运。创意写作这类任务反馈信号极弱,人类反馈本身成为瓶颈;而在物理仿真、机器人这类领域,验证器往往也只是另一个模型,得靠仿真和工具调用来过滤错误答案。
即便在幸运的一侧,验证器的质量也不是免费的。课上有听众反馈了自己的实践:数学答案人工核查下来正确率大约在 97% 到 98% 之间;而在代码那边,单元测试没能真正覆盖实现,就会漏掉失败模式。验证器本身的质量,直接决定了这套方法的天花板。
课程把这件事直接变成了作业:那批数据集已经在 Hugging Face 开源,每道题带约一万个生成样本,专门用来研究怎么缩小这道鸿沟。有人提议干脆生成一万个验证器再投票,讲者的回应是方向有意思,但算力代价太大——弱监督的验证器集成通常用十到二十个,不是上千个。
06 挑不出来时的三条路
既然完美验证器不存在,剩下的就是在有限预算里把算力分配好。
第一条路是并行采样:同一个问题一次生成多个独立答案。第二条路是顺序修订:先给一个初步解,再让模型反复修订、从不同角度审视,直到有把握了再输出。第二条路在这套框架里靠提示词驱动,不过今天的推理模型在训练中已经自发学会了类似行为。
第三条路是选择机制,这就要引入两类奖励模型。结果奖励模型(ORM)只看最终答案打分;过程奖励模型(PRM)则对解题过程中的每一步单独打分,输出一个 0 到 1 之间的数值。要说明的是,PRM 的粒度是步骤而不是 token——大致对应解答里一个有独立意义的片段,也可以把一个句子定义为一步;训练数据就是人工给每一步标的合格与否。
有了 PRM,搜索就能从"生成完再选"变成"边生成边剪"。
这是束搜索。每一层采样若干候选,用 PRM 打分后只保留得分最高的两三个继续展开,绿色是被验证器选中的分支,红色是被砍掉的。算力不再平摊给所有路径,而是集中在更有希望的那几条上。
那么,多花的算力到底该花在哪里?有一篇论文专门做了这个实验。
方法这一页值得记下来,因为它决定了结论的可信度:数据集是 MATH,1.2 万道训练题、500 道测试题;基座模型是 PaLM 2-S*(Codey);难度不是拍脑袋定的,而是先用 2048 个样本估出每道题的 pass@1,再按五分位切成五档;PRM 按 MATH-Shepherd 的方法训练;修订模型则是在"一串错误答案后面跟一个正确答案"的轨迹上微调出来的。
结论分成两半,而且互相矛盾得很有意思。
横轴是推理 token 与预训练 token 的比值,三根柱子分别是简单题(绿)、中等题(蓝)、难题(橙)。
比值远小于 1 时,三类题全部受益:分别是 +21.6%、+27.8%、+11.8%。比值接近 1 时,简单题还有 +16.7%,中等题掉到 +3.5%,难题已经变成 −11.9%。比值远大于 1 时,简单题只剩 +5.4%,中等题 −24.3%,难题是 −37.2%,接近腰斩。
翻译成一句话:简单题和中等题上,多花推理算力比扩大预训练更划算;最难的那批题上,同样的算力放进预训练仍然明显更值。
所以预训练并没有过时。开源小模型确实随着推理算力增加越来越好用,但真正困难的问题上,更大的模型依然占优。区别在于,预训练只做一次,而测试时扩展发生在每一次运行的当下——而且没几家机构付得起前者。
串行和并行之间也没有统一最优解。简单题通往正确答案的路径多,适合多用串行修订一步步推进;难题可行路径少,需要大量并行采样以命中至少一条。更常见的是混合:在思维链推进的同时逐步验证,把违反约束的分支随手剪掉。
说到底,模型在测试时生成的 token 数量,是一个可以调节的旋钮。剩下的问题只是:怎么分配它。
07 Archon:把算力当架构来搜
课程的最后一部分,是把上面所有技术当成积木来搭。
这个框架叫 Archon。输入是三样东西:目标基准、推理调用预算、可用的模型清单,再加上一组推理时技术。中间的优化器叫 ITAS——推理时架构搜索,负责决定这些模型和技术该怎么组合。输出是一套具体架构:若干个生成器,接一个评论器、一个排序器、一个融合器,最后吐出一个响应。
可用的推理时操作一共七种,各自的成本也标得很清楚:
生成器每个候选一次调用;融合器把多个候选合并成一个;评论器为每个候选写出优缺点;排序器返回质量前 K 名;验证器返回带核验推理的候选,代价是每个候选两次调用;此外还有单元测试生成器和单元测试评估器,只适用于推理类任务。
这里的单元测试和你想的可能不一样。
它是自然语言写的,也不真的执行——比如题目是判断字符串括号是否配对,模型生成的"测试"是"若字符串以右括号开头,答案应立即输出 NO""若括号数为奇数,答案应输出 NO"这样的自然语言断言,再由评估器拿候选答案去逐条比对。
融合这个操作的效果出乎意料。在对 Sonnet 3.5 的胜率这个指标上,让模型把多个候选合成一个最终答案,成绩能够超过"假设有完美验证器直接挑出最佳候选"的那条线;而先排序取前五名、再融合,比全部直接融合还要更好。
搜索本身用的是贝叶斯优化,搜索空间做了几处收窄:每层只允许一种技术,第一层固定是生成器,评论器必须排在排序器或融合器之前,单元测试生成器后面必须紧跟一个评估器。
这个选择的收益很直接。纵轴是相对于最优架构的性能百分比,横轴是试过的配置数量。贝叶斯优化(绿线)在 500 个配置以内就摸到了 100%,而贪心搜索和随机搜索要一路试到六七千个才追上。推理调用很贵,样本效率在这里就是钱。
最终结果表值得逐行看。GPT-4o、Claude 3.5 Sonnet、Llama 3.1 405B 三行都是一次调用的基线。Archon 分开源、闭源、全源三组,每组又分通用版和任务专用版。全源任务专用那一行在六个基准上分别是 79.5、69.0、92.5、72.7、89.7、82.1,全表最高。
左侧那句话是全课的落点:Archon 在指令遵循、推理、数学和编码任务上的 pass@1 准确率与胜率,平均比 GPT-4o 和 Claude-3.5-Sonnet 高出 14.1 个百分点。而且只用开源模型的那一组,也已经能匹配甚至超过当时的闭源前沿模型。
但这张表还有一列不能略过:推理调用次数。基线模型是 1 次,Archon 各组是 32 到 44 次。
那 14.1 个百分点,是拿三十到四十倍的推理调用换来的。这不是免费的午餐,只是把成本从训练侧挪到了推理侧——而推理侧的成本,每回答一次就要付一遍。
08 先判断你在鸿沟的哪一侧
这堂课的两个小时可以压缩成一个判断:能力大多已经在模型里了,把它取出来的手段却还很粗糙。
重复采样让开源小模型在多个基准上越过了闭源前沿;覆盖率的幂律让算力预算可以提前估算;智能体工作流让这些能力落进了真实任务。可这一切成立的前提,都是有人能判断哪个答案是对的。一旦验证器缺席,那张 MATH 图上的差距就会原样出现在你的系统里。
所以动手之前,先回答一个问题:你的任务有没有便宜、可靠的自动验证?
如果有——单元测试跑得动,输出可以比对,形式化工具能核验——那么重复采样几乎立刻可用,而且很可能一个小模型就够,省下的钱远多于多采样几次的开销。
如果没有,那么先别急着加采样次数。多生成一百个候选,只会让你多一百个分不清对错的答案。这种时候,力气应该花在造出反馈信号上:把模糊目标拆成可检查的子条件,把评审标准写成能逐条比对的断言,或者干脆缩小任务范围,缩到验证变得廉价为止。
拧参数、拧数据、拧算力,现在多了第四个旋钮——生成多少 token。但在拧动它之前,得先有人看得懂拧出来的结果。