GEPA: Reflective Prompt Evolution Can Outperform Reinforcement Learning
一句话总结:与其用 GRPO 那种"把整条 rollout 压成一个标量奖励、再估策略梯度"的强化学习去适配下游任务,不如把 rollout 序列化成自然语言轨迹、让一个反思式 LLM 读懂它、诊断哪一步出错、有针对性地改写 prompt——再用一个遗传-Pareto 搜索维护"每道题各自最优"的候选前沿来避免陷入局部最优;结果在 6 个任务上平均超过 GRPO 6 分(最高 20 分)却少用最多 35× 的 rollout,并稳超此前最强 prompt 优化器 MIPROv2 逾 10 分。
- 来源:Lakshya A Agrawal, Shangyin Tan, Dilara Soylu, Noah Ziems, ... , Matei Zaharia, Omar Khattab(UC Berkeley / Stanford / MIT / Databricks / Notre Dame / BespokeLabs),arXiv:2507.19457v2,ICLR 2026 Oral
- 代码:https://github.com/gepa-ai/gepa
- 本地 PDF:ref19_gepa.pdf
TL;DR 速览
- 问题:把 LLM 系统适配到新任务,主流做法是 RLVR / GRPO——把成败当回合末的标量奖励去估计策略梯度,往往要上万到几十万条 rollout。当每条 rollout 都要调昂贵工具、采样预算有限、或根本没法微调最强模型的权重时,这种样本低效就是致命瓶颈。
- 核心洞察:rollout 本身可以无损序列化成一段自然语言轨迹——里面有每个模块的指令、模型的推理链、工具调用、甚至 reward 计算前的编译器报错等。现代 LLM 天然读得懂这些文本,所以"用语言反思轨迹来学习"能比"从稀疏标量奖励反推梯度"更有效地利用 LLM 的语言先验。
- 方法(GEPA = Genetic-Pareto)三根支柱: 1. 反思式 prompt 变异(Reflective Prompt Mutation):跑候选拿到 (输入, 输出, 反馈, 轨迹) → 让反思 LM 做隐式信用分配(把成败归因到具体模块)→ 有针对性地改写那个模块的指令,并把学到的"高层规则"沉淀进 prompt。 2. 基于 Pareto 的候选选择(Pareto-based candidate selection):不只进化"全局最好"那一个候选(会陷局部最优),而是记录每道训练题上得分最高的候选、组成 Pareto 前沿、按"领跑题目数"加权随机抽一个去变异——保证多样性、鲁棒泛化。 3. 系统感知合并(System-Aware Merge / crossover):当两条谱系分别优化了不相交的模块(互补策略),从各自挑最好的模块版本拼成一个新候选。
- 关键数字:
- Qwen3-8B 上,GEPA 超 GRPO(24k rollouts)最高 +20%、平均 +6%,却用最多 35× 更少的 rollout;只用 243/402/330/... 条 rollout 就追平 GRPO 的最佳验证分(最高 78× 样本效率)。
- 稳超 SOTA prompt 优化器 MIPROv2:聚合 +13%,是 MIPROv2 的 +5.6% 的两倍多;AIME-2025 上 +12%。
- 跨模型泛化:完全用弱模型 Qwen3-8B 优化出的 prompt,直接搬到 GPT-4.1-Mini 上 +9%,反超那些直接在 GPT-4.1-Mini 上优化的基线。
- 作为推理时搜索:NPU kernel 从 4.25% → 30.52% 平均向量利用率(最高单核 70%);CUDA kernel 把 GPT-4o 近 0% 的 fast1 提到 20%+。
- 一句话评价:这是"别压缩反馈"这条原则在 prompt 优化上最漂亮的一次兑现——GEPA 证明了"可解释的语言反思 + 多样性驱动的进化搜索"在低数据 / 预算受限场景可以系统性地打败权重空间 RL。它是本项目里"反馈最丰富的文本优化器"的标杆:[[ref09_meta-harness]] 明确把 GEPA 列为最接近的对照,但指出 GEPA 仍属"单候选、短反馈环、摘要式记忆",把反馈压得比自己狠——GEPA 恰好是理解"反馈丰富度谱系"的中间锚点。
tags: #prompt优化 #自我改进 #reflective-evolution #genetic-pareto #compound-ai-system #样本效率 #RL对照 #DSPy
related: [[ref09_meta-harness]](把 GEPA 当"反馈最丰富的文本优化器"对照,并进一步无损化)· [[ref07_ace-agentic-context-engineering]](ACE 拿 GEPA 当基线)· [[ref14_self-refine]](单候选自反思,GEPA 的反思算子的前身)· [[ref15_aflow]](在 workflow 图空间搜索,vs GEPA 在 prompt 空间)· [[ref18_promptbreeder]](自指涉 prompt 进化,GEPA 引为进化式前作)· [[ref17_self-harness]](同属"固定模型 + 累积反馈"谱系)· [[ref20_alphaevolve]](进化式代码搜索,GEPA 显式对比)
摘要
LLM 越来越多地通过 RL 方法(如 GRPO)适配下游任务,而这些方法往往需要上千条 rollout 才能学会新任务。我们论证:语言的可解释性质通常为 LLM 提供了比"从稀疏标量奖励导出的策略梯度"丰富得多的学习介质。为验证这一点,我们提出 GEPA(Genetic-Pareto),一个充分融入自然语言反思、从试错中学习高层规则的 prompt 优化器。
给定任何含一个或多个 LLM prompt 的 AI 系统,GEPA 采样轨迹(推理、工具调用、工具输出)→ 用自然语言反思这些轨迹以诊断问题、提出并测试 prompt 更新 → 从它自己尝试的 Pareto 前沿上组合互补的经验。因此它常能把区区几条 rollout 变成一次巨大的质量提升。跨 6 个任务,GEPA 平均超 GRPO 6%、最高 20%,同时用最多 35× 更少的 rollout;也超过领先的 prompt 优化器 MIPROv2 逾 10%(AIME-2025 上 +12%),并作为代码优化的推理时搜索展现出有前景的结果。
1 介绍:为什么"用语言学"比"用标量奖励学"更省样本
论文开篇立起一个明确的对立面:RLVR / GRPO。它把成败当作回合末的标量奖励去估计策略梯度,虽然有效,但实践中动辄要几万到几十万条 rollout。在很多真实场景里,rollout 意味着调用昂贵工具、消耗有限的推理预算、或者根本无法微调最强模型——样本低效很快变成瓶颈。
[!TIP] 什么是 GRPO / RLVR?(本文的主要对照) RLVR(Reinforcement Learning with Verifiable Rewards)指用"可自动验证的奖励"(如答案是否正确、代码是否通过测试)来做 RL,绕开人类打分。GRPO(Group Relative Policy Optimization)是 DeepSeek 提出的一种策略梯度算法:对同一道题采样一组 rollout,用组内相对优势(该 rollout 分数减去组均值)替代 critic 来估计梯度,省掉了单独的价值网络。它的软肋是:奖励只在回合末给出一个标量,整条推理链里"哪一步对、哪一步错"的信息全被压成一个数字,因此需要海量 rollout 才能把梯度信号从噪声里拉出来。GEPA 的全部动机就是——这个压缩是没必要的。
作者的关键观察:即便是最复杂的 LLM 系统,其 rollout 也能被无损序列化成一段自然语言轨迹——里面除了各模块的指令、LLM 的推理链、工具调用,还包括 reward 函数塌缩成标量之前的内部产物(如编译器报错)。既然现代 LLM 读得懂这些文本,那么"刻意用语言反思这些轨迹来学习"就能更好地利用 LLM 的强语言先验。
于是本文提出 GEPA——一个面向 compound AI system 的反思式 prompt 优化器,它把文本反思和多目标进化搜索融合起来。每次变异,新候选都从一个"祖先"派生,累积从观测和 LLM 反馈中提炼的高层规则;为避开贪心 prompt 优化的局部最优,GEPA 维护一个 Pareto 前沿——不是只进化全局最好那一个,而是随机探索"在各道题上表现最好"的那批 prompt,从而鲁棒泛化、不陷死角。
评测覆盖多跳推理(HotpotQA)、数学(AIME、LiveBench-Math)、指令遵循(IFBench)、隐私感知委托(PUPA)、检索增强验证(HoVer),模型用开源 Qwen3-8B 和闭源 GPT-4.1-Mini。头条结果:Qwen3-8B 上超 GRPO 最高 20%、少用 35× rollout、平均 +6%;聚合上超 MIPROv2 +13%(是其 +5.6% 的两倍多)。

Figure 1 逐元素解读(全文的招牌"样本效率"图):两个面板分别是 HotpotQA 和 IFBench(都用 Qwen3-8B)。横轴 = rollout 数(一路到 24000),纵轴 = 分数;圆点是验证集表现的进程曲线、★ 是测试集最终表现。 - 橙线(GRPO):用满 24000 rollout,曲线爬升缓慢且低——HotpotQA 上到 24k 才 ~52,IFBench 上 ~64。★ 落在最右下(花光预算、成绩最差)。 - 绿线(MIPROv2):作为 prompt 优化器学得快,但很快到顶。 - 蓝线(GEPA):在极左侧(几千 rollout 内)就冲到最高,HotpotQA ~62、IFBench ~80,远超 GRPO 与 MIPROv2;★ 高踞左上——又快又好。 - 信息:两个 prompt 优化器(蓝、绿)都比 GRPO(橙)学得快,而 GEPA(蓝)在最终分数上又明显压过 MIPROv2(绿)。这张图一眼说清全文两大主张:反思式进化既比 RL 省样本、又比现有 prompt 优化器强。
2 相关工作:把 GEPA 放进"prompt 优化 / 语言学习 / compound 系统优化"的坐标
作者从四条线索定位 GEPA。下面把每条里的关键前作讲透。
[!TIP] ① 自动 prompt 优化(LLM 当优化器) - APE / OPRO / PromptWizard [Zhou'22; Yang'24; Agarwal'24]:用 LLM 自动改写 prompt,把"历史 (prompt, 分数)"喂回去让它提新 prompt。 - ProTeGi / APO [Pryzant'23]:把"文字版梯度下降 + beam search"用于 prompt 优化——本文把它的 BeamSearch(N=4) 当候选选择的对照(见 Table 3)。
GEPA 的差异:也用 LLM,但额外引入环境的文字反馈、对候选做 Pareto 感知搜索、并按 AI 系统的子模块分别进化(而非只优化一条整 prompt)。
[!TIP] ② 进化式算法 / 进化式代码搜索(GEPA 名字里"Genetic"的来源) - EvoPrompt [Guo'24]:进化一个 prompt 种群。 - Promptbreeder [Fernando'24]:自指涉的自我改进——连"变异 prompt 的 prompt"本身也一起进化。见 [[ref18_promptbreeder]]。 - Rainbow Teaming [Samvelyan'24]:用质量-多样性(quality-diversity)进化生成多样的对抗 prompt。 - AlphaEvolve [Novikov'25] / OpenEvolve:把进化搜索直接用于代码改写,当解可被代码化时极强。见 [[ref20_alphaevolve]]。
GEPA 的差异:AlphaEvolve 针对单个难题做代码进化;GEPA 把进化带到跨领域的 prompt 上,用领域专用反馈做有针对性的变异、并结合 Pareto 前沿把"相关问题上学到的战术"迁移过来,样本效率更高。
[!TIP] ③ 语言空间的反馈驱动学习(vs RL)(GEPA 的思想母体) - Self-Refine [Madaan'23]:让模型自我反馈、迭代改写自己的答案——GEPA "反思算子"最直接的前身。见 [[ref14_self-refine]]。 - Reflexion [Shinn'23]:把口头反馈存进记忆供后续尝试用("言语强化学习")。 - In-context bandit / NLRL [Monea'25; Feng'25]:把在线学习/RL 搬进上下文,用语言而非梯度。 - Dynamic Cheatsheet [Suzgun'25] / Trace(OptoPrime) [Cheng'24]:测试时合成策略 / 用执行轨迹做"生成式 autodiff"。Trace 也是本文 GPT-4.1-Mini 上的对照基线。
GEPA 的差异:它用样例去提出新的指令(而不是把样例本身塞进上下文当记忆/few-shot),产出的是任务专用的显式规则。
[!TIP] ④ compound AI system / agent 的优化(GEPA 的直接同类,也是它的基线) - DSPy [Khattab'22/'24]:把"声明式 LLM 调用"编译成流水线,主要搜索/自举 few-shot 示例。见下方"什么是 compound AI system / DSPy"。 - MIPROv2 [Opsahl-Ong'24]:用贝叶斯优化联合对齐指令与 few-shot 示例——本文最主要的 prompt 优化对照。 - TextGrad [Yuksekgonul'25]:把"文字反馈"当作可反向传播的梯度,串起多组件优化;它的候选选择是"总取最好那个"(本文 Table 3 的 SelectBestCandidate 对照)。 - Optimas [Wu'25a]:给每个模块引入全局对齐的局部奖励。
它们的共性缺陷(本文论点):这些方法大多依赖全局奖励。GEPA 的独到之处是——把全局奖励与"每模块的环境文字反馈"结合,并在单个数据实例层面维护 Pareto 前沿,把 prompt/agent 设计匹配到具体样例上;Pareto 引导的进化让它在收敛到鲁棒、可泛化的解之前,先充分探索多样的 prompt/code/agent 设计策略。
| 方法 | 学习信号 | 候选选择 | 粒度 | 与 GEPA 的关系 |
|---|---|---|---|---|
| GRPO [Shao'24] | 回合末标量奖励 → 策略梯度 | — | 权重(全系统) | 主对照:样本低效 |
| MIPROv2 [Opsahl-Ong'24] | 全局标量分 + 贝叶斯优化 | 全局最优 | 指令 + few-shot | 主 prompt 对照;GEPA 聚合 gain 是其 2× |
| TextGrad [Yuksekgonul'25] | 文字反馈"反传" | 总取最好(易局部最优) | 多组件 | Table 3 的 SelectBest 对照 |
| APO/ProTeGi [Pryzant'23] | 文字梯度 + beam | BeamSearch(N) | 单 prompt | Table 3 的 BeamSearch 对照 |
| Self-Refine [Madaan'23] | 自我反馈 | 单候选 | 单答案 | 反思算子前身 |
| AlphaEvolve [Novikov'25] | 标量分 + 程序库 | 进化 | 单函数代码 | 进化式对照,面向单难题 |
| GEPA | 标量 + 每模块文字反馈 + 轨迹反思 | Pareto 前沿随机采样 | 每模块 prompt | 本文 |
[!TIP] 什么是 compound AI system / DSPy?(理解 GEPA 优化对象的关键) compound AI system(复合 AI 系统)指"由一个或多个 LLM 调用组成、可能穿插外部工具调用、由任意控制流编排"的模块化系统——它涵盖了 agent、多 agent、以及 ReAct、Archon 这类通用脚手架。DSPy 是 Khattab 等人提出的框架,把这种系统写成声明式的"模块 + 签名(输入/输出 schema)",再由优化器(如 MIPROv2、现在的 GEPA)自动"编译"出每个模块的最佳 prompt/few-shot,而不用手工调 prompt。本文正是把系统形式化为 \(\Phi=(M,C,X,Y)\)(模块集、控制流、全局输入/输出 schema),GEPA 优化的就是这堆模块 prompt \(\Pi_\Phi\),模型权重 \(\Theta_\Phi\) 冻结。一句话:DSPy 提供"可优化的模块化 LLM 程序"这个抽象,GEPA 是运行在这个抽象之上的、反馈最丰富的优化器。
3 方法:Genetic-Pareto 反思式 prompt 进化
3.1 优化目标与"样本高效"约束
把系统形式化为 \(\Phi=(M,C,X,Y)\):\(M=\langle M_1,\dots,M_{|M|}\rangle\) 是语言模块集,\(C\) 是控制流,\(X,Y\) 是全局输入/输出 schema。每个模块 \(M_i=(\pi_i,\theta_i,X_i,Y_i)\),其中 \(\pi_i\) 是它的(系统)prompt(含指令与 few-shot),\(\theta_i\) 是模型权重。可学习参数是 \(\langle\Pi,\Theta\rangle_\Phi\)。对任务实例 \((x,m)\)(\(x\) 是输入,\(m\) 是评测元数据如标准答案/评分 rubric/单测),系统产出 \(y=\Phi(x;\langle\Pi,\Theta\rangle_\Phi)\),度量 \(\mu:Y\times M\to[0,1]\) 打分。优化问题:
但真实场景里 rollout(= 调用 \(\Phi\) + 用 \(\mu\) 评测)很贵,于是加上预算约束 \(B\):
| 符号 | 含义 |
|---|---|
| \(\Phi\) | compound AI system(模块 + 控制流 + I/O schema) |
| \(\Pi_\Phi=\langle\pi_1,\dots\rangle\) | 所有模块的 prompt——GEPA 唯一优化的对象 |
| \(\Theta_\Phi=\langle\theta_1,\dots\rangle\) | 所有模块的权重——GEPA 全程冻结(GRPO 优化的是这个) |
| \(\mu\) | 标准评测度量(EM、F1、pass rate…),值域 \([0,1]\) |
| \(\mu_f\) | 反馈函数(GEPA 的关键扩展):在 \(\mu\) 基础上额外返回文字反馈 |
| \(B\) | 总 rollout 预算 |
| \(T\) | 任务分布 |
[!TIP] 把式 (2) 讲透——核心挑战是什么? 论文把整个问题凝成一句:"如何从每一条昂贵的 rollout 里榨取最大的学习信号,以便在低数据/预算受限下有效适配复杂模块化 AI 系统?" 注意两个刻意的设计: 1. 式 (1)/(2) 同时允许改 prompt 和权重——这不是因为 GEPA 要改权重(它不改),而是为了让"在不同参数空间操作的算法"(GEPA 改 \(\Pi\) vs GRPO 改 \(\Theta\))能在同一个框架里公平对比。 2. rollout 是稀缺资源:优化器最多花 \(B\) 条 rollout,但能全权访问 \(\mu\)。GEPA 的赌注就是——同样的 \(B\) 条 rollout,读它的自然语言轨迹比读它的标量分数能学到多得多。
3.2 遗传优化主循环(核心图)

Figure 3 逐元素解读(全文方法的心脏,请对照下面 4 步看):
- 左下「Scores Matrix」+「Candidate Pool P」:候选池是一棵遗传树(\(P_0\) 根,派生 \(P_1..P_4\))。左下的分数矩阵行是任务(Task 1/2/3…)、列是候选,✓/✗ 表示每个候选在每道题上是否最好。
- 中下「Pareto-based Candidate Filtering」:先对每道题取"得分最高的候选"("Best candidate per task",如 Task1→\(P_3\)、Task2→\(P_1/P_2\))→ 汇成候选集 → 剔除被支配者 → 得到「Filtered Pool (Pareto Frontier)」→ 从中按领跑题目数加权随机抽 1 个(图中抽到 \(P_2\))。
- 右侧橙框「Propose New Candidate」:抽到候选后二选一策略造新候选——
- Reflective Prompt Mutation(左半):Sample 1 candidate → 从 \(D_{train}\) 抽 minibatch \(M\) → Execute P2 on M(拿轨迹)→ Obtain text feedbacks using μf → Reflect and Propose New Prompt。
- System Aware Merge(右半):Sample 2 candidates(\(P_2,P_3\))→ 逐模块挑最优版本拼接("若某模块在 \(P_2\) 进化了、\(P_3\) 没有,就取 \(P_2\) 的,反之亦然")。
- 顶部闭环:新候选 \(P_{new}\) → Perform Minibatch Eval →「Performance improved?」→ Yes:Eval on all tasks + Add P_new to Pool;No:Discard P_new → While Budget > 0 回到起点。
- 一句话:先在小 minibatch 上便宜地筛掉没提升的变异,只有提升了才花预算在完整 \(D_{pareto}\) 上评估并入池——这是它省样本的关键工程手筋。
主循环文字版(对应 Figure 4 左的 Algorithm 1):GEPA 从只含 base 系统的候选池 \(P\) 出发,重复"选候选 → 变异/合并 → minibatch 评估 → 若提升则全量评估入池",直到预算耗尽,最后返回在 \(D_{pareto}\) 上聚合分最高的候选。每个新候选都带祖先记录,沿遗传树累积知识。

Figure 4 逐行解读:
- 左(Algorithm 1):line 1 把 \(D_{train}\) 切成 \(D_{feedback}\)(给反思用)和 \(D_{pareto}\)(选择用的验证集);line 6-20 主循环——SELECTCANDIDATE(Pareto 采样,line 7)→ SELECTMODULE(round-robin 选要改哪个模块,line 8)→ 在 minibatch \(M\) 上 Gather feedback, scores, traces(line 10)→ UPDATEPROMPT(反思改写,line 11)→ 造出 \(\Phi'\)(line 12)→ 比较改前改后在 \(M\) 上的均分 \(\sigma,\sigma'\)(line 13)→ 若提升(line 14)才把 \(\Phi'\) 入池、并在整个 \(D_{pareto}\) 上评分(line 16-18)。
- 右(Algorithm 2 SELECTCANDIDATE):line 3-6 对每道题 \(i\) 找最高分 \(s^*[i]\)、收集达到它的候选集 \(P^*[i]\);line 9-11 剔除被支配的候选 \(D\);line 13 令 \(f[\Phi]\) = 该候选在多少道题上仍属 Pareto 最优;line 14 按 \(f\) 加权随机抽一个。这就是"按领跑题目数加权"的形式化。
3.3 反思式 prompt 变异(Reflective Mutation)——把成败归因到模块
这是 GEPA 三支柱里最核心的一支。动机:执行轨迹(模型产生的文本)+ 最终结果(成/败)配在一起,就有了巨大的诊断价值——LLM 能借反思做隐式信用分配(implicit credit assignment),把整体成败归到具体模块,再对该模块做有针对性、但对全系统影响很大的更新。
流程(对应 Algorithm 1 line 8-14): 1. 从 Pareto 前沿随机抽一个候选,在 trainset 的一个随机 minibatch 上执行、记录轨迹; 2. 从轨迹里抽出模块的输入、输出、推理,调反馈函数 \(\mu_f\)——它返回数值分 + 文字反馈(含评测细节,如编译器报错、失败的 rubric 等); 3. 用 round-robin 策略选一个要改的模块 \(j\); 4. 把 (当前 prompt, 语言程序轨迹, 分数, 反馈) 喂给反思 LM,让它反思式地把成败归因到 prompt 的具体元素、并提出修订后的指令; 5. 带上新指令的系统在 minibatch 上再评一次,提升了才入池。
[!NOTE] GEPA 的反思元 prompt(Appendix C,逐字复述)
I provided an assistant with the following instructions to perform a task for me:The following are examples of different task inputs provided to the assistant along with the assistant's response for each of them, and some feedback on how the assistant's response could be better:Your task is to write a new instruction for the assistant. Read the inputs carefully and identify the input format and infer detailed task description ... Identify all niche and domain specific factual information about the task and include it in the instruction, as a lot of it may not be available to the assistant in the future. The assistant may have utilized a generalizable strategy ... if so, include that in the instruction as well. Provide the new instructions withinblocks. ``` 讲透:注意它明确要求反思 LM 干两件事——(a) 把领域专有事实"固化"进指令(因为将来推理时这些信息不一定还在上下文里);(b) 把观察到的可泛化策略也写进指令。这正是 GEPA 产出的 prompt "又长又富含声明式规则"的原因(见 Figure 2)。[!IMPORTANT] 把"评测轨迹(evaluation trace)"也当诊断信号——GEPA 的第二个反馈源 除了执行轨迹(LLM 产生的文本),作者指出还有评测轨迹:环境为了算奖励而产生的文本(如给 reward 0 之前的编译器报错)。很多评测度量会跑丰富的流程(编译、执行、profiling)后才塌缩成一个标量。GEPA 把 \(\mu\) 扩展成 \(\mu_f\)——在评测时抽出这些文字轨迹、连同分数一起返回当反馈。当可用时,这种反馈甚至能逐模块给(如多跳系统里每一跳后都给反馈);有人类打分+解释时,也能把解释当作辅助
feedback_text喂给反思。这一步就是"别把编译器报错压成 0/1"的操作化。
举例(HotpotQA 二跳查询模块,见 Figure 2):种子 prompt 只有一句"Given the fields question, summary_1, produce the fields query.";经反思式变异后,GEPA 把它长成一整套显式规则——"你的目标是检索第一跳没找到、但回答问题所必需的文档""别只是复述原问题或已知事实""若 summary_1 提到某个更宽泛的实体(如某小教区人口),而问题问的是更大区域,就把查询指向那个更大区域(如'2011 年马德拉群岛人口')"。这就是反思把"该模块的失败模式(二跳只会复述一跳)"转成"一条可复用的检索战术"。
3.4 基于 Pareto 的候选选择(Pareto-based Candidate Selection)——避免局部最优
这是 GEPA 的第二根支柱,掌控探索-利用权衡。朴素做法是"每轮都选当前最好的候选去变异",但这极易陷局部最优:一旦找到某个主导策略,就很难再超越,优化器会把剩余预算全耗在"反复微调这一个候选却改不动"上。
GEPA 改用一种 Pareto"照明(illumination)"策略(借自 MAP-Elites / Mouret & Clune 2015): - 对每道训练题,记录所有候选里的最高分,组成 Pareto 前沿; - 只要一个候选在至少一道题上拿到最高分,就保留它;被严格支配的候选剪掉; - 从这个剪枝后的集合里,按"该候选领跑多少道题"加权随机抽一个去变异。

Figure 6 逐元素解读(这张图把 Pareto 的价值可视化得淋漓尽致):括号里是各候选在验证集上的聚合分。 - (a) SelectBestCandidate(贪心):根 0(81.56)→ 找到一个好孩子后,就从它身上扇出 17 个扁平的兄弟节点(1~18),几乎全是灰的(没进一步提升)——典型的"找到局部最优后原地打转、把预算全浪费在一个候选上"。 - (b) Pareto-based(GEPA):同样的预算下长出一棵平衡、多分支、有纵深的树——根 0(82.26)派生出多条谱系(1/2/3/6/13…),下面继续分叉出 5/7/9/12/14…,出现多个改进节点(青色 12→96.3、橙色 14→94.59、16→93.54 等)。因为它不断从"不同题上领跑的候选"里抽,多条互补的"获胜策略"被同时探索,最终找到更优解。 - 信息:两图预算相同,唯一差别是候选选择策略;结果一个原地卡死、一个层层递进。这是 GEPA 三支柱里最被"消融坐实"的一支(见 Table 3:Pareto 的 +12.44% vs 贪心 +6.05% / beam +5.11%)。
[!TIP] 什么是 Pareto 前沿 / MAP-Elites 式"照明"? Pareto 前沿:多目标下,"没有任何其他解在所有目标上都不差于它、且在某个目标上更好"的那批解,就是 Pareto 最优(非被支配)解的集合。这里 GEPA 巧妙地把每道训练题当成一个独立目标——一个候选哪怕平均分不是最高,只要它在某一道刁钻题上是全场最好,就有资格留在前沿。MAP-Elites / 质量-多样性照明是进化计算里的思路:不只追一个全局最优,而是在"行为空间"的每个格子里保留一个"精英",从而系统性地保持多样性、避免早熟收敛。GEPA 把"每道题的最佳候选"当作这些精英格子,用它们的多样性喂养搜索。直觉:与其反复打磨一个偏科的尖子生,不如让一群'各有一门满分'的学生互相启发。
3.5 系统感知合并(System-Aware Merge / Crossover)——第三支柱
这是"遗传"里的交叉(crossover)算子,构成 GEPA+Merge。直觉:当池里有两个候选学到了互补策略(各自优化了不相交的模块),就该把它们拼起来。
合并的准入条件(Algorithm 3 DESIRABLE + Algorithm 4 MERGE,对应 Figure 9)非常严格,因此 merge 很稀疏:
1. 两候选 \(i,j\) 共享一个共同祖先 \(a\),但不是彼此的直接祖先;
2. 对每个模块 \(m\):若"祖先 = \(i\) 的版本但 \(j\) 改过"或反之(即两者分别改了不同模块),则可取那个"改过的"版本——形式上 if (πa=πi and πj≠πi) or (πa=πj and πi≠πj);
3. 两候选都要在聚合表现上超过祖先 \(a\)(\(S[a] > \min(S[i],S[j])\) 时跳过)。
合并时逐模块拼:模块只在 \(i\) 改过 → 取 \(i\) 的;只在 \(j\) 改过 → 取 \(j\) 的;两者都改过 → 取分数高的那个(随机破平)。
[!NOTE] 为什么 Merge 收益不稳定?(Observation 5 的坦诚讨论) GEPA+Merge 在 GPT-4.1-Mini 上能再超 GEPA 最多 5%、聚合 +2%;但在 Qwen3-8B 上反而掉分(4 个任务里只有 1 个受益,IFBench 甚至从 38.61 崩到 28.23)。作者归因为:变异 vs 交叉的预算分配、以及何时触发 merge 没调好——两个模型用了同一套超参。直觉上 merge 只在"已经进化出足够不同的独立谱系时"才该触发;自适应地决定 merge 时机被列为未来工作。这是全文少见的"负面/不稳定"结果,值得记一笔。
4 实验:6 任务 × 2 模型,全面胜出
评测:AIME-2025、LiveBench-Math、HotpotQA、IFBench、HoVer、PUPA;模型 Qwen3-8B(开源)+ GPT-4.1-Mini(闭源);对照 MIPROv2、Trace(OptoPrime)、TextGrad、GRPO。标准 train/val/test 划分,优化器全权访问 train、可监控 val 分数(做 early stopping)但不能直接看 val 内容。
4.1 主结果一:反思式进化比权重空间 RL 更省样本(Observation 1)
Table 1(Qwen3-8B,vs GRPO):
| Optimizer | HotpotQA | IFBench | HoVer | PUPA | AIME-2025 | LiveBench-Math | 聚合 | 提升 |
|---|---|---|---|---|---|---|---|---|
| Baseline | 42.33 | 36.90 | 35.33 | 80.82 | 27.33 | 48.70 | 45.23 | — |
| GRPO (24k rollouts) | 43.33 | 35.88 | 38.67 | 86.66 | 38.00 | 51.26 | 48.91 | +3.68 |
| MIPROv2 | 55.33 | 36.22 | 47.33 | 81.55 | 20.00 | 46.60 | 47.84 | +2.61 |
| GEPA | 62.33 | 38.61 | 52.33 | 91.85 | 32.00 | 51.95 | 54.85 | +9.62 |
| GEPA+Merge | 64.33 | 28.23 | 51.67 | 86.26 | 32.00 | 51.95 | 52.40 | +7.17 |
| GEPA rollouts | 6871 | 3593 | 7051 | 2426 | 1839 | 1839 | 3936 | — |
| GRPO rollouts | 24000 | 24000 | 24000 | 24000 | 24000 | 24000 | 24000 | — |
[!IMPORTANT] GEPA 在 5/6 任务上超 GRPO(最高 +19%),却用最多 35× 更少的 rollout(如 IFBench 只用 678 条 train rollout 就到 38.61%,超 GRPO 用 24000 条得到的 35.88%)。更狠的是匹配 GRPO 最佳验证分只需 243/402/330/1143/1179/306 条 rollout——最高 78× 样本效率。而且 GEPA 大部分预算其实花在验证上(只用于候选选择、不产生学习信号);若只算 train rollout,达到最优只需 79~737 条。作者顺势指出:换更小的验证集或动态验证子集能进一步省样本。唯一 GRPO 赢的是 AIME——纯数学推理这种"答案对错=干净可验证标量"的任务,恰是 RL 的主场。
4.2 主结果二:仅优化指令就能超过"指令+few-shot 联合优化"(Observation 2/4)
Table 2(GPT-4.1-Mini,vs 各 prompt 优化器):
| Optimizer | HotpotQA | IFBench | HoVer | PUPA | AIME | LiveBench | 聚合 | 提升 |
|---|---|---|---|---|---|---|---|---|
| Baseline | 38.00 | 47.79 | 46.33 | 78.57 | 49.33 | 58.20 | 53.03 | — |
| Trace (OptoPrime) | 60.33 | 51.19 | 46.00 | 74.18 | 45.33 | 60.74 | 56.30 | +3.27 |
| MIPROv2-No-Demos | 38.00 | 52.04 | 51.33 | 91.85 | 48.67 | 60.97 | 57.14 | +4.11 |
| MIPROv2 | 58.00 | 49.15 | 48.33 | 83.37 | 51.33 | 61.84 | 58.67 | +5.64 |
| TextGrad | 62.33 | 48.64 | 47.67 | 85.68 | 46.67 | 63.84 | 59.14 | +6.11 |
| GEPA | 69.00 | 52.72 | 51.67 | 94.47 | 59.33 | 64.13 | 65.22 | +12.19 |
| GEPA+Merge | 65.67 | 55.95 | 56.67 | 96.46 | 59.33 | 64.13 | 66.36 | +13.33 |
| GEPA-Qwen-Opt(用 Qwen 优化、搬到 GPT) | 65.67 | 49.83 | 54.67 | 90.05 | 52.67 | 59.31 | 62.03 | +9.00 |
- GEPA 稳超 MIPROv2(GPT 上最高 +11.1%、Qwen 上 +10.3%),聚合 gain 是 MIPROv2 的两倍多(+13.33% vs +5.64%)。
- 指令 > few-shot 的趋势反转:以往 few-shot 优化常胜过指令优化;GEPA 表明这个趋势正在翻转——归因于 LLM 指令遵循和自反思能力的进步 + GEPA 善用这些能力。GEPA 的 prompt 富含声明式指令(Figure 2),而非过去那种"准示例(quasi-exemplar)"。
- 更短更省:反思式指令比 few-shot 短得多——GEPA 的 prompt 比 MIPROv2 短最多 9.2×(Figure 18),且"更高分的优化器倾向产出更短 prompt"(Figure 17)。这直接省下游 token 成本、降延迟。
- 泛化 gap 更小(Figure 16):反思式指令的 val-test gap 更低。
4.3 主结果三:Pareto 候选选择是关键(Observation 3)
Table 3(Qwen3-8B,固定进化 harness,只换候选选择策略):
| 策略 | HotpotQA | IFBench | HoVer | PUPA | 聚合 | 提升 |
|---|---|---|---|---|---|---|
| Baseline | 42.33 | 36.90 | 35.33 | 80.82 | 48.84 | — |
| SelectBestCandidate(贪心,TextGrad 用) | 58.33 | 30.44 | 45.33 | 85.45 | 54.89 | +6.05 |
| BeamSearch(N=4)(APO 用) | 57.33 | 36.39 | 41.00 | 81.08 | 53.95 | +5.11 |
| GEPA(Pareto) | 62.33 | 38.61 | 52.33 | 91.85 | 61.28 | +12.44 |
Pareto 选择带来 +12.44%,是贪心(+6.05%)/beam(+5.11%)的两倍——如 Figure 6 所示,贪心一轮就卡进局部最优、beam 也易早熟,而 Pareto 平衡了探索利用、在同预算下收敛到更优解。
4.4 跨模型泛化(Observation 6)
"GEPA-Qwen-Opt"——完全用弱模型 Qwen3-8B 优化出的 prompt,不加修改直接评在 GPT-4.1-Mini 上,聚合 +9.00%(HotpotQA 高达 +27.67%),反超那些直接在 GPT-4.1-Mini 上优化的 MIPROv2(+5.64%)、TextGrad(+6.11%)、Trace(+3.27%)。说明 GEPA 学到的是任务层面的可迁移规则,不是绑死某个模型。
4.5 反思如何累积(定性证据)

Figure 5 逐元素解读(隐私感知委托任务 PUPA 的标注子树):括号内是各候选分数,红箭头是"从 base 到最优"的路径 0(82.26)→2(90.99)→4(94.44)→5(94.67)→11(97.6),每步旁边标注了 prompt 的关键变化: - candidate 0(Base):"给定私密用户查询,构造一个隐私保护的请求发给强外部 LLM"——只有一句话。 - → Expanded Privacy Strategies:加入"识别并泛化 PII"的详细指引、强调分析查询意图、引入改写的推理解释。 - → Structured Output & Best-Practices:把输出正式拆成 Reasoning + Request、显式禁止姓名/代号、描述抽象与示例用法、要求详细隐私论证并与任务质量平衡。 - → Transparent Transformation Rationale:强制透明的隐私推理与谨慎抽象,细化地点/姓名/一般信息的移除、专业场景、虚构角色处理——每步都配解释性 rationale。 - → candidate 11 Rigorous, Exhaustive Protocol(97.6):严格分步的 PII/专有信息抽象、禁止部分脱敏、"零泄漏容忍"。
信息:每次反思式变异都在"上一版指令"的基础上追加由本轮 rollout 反馈提示的、针对性的细化——GEPA 的过程是沿谱系累积经验,把一句种子指令逐步长成一套详尽的领域协议,最终大幅提分。这就是"单次反思更新也常带来大 gain"的直观来源。
4.6 扩展应用:GEPA 作为推理时搜索(§5)
把"待解任务集"当训练集喂给 GEPA(\(D_{train}=D_{pareto}=\) 全部任务),让它"过拟合"这批任务、迭代提出更好的解,并把某题 rollout 学到的洞见迁移到其他题。关键是用 \(\mu_f\) 按失败动态注入领域知识(如按编译器报错去检索手册相关章节)。 - NPU kernel(AMD XDNA2,NPUEval):GPT-4o + Sequential10 只有 4.25% 平均向量利用率;加 RAG→16.33%,再加 MIPROv2→19.03%;而 GEPA(不用 RAG)→ 30.52%(多个核达 70%),单个 GEPA prompt 就让同 agent 达 26.85%(Figure 7)。 - CUDA kernel(KernelBench,V100):GEPA 随预算增长把 GPT-4o 近 0% 的 fast1 提到 20%+(Figure 8)。
4.7 扩展应用:对抗 prompt 搜索(§5.2)
反转奖励:让 GEPA 提出"加入干扰信息(如 trivia)来最小化任务表现"的 prompt 编辑,同时要求 prompt 不与任务矛盾、仍含解题所需信息。在 AIME 上,学到的对抗指令把 pass@1 从 76% 打到 10%——它往指令里塞进"蜂蜜永不变质、尼罗河最长""海豚睁一只眼睡觉"之类 trivia,导致 GPT-5-Mini 系统性误解格式规则、把答案写成字面占位符 ### <final answer>。这揭示了"无关细节 × 严格字面格式约束"的脆弱交互,可自动化地探测最坏情况鲁棒性、生成回归压测集。
5 结论 / 讨论
- 核心贡献:GEPA 用显式反思 + Pareto 选择,在样本效率上超过 RL(GRPO),同时超过最强 prompt 优化器(MIPROv2)。把自然语言反馈显式纳入、并维护多样的 Pareto 最优候选池,让它能快速适配新任务——尤其在资源受限场景。
- 另一层意义:语言反思是一种可扩展的复杂真实 AI 工作流优化策略;GEPA 也展现了作为推理时搜索在困难代码域写代码的潜力。
- 未来方向(作者列出):① 用更小/动态验证子集进一步省样本;② 自适应决定 mutation vs merge 的预算分配与 merge 时机;③ 把推理时搜索系统性推广到更多代码生成/域适配任务。
个人思考
⭐ 在本项目坐标系里的位置:GEPA 是"反馈丰富度谱系"的中间锚点
GEPA 被本项目多篇引用(ref09/ref14/ref15/ref17),值得把它放进"用历史反馈迭代改进文本/代码产物"的谱系里精确定位:
| 维度 | GEPA (ref19) | Meta-Harness ([[ref09_meta-harness]]) | Self-Harness ([[ref17_self-harness]]) |
|---|---|---|---|
| 优化对象 | 模块 prompt(\(\Pi_\Phi\)) | 生成上下文的整段可执行代码(harness) | Agent 运行 harness 的可编辑面 |
| 反思看到什么 | 当前候选的轨迹 + 评测反馈(\(\mu_f\))+ 祖先经验 | 全部历史候选的源码/分数/轨迹(可 grep 文件系统) | 当前轮的失败聚类证据包 + 可编辑面 |
| 反馈丰富度 | 中:摘要式/反思式(每 iter ~8K token,见 ref09 Table 1) | 最高:无损全历史(每 iter ~10M token) | 中:确定性聚类后的结构化失败模式 |
| 候选选择 | Pareto 前沿随机采样 | 无 parent-selection,Agent 自主检视 | 无(三阶段闭环) |
| 准入 | minibatch 提升 → 全量评估 | Pareto 前沿 | 保守非回退门(两 split 都不降) |
| 提议者 | 反思 LM(改一条指令) | 编程 Agent(Claude Code + Opus) | 被评估模型自己 |
- [[ref09_meta-harness]] 怎么看 GEPA:ref09 明确把 GEPA 列为"面向摘要/反思式反馈"的一类,在它的 Table 1(MTok/iter)里 GEPA 是 0.008M——比 OPRO/TextGrad 高,但比 Meta-Harness 的 10M 低 3 个数量级。ref09 的论点是"GEPA 的反思式反馈仍把可诊断细节压掉了",而 Meta-Harness 用文件系统保留无损历史。但要公正:GEPA 的 \(\mu_f\)"评测轨迹"设计(保留编译器报错等)恰恰是"别压反馈"这条原则的先声——ref09 把它推到了极致(不摘要、全保留、Agent 自选),可以说 Meta-Harness = "GEPA 的反思 + 无损全历史 + 编程 Agent 自主检索"。附录 E 里 ref09 也是这么对比的。
- 对 [[ref07_ace-agentic-context-engineering]]:ACE 拿 GEPA 当基线。二者都"在文本层面自我改进",但载体不同——ACE 进化一份不断增删改的上下文文本,GEPA 进化生成/约束行为的指令 prompt。ACE 更像"往记忆里沉淀经验",GEPA 更像"把经验蒸馏成规则写进 system prompt"。
- 对 [[ref14_self-refine]]:Self-Refine 是 GEPA 反思算子的直系前身(自我反馈+迭代改写),但 Self-Refine 只在单个答案上迭代、无跨候选进化、无 Pareto 多样性。GEPA = Self-Refine 的反思 × 遗传-Pareto 搜索。
- 对 [[ref15_aflow]] / [[ref18_promptbreeder]]:AFlow 在 workflow 图空间搜索(改的是"模块怎么连"),GEPA 在 prompt 空间搜索(改的是"每个模块说什么")——正交、可组合。Promptbreeder 是"自指涉"进化(连变异 prompt 的 prompt 都进化),GEPA 的元 prompt 是固定的、但反馈信号更丰富。
- 对 [[ref20_alphaevolve]]:GEPA 自己讲清了——AlphaEvolve 面向"单个难题 + 干净标量 + 代码变异",GEPA 面向"跨领域 prompt + 富文字反馈 + Pareto 迁移战术"。
方法论启示(可迁移的通用思路)
- "别把反馈压成标量"是贯穿本项目的核心原则,GEPA 是它在 prompt 优化上的干净证明。\(\mu\to\mu_f\) 的扩展(保留编译器报错、失败 rubric、逐模块反馈)几乎可以搬到任何"有丰富评测中间产物"的优化场景——凡是评测过程会产生自然语言,就别让它塌缩成一个数字再喂优化器。
- "每道题当一个目标"的 Pareto 照明 是一个极通用的防局部最优技巧。当优化目标是"在一批异质样例上都要好"时,与其追平均分最优,不如保留一群"各有一门满分"的偏科候选来维持多样性。这对任何进化/搜索式自动设计都成立。
- minibatch 便宜筛 → 全量贵评 的两级评估,是"样本受限下搜索"的关键工程手筋——先花很少 rollout 判断"这个变异值不值得认真评",避免把预算浪费在没提升的候选上。
- 反思要显式要求"固化领域事实 + 抽取可泛化策略"(见元 prompt)——这解释了为什么 GEPA 的 prompt 又长又管用。做任何"让 LLM 从经验里提炼指令"的工作,都该在元 prompt 里明确这两个动作。
在我的工作中能怎么用
- 我们这个
pdf-paper-readerskill 本身就是一个可优化的 prompt/harness。可以借 GEPA 的思路:把"每篇论文的笔记质量"当独立目标,跑几篇拿到失败轨迹(坐标错位、图裁偏、深度不够)→ 反思式改写 skill 指令 → 用 Pareto 保留"各自在某类论文上最好"的 skill 版本。这次修render_figures.py+ 视觉验证 Figure 4/5/6 漏检的过程,本质就是一次手动的反思式变异(读失败轨迹→定位 bbox→针对性重渲染)。 - 复现成本:GEPA 有开源代码(gepa-ai/gepa),且在线文本分类/多跳 QA 类任务只需几千 rollout、开源小模型(Qwen3-8B)即可,是本项目里最容易上手复现的优化器之一。
- 叙事上,GEPA 是把"[[ref14_self-refine]] 的单点反思"抬升到"[[ref09_meta-harness]] 的全历史搜索"之间的关键过渡帧,串讲时可作为"反馈丰富度递增"这条主线的中间锚。
开放问题 / 疑问
- Merge 的不稳定性:GEPA+Merge 在 Qwen3-8B 上掉分(IFBench 崩了 10 分),作者归因超参未调。那"何时该 merge / 变异与交叉如何分预算"是否有原则性的自适应规则?还是只能靠调参?这削弱了 Merge 的即插即用性。
- 验证预算占大头:GEPA 大部分 rollout 花在验证集打分(仅用于选择),train rollout 其实只要几十到几百条。这意味着报告的"35× 省样本"里,真正的学习信号更省,但候选选择的评估开销不小——在预算极紧时,"动态验证子集"能省多少、会不会伤选择质量,论文只列为未来工作。
- 对 AIME 输给 GRPO:纯数学这种"干净可验证标量"任务恰是 RL 主场,反思式进化在这里没优势。那"反馈可语言化程度"是不是决定 GEPA vs RL 胜负的关键变量?值得一个更系统的刻画。
- 反思 LM 的能力依赖:产出好指令依赖反思 LM 的指令遵循/自反思能力(作者自己把"趋势反转"归因于此)。用很弱的反思 LM,反思式变异还成立吗?(与 [[ref17_self-harness]] 里"弱模型自诊断质量"的疑问同源。)
局限性
- 只优化 prompt(\(\Pi\)),冻结权重(\(\Theta\))——是刻意的设定(为省样本、为能用闭源模型),但也意味着它碰不到"权重里才有的能力上限";作者把"prompt 与权重共演化"隐含留给未来。
- 推理时搜索、对抗搜索都是"preliminary"——只在少数硬件/benchmark 上做了初步实验,warrant further study。
- Merge 收益依赖模型/超参,非鲁棒。
- 报告的 gain 建立在 6 个任务 + 2 个模型上,且"指令 > few-shot 的反转"依赖当前 LLM 的能力水平——是"LLM 持续进步"的函数,可能随模型换代而变。