Google DeepMind · 白皮书 · 2025.06

AlphaEvolve
让 AI 自己写代码、自己打分、自己进化

把大语言模型嵌入进化算法循环,不是让 AI 写一次代码就完事,而是让它写上千轮、每轮自动评分反馈,最终进化出人类数十年未能发现的新算法。

Alexander Novikov, Ngân Vũ, Marvin Eisenberger 等 18 位作者

一句话版本

让 AI 反复写代码、每次自动跑测试打分、只留下跑得更好的版本、再把好版本喂回去让它继续改——经过上千轮进化,最终代码可以超越人类专家数十年的成果。

问题:如何让 AI 自动发现新算法?

发现新算法(比如更快的矩阵乘法、更优的数学构造)需要反复试错、逐步逼近。LLM 虽然有创造力,但单次输出不可靠——它无法验证自己的代码是否正确,更无法系统性地搜索巨大的解空间。

核心挑战:如何把 LLM 的创造力变成可靠的、可验证的算法发现?

已有方案:别人怎么做的?

在 AlphaEvolve 之前,已有三类典型方案尝试解决这个问题,但各有明显局限:

通用 LLM Coding Agent
如 Devin、Cursor Agent 等
用户 LLM 代码 人工反馈(慢、主观) 线性对话,无系统性搜索
局限:依赖人工反馈;对话链无记忆积累;不做系统性探索
AlphaEvolve → 用自动评估替代人工反馈
AlphaTensor
DeepMind 2022,深度强化学习
RL Agent Environment action state + reward 反复交互数百万步 需为每个问题定制 RL 环境
局限:需为每个问题手工设计状态/动作空间;只能做矩阵乘法一类问题
AlphaEvolve → 通用框架,同一 pipeline 跨领域
FunSearch
DeepMind 2023,AlphaEvolve 前作
小 LLM 单函数 10-20 行 评估 数据库 百万次采样 · 仅 Python · 仅单函数
局限:只能进化单个函数(10-20 行 Python);需百万次采样;大模型反而没用
AlphaEvolve → 进化整个代码文件,千次采样
📚
Devin / LLM Coding Agent 详情
Cognition AI, 2024 · 首个被广泛关注的自主编程智能体

它是什么?

Devin 是 2024 年引起轰动的 AI 编程智能体。它有一个完整的开发环境(编辑器 + 终端 + 浏览器),可以自主阅读代码库、写代码、跑测试、修 bug。底层用多个子 agent 协作:代码编辑 agent、命令行 agent、错误处理 agent、浏览器 agent。

核心做法

用户给一个任务描述 → Devin 扫描代码库 → 制定计划 → 用户审批 → 执行 + 动态调整。如果测试失败,会自动重试修复。本质是一条对话链上的迭代,用人工审查和测试反馈来纠错。

关键结果

SWE-bench 上 13.86% 的解决率(此前 SOTA 仅 1.96%);生产环境中 67% 的 PR 被合并。

与 AlphaEvolve 的本质区别

Devin 是「对话式」的——一次任务一条链,依赖人工审查。AlphaEvolve 是「进化式」的——数千个候选方案并行评估、优胜劣汰,无需人工参与。Devin 适合日常开发,AlphaEvolve 适合在巨大搜索空间中发现全新算法。

📚
AlphaTensor 论文详情
Fawzi et al., Nature 2022 · 论文链接

它是什么?

AlphaTensor 是 DeepMind 2022 年发表在 Nature 上的工作。它把发现矩阵乘法算法的问题建模为一个单人博弈游戏:目标是找到 3D 张量的低秩分解。用 AlphaZero 的方法(蒙特卡洛树搜索 + 深度神经网络)来下这盘棋。

核心做法

把张量分解的每一步(选择一个秩一分量)视为一个「动作」,当前张量残差视为「状态」,分解完成时的秩作为「奖励」。用 Transformer 网络评估局面并指导搜索。还用随机生成的合成数据来做 bootstrap 训练。

关键结果

在多个矩阵规模上超越了已知最优算法,发现了 14,236 个不等价的 4×4 矩阵乘法算法。对于 F2(二元域)上的 4×4 矩阵乘法找到了 rank-47 的算法。

与 AlphaEvolve 的本质区别

AlphaTensor 只能做张量分解这一个问题——状态空间、动作空间、奖励函数都是为矩阵乘法量身定制的。换一个问题就要从头设计 RL 环境。AlphaEvolve 不需要建模问题结构,只要用户提供评估函数就行——同一套系统可以做矩阵乘法、数学证明、调度优化、芯片设计。

📚
FunSearch 论文详情
Romera-Paredes et al., Nature 2024 · 论文链接

它是什么?

FunSearch 是 AlphaEvolve 的直系前作,名字来自「在函数空间中搜索」(Function Search)。它是第一个证明 LLM + 进化可以做出真正数学发现的系统——不是从训练数据中检索,而是发现全新的、可验证超越 SOTA 的构造。

核心做法

用小 LLM(如 PaLM 2)反复生成单个 Python 函数的变体,用自动评估器打分,高分版本存入进化数据库,再采样给 LLM 继续改。与经典进化算法的区别:用 LLM 代替随机突变,可以做语义级别的修改。

关键结果

在极值组合学的 cap set 问题上发现了超越已知最优的新构造;在在线装箱问题(bin packing)上找到了超越经典算法基线的新启发式。这两个结果都发表在 Nature 上。

为什么 AlphaEvolve 是质变?

FunSearch 只能改 10-20 行的单个函数,需要百万次 LLM 调用,用大模型反而没有收益。AlphaEvolve 能进化整个代码文件(数百行、多函数、多语言),只需数千次调用,且越强的模型效果越好。这使得 AlphaEvolve 能处理真实世界的复杂工程问题,而不仅仅是数学小品。

AlphaEvolve 怎么做的?

AlphaEvolve 的核心是一个进化循环:LLM 提出代码改动 → 自动评估器打分 → 好的方案存入数据库 → 从数据库采样组装下一轮 prompt → 重复。先看论文原图,再逐步拆解:

AlphaEvolve overview
论文 Figure 1:AlphaEvolve 整体架构。用户提供初始代码(标注可进化区域)+ 评估函数,系统进入自动进化循环。

流程图拆解

用户输入 初始代码(标注 EVOLVE-BLOCK)+ evaluate() + 配置 ① Prompt 采样器 • 从数据库挑选高分程序(多个,展示不同优势) • 拼入问题描述、评估反馈、文献上下文 • 可选:随机化模板 + meta prompt(自进化的提示词) • 组装完整 prompt:「这几个方案不错,你能改进吗?」 ② LLM 生成代码改动 Gemini Flash 高吞吐 · 探索广度 Gemini Pro 高质量 · 探索深度 ③ 应用 SEARCH/REPLACE diff diff 补丁 → 新候选程序 ④ 自动评估(级联) 快速检查 能跑吗?语法错误? pass? ✘ 丢弃 节省算力 小规模评估 少量测试 + 少量种子 pass? ✘ 丢弃 完整评估 全量测试 · 并行加速器 可选:LLM 评审质量 {score1: 0.87, score2: 0.62} 多指标联合评估 得分足够好? 优于数据库现有? 丢弃,回 ① ⑤ 进化数据库 • 注册新方案及其得分(MAP-Elites + 岛模型) • 每个「生态位」保留多样性最优解(探索) • 高分方案被更频繁采样到下一轮 prompt(利用) 循环:重复数千轮 输出:进化后的最优程序 经自动评估验证的可部署代码 LLM 步骤 评估步骤 进化数据库 不合格方案提前过滤 进化循环回路

关键机制:Prompt 是怎么拼出来的?

下面用论文 Figure 3 中的图像分类任务作为具体例子,展示 prompt 的完整拼接过程和 LLM 的输出:

📑
真实示例:给 LLM 看的完整 Prompt(论文 Figure 3b)
以图像分类任务为例,展开看 prompt 的四个拼接部分

Part 1:系统指令

Act as an expert software developer. Your task is to iteratively improve the provided codebase. [...]

Part 2:历史高分程序(从数据库采样)

- Prior programs Previously we found that the following programs performed well on the task:
top_1_acc: 0.796; neg_eval_log_loss: 0.230 average_score: 0.513
class ConvNet(hk.Module): def __init__(self, num_channels=32, ...): self._conv1 = hk.Conv2D(num_channels, 3) self._conv2 = hk.Conv2D(num_channels*2, 3) self._conv3 = hk.Conv2D(num_channels*4, 3) [...]

告诉 LLM:「之前有人用这个简单 CNN,准确率 79.6%」

Part 3:当前待改进程序(数据库中更高分的版本)

- Current program Here is the current program we are trying to improve (you will need to propose a modification to it below).
top_1_acc: 0.862; neg_eval_log_loss: 0.387 average_score: 0.624
class ConvNet(hk.Module): def __init__(self, ...): self._conv1 = hk.Conv2D(num_channels, 3) self._block1 = ResNetBlock(num_channels) self._block2 = ResNetBlock(num_channels*2, stride=2) self._block3 = ResNetBlock(num_channels*4, stride=2) [...]

告诉 LLM:「有人后来改成了 ResNet,准确率提到了 86.2%,你在这个基础上继续改」

Part 4:任务指令 + diff 格式要求

SEARCH/REPLACE block rules: [...]
Task: Suggest a new idea to improve the code that is inspired by your expert knowledge of optimization and ML. Describe each change with a SEARCH/REPLACE block.
🔧
LLM 的输出:代码 diff(论文 Figure 3c)
LLM 先给出改动理由,然后输出精准的 SEARCH/REPLACE 补丁

LLM 的思考

The current model uses a simple ResNet with only three blocks. We can improve by: 1) increasing model capacity (more blocks) 2) adding regularization (weight decay) 3) switching to AdamW optimizer

LLM 输出的 diff 补丁

<<<<<<< SEARCH self._block1 = ResNetBlock(num_channels) self._block2 = ResNetBlock(num_channels*2, stride=2) self._block3 = ResNetBlock(num_channels*4, stride=2) ======= self._block1 = ResNetBlock(num_channels) self._block2 = ResNetBlock(num_channels, stride=1) self._block3 = ResNetBlock(num_channels*2, stride=2) self._block4 = ResNetBlock(num_channels*2, stride=1) self._block5 = ResNetBlock(num_channels*4, stride=2) self._block6 = ResNetBlock(num_channels*4, stride=1) >>>>>>> REPLACE
<<<<<<< SEARCH def optimizer(self, learning_rate): return optax.adam(learning_rate) ======= def optimizer(self, learning_rate): return optax.adamw(learning_rate, weight_decay=1e-4) >>>>>>> REPLACE

这段 diff 会被自动应用到 Part 3 的当前程序上,生成一个新的候选程序,然后送去评估。如果评分比 0.624 高,就会被存入数据库,成为下一轮 prompt 中的「当前程序」。

三个有趣的设计

除了核心进化循环之外,论文中有几个设计选择特别值得关注:

🎲
进化什么?抽象层次的选择
同一个问题可以用完全不同的方式攻克——选错了抽象层次,效果天差地别

AlphaEvolve 面对同一个问题(比如「找到一个满足某性质的数学对象」),可以选择三种截然不同的进化策略:

A. 直接进化解 进化原始数据表示 [0, 1, 1, 0, 1, 0, ...] 像经典遗传算法 适合:小规模问题 困难:搜索空间爆炸 B. 进化构造函数 进化一个生成解的函数 def build(): ... FunSearch 的策略 适合:高度对称的解 困难:非对称解难表达 C. 进化搜索算法 进化一个找解的程序 def search(): ... AlphaEvolve 最强策略 适合:复杂、非对称问题 可自适应多阶段搜索

在数学发现实验中,策略 C(进化搜索算法)被证明是最强的——AlphaEvolve 会自动发现多阶段搜索策略:早期启发式擅长快速大幅改进,后期启发式擅长精细调优。这种自动发现的多阶段策略人类很难手工设计。

💡
Meta Prompt 自进化:LLM 自己改进给自己的提示词
不只进化代码,连「怎么提要求」都在进化

AlphaEvolve 有两条并行的进化链:

代码数据库 组装 LLM 新代码 → 评估 → 回库 Prompt 数据库 (独立进化) Prompt 也在进化:LLM 提出更好的提示词 → 存入 Prompt 数据库 → 下一轮使用

代码数据库存储进化中的代码版本,Prompt 数据库存储进化中的提示策略——两者共同进化。这意味着 AlphaEvolve 不仅学会了写更好的代码,还学会了「怎么提更好的要求」,可以超越人类 prompt 工程师的能力。

🔄
自我改进循环:AI 优化训练自己的基础设施
Gemini 通过 AlphaEvolve 加速了自己的训练、改进了自己运行的芯片

论文中最引人注目的发现之一:AlphaEvolve 的工程成果形成了一个自我改进的正向飞轮:

AlphaEvolve 优化 Gemini 内核 +23% 内核速度 +1% 训练速度 优化 TPU 电路设计 下一代硬件更快 更强的 Gemini = AlphaEvolve 的 基础模型更强 下一代 AlphaEvolve

目前自我改进的反馈周期还以月为单位,但方向清晰:随着基础模型变强、硬件变快,AlphaEvolve 能发现更好的优化 → 基础设施更强 → 下一代 AlphaEvolve 更强。论文将此称为 AI 发现的「正向飞轮」。

实验结果速览

以下是关键数字——感兴趣的读者可以看原文的完整数据表和消融实验:

48
次标量乘法
4×4 复数矩阵乘法
56 年来首次突破 Strassen
0.7%
全局算力节省
Google 数据中心
Borg 调度优化
23%
内核加速
Gemini 训练内核
优化周期从数月到数天
32%
FlashAttention 加速
直接优化编译器 IR
前后处理加速 15%

数学方面:在 50+ 个开放问题中,约 75% 匹配已知最优,约 20% 发现了新的更优构造(包括 Kissing Number、Erdos 最小重叠等经典问题)。所有结果均经过自动验证,数学结果可在 Google Colab 中复现。

Math discoveries
论文 Figure 5:AlphaEvolve 在多个数学分支中发现的突破性构造可视化。
Ablation: tensor Ablation: kissing

论文 Figure 8:消融实验。去掉进化机制损失最大(说明核心价值不只是「让 LLM 多试几次」),去掉 prompt 上下文次之。完整系统(蓝线)始终领先。

局限与展望

能做的

  • 任何有自动评估指标的问题
  • 数学、算法、系统优化、编译器、硬件设计
  • 所有产出可验证、可部署、可审计
  • 代码形式输出,可解释可调试
  • 能优化自身基础设施(自我改进)

做不了的

  • 需要实物实验的自然科学
  • 没有自动评估指标的主观任务
  • 超大规模矩阵(超过 5×5×5 内存不足)
  • 自我改进周期仍以月为单位
  • LLM 辅助评估尚未充分利用
更深层的意义:AlphaEvolve 本质上是一个 test-time compute 放大器——通过进化框架让 LLM 的能力远超重复采样。自然的下一步是将 AlphaEvolve 增强后的性能蒸馏回基础模型,形成正向飞轮。