今年 4 月,Google DeepMind 发布了 AlphaEvolve。中文媒体的标题大致是:DeepMind 又放出一个 AGI,能改自己的代码,已经在 Google 数据中心跑了一年。
这些数字不假。但”AI 能改自己代码了”这个说法把最重要的事藏起来了。AlphaEvolve 真正厉害的地方,是它把两个各自有死穴的技术路线拼在了一起,而且是你一眼就能看懂的那种拼法。看懂它怎么拼的,比记住它的 benchmark 数字有用。
2000 年代初,计算机已经比人手快几个数量级了。但如果你问当时的机器学习研究员”能不能让计算机自动设计一个更好的神经网络结构”,他们会说太难了。不是因为计算机不够快,是因为没有人知道怎么把一个网络结构的好坏写成一个能被计算机自动计算的分数。
Neural Architecture Search 的突破不来自模型变聪明了,来自一件事被想明白了:把网络结构的”好坏”定义成”在验证集上的准确率”,评估过程定义成”用这个结构训练一个小模型、跑完 epoch 看一眼准确率”,候选生成定义成”在上一轮高分结构上加一层或改一个参数”,循环跑起来。一个经典的 NAS 论文描述了这套流程:控制器生成子网络的描述,子网络被训练,验证准确率作为 reward 信号传回控制器,控制器更新后生成下一轮结构。
NAS 能做很多事情。它找到过比人类手工设计更高效的语言模型结构,在图像分类任务上搜出过比 ResNet 更准的变体。但它有一个死穴,死得很难看。
这个死穴在变异算子。NAS 生成新候选的时候,本质上是在做随机操作:加一层、删一层、改一个超参数。这些操作没有一个理解”为什么上次那个结构好”、“这个改动在语义上意味着什么”。它只是在撞。在一个足够小的搜索空间里,撞也能出结果。但一旦程序的复杂度超过某个临界点,比如从选网络结构变成写一段调度逻辑,变异算子就完全瞎了。随机改几个字符得出一段能编译、能达到比 baseline 好的代码的概率,约等于零。
这就是为什么 NAS 能设计网络结构,不能写算法。它的搜索从”挑参数”升级到”写代码”的时候,变异环节塌了。
大概在同一时间,另一条路也在走。不是让计算机盲目变异,是让一个会写代码的 AI 替你做这件事。
2023 年到 2026 年,coding agent 从 demo 变成了日常工具。Claude Code、Cursor、OpenCode,这些工具的共同范式是:你描述一个目标,agent 读代码、写 patch、跑测试、看结果、再改。你给 Claude Code 一个优化目标:“帮我把这段代码的延迟降到 200ms 以下”,它能做。它试几个方案,跑 benchmark,比较数值,选分最高的继续。
这条路比 NAS 灵活得多。LLM 不是在做随机变异。它读代码的时候理解语义:“这里的循环次数取决于数组长度,改成分块应该能减少索引计算”。每一改动都有方向感,因为模型对代码有理解。
但它也有一个死穴。Claude Code 优化代码的时候,全程只有一个候选方案在演化。试了一个方向,好,继续深入;不好,退回来换方向。这个工作方式在搜索空间简单的时候没问题。但当优化目标有多个维度,延迟低但吞度掉、内存少但正确性边界收窄,单个候选方案很难同时把几条互斥的路径都走完。更致命的是,claude code 的方向感来自模型内部的判断。模型觉得”上次改动有效,顺着继续”的时候,没有人能告诉它再往前走五步就会撞墙。你让一个聪明人蒙着眼爬山,他爬得比瞎子快,但他仍然会走进死胡同。
AlphaEvolve 做的事,拆开了看,就是一句话。把 NAS 里最蠢的那个零件,变异算子,拔掉,换成 LLM。遗传算法的框架保持不变:候选池、evaluator 打分、选择、繁殖、淘汰。变异不再随机了,变成了 LLM 读当前高分程序、读 feedback、读任务描述、读失败历史,然后生成一个有语义方向感的 diff。
AlphaEvolve 的技术报告里对这套机制的描述是:系统从 Program database 采样程序组成 prompt,LLM 生成代码 diff,evaluator 打分,高分写回 database。human defines what,AlphaEvolve figures out how。LLM 负责”想想怎么改”,进化框架负责”决定哪些想法活下来”。分工明确。
这个拼接解决了三条路各自的问题。NAS 的变异盲区被 LLM 的语义理解覆盖了。NAS 不需要再靠随机撞,变异出来的代码大概率能编译、有意义、甚至在正确方向上。Claude Code 的单点搜索被 population search 替换了。AlphaEvolve 的候选池里同时有五到十个不同方向的方案在竞争。一条路走进死胡同的时候,pool 里还有其它方向在继续。不是”一个聪明人在爬山”,是”一群聪明人在同时爬不同的坡,每过一段就把爬得最高的几个挑出来,让剩下的人从他们这个高度继续爬”。
AlphaEvolve 的官方案例正是这样找出来的。Borg 调度器的启发式、Gemini training kernel 的矩阵乘法分块策略、TPU 里一段 Verilog 电路的优化、FlashAttention 的底层 GPU 指令重排。这些问题有一个共同点:正确性可以用自动化方式验证,但最优实现没人知道长什么样。AlphaEvolve 不需要知道最优解的样子。它只需要一个能打分的 evaluator,和一个能把历史候选变成语义变异的 LLM。搜索本身由进化框架扛着。
理解了这个拼接,你就不会被媒体标题带偏了。
AlphaEvolve 不改模型权重。Gemini 在里面是变异算子,不是被更新对象。它改的是候选程序池里的算法代码和部分 prompt context。“AI improving AI”的真实含义是 AI 写的代码优化了 AI 训练的基础设施,不是”模型在递归重写自己的大脑”。
AlphaEvolve 和 Claude Code 的区别不在一正一副。“能改代码”不是分界线。分界线是:你要找一个可行解,还是要在可行空间里做优化。前者用单个 agent 就够了;后者需要 population search + evaluator。不是好不好,是不一样。
AlphaEvolve 被跟踪的理由也不是”AI 进化了”。是它证明了一件事:把搜索框架和语义理解分开分工,比让任何一个模型自己包圆更有效。LLM 负责提方案,进化框架负责做选择。这个分工让 LLM 不需要”比人更懂怎么优化算法”,只需要”比随机变异更会改代码”。目标收窄了,效果反而上去了。
最后一个需要注意的事实。AlphaEvolve 目前只公开了 13 个成功案例,超过 37 个失败案例没有发布报告。没有失败案例的细节,我们无法判断它在哪些问题上搜索无效。所以上面的判断基于已有公开材料里的机制设计,不是对所有问题泛化能力的确认。
如果只用一句话解释 AlphaEvolve:传统的遗传算法太笨,单个 LLM 太窄。AlphaEvolve 把 LLM 塞进遗传算法的变异环节,让机器搜索第一次有了方向感。