GEPA 不更新模型权重,而是把复合 AI 系统的每条执行轨迹——推理、工具调用、编译器报错、评分器反馈——当作学习材料,让一个 LLM 读出失败原因,直接改写对应模块的 prompt。它维护一组在不同任务实例上「各有所长」的候选,而不是只追当前平均分最高的那一个。 在四个任务、两个模型上,GEPA 的 Qwen3-8B 聚合分达 61.28,GPT-4.1 mini 达 66.97;IFBench 上只用 678 次 rollout,约为 GRPO 固定 24,000 次的 1/35。
问题:RL 的梯度只看到最终标量奖励,丢掉了轨迹里的语言信息。 GRPO 这类方法通常要几千到几万次 rollout 才能适配新任务;每次 rollout 可能包含昂贵的工具调用,或者模型根本不能微调(§1)。
方法:反思式 prompt 突变 + 帕累托候选选择。 对选中的候选和目标模块采样一小批任务,把模块输入、输出、推理和评分器反馈交给 LLM 反思,提出新 prompt;新候选只在小批量上评估,提升后才进入候选池并在验证集上打分。候选选择不是「总选当前最好」,而是保留每个任务实例上的赢家,再按赢的次数加权采样(§3.2、§3.3、Algorithm 1–2)。
结果:Qwen3-8B 上平均高 GRPO 10.14 个百分点,最高 19.0。 四个任务的逐项差是 HotpotQA 19.0、IFBench 2.73、HoVer 13.66、PUPA 5.19 个百分点;平均 10.14,论文写「10% on average」,摘要写「up to 20%」,§5 又写「up to 19%」——三处口径分别是 10% 平均 / 20% / 19%,不完全一致。不是每个任务都大幅领先。
代价:只优化 prompt,不碰权重;只做指令,不做 few-shot。 论文承认数据充足时权重更新可能更强;GRPO 基线只用 LoRA,没有做全参数微调;GEPA+Merge 在 Qwen3-8B 的 IFBench 上反而降到 28.23,低于 baseline 的 36.90(§5、Table 1)。
GEPA 的出发点:每次 rollout 的成本很高,但轨迹本身信息很丰富。
复合 AI 系统由多个 LLM 模块、工具调用和控制流组成。用 GRPO 这类 RL 方法优化时,系统跑完一条轨迹,评分器把它压成一个标量奖励,梯度只从这个奖励反传。轨迹里的推理链、检索到的文档、工具输出、编译器报错、评分器的中间判断,都被丢掉了(§1、§2)。
论文的观察是:这些轨迹本来就是自然语言,现代 LLM 可以直接读懂。与其只告诉模型「这条得 0.3 分」,不如把完整轨迹和失败原因交给 LLM,让它反思「哪个模块的哪条指令导致了失败」,再改写那条指令。这样一次 rollout 可以提供比一个标量多得多的学习信号(§1、§3.2)。
论文引用此前的 GRPO 工作:实际使用中常见几万到几十万次 rollout。每次 rollout 可能调用昂贵工具,或者需要采样大模型,成本很快成为瓶颈(§1)。
很多最强模型只能通过 API 访问,无法做 LoRA 或全参数微调。prompt 优化不需要权重访问,这是 GEPA 的适用场景(§1、§8)。
论文把优化目标写成:在最多 B 次 rollout 的预算内,最大化复合系统在任务分布上的期望得分。GEPA 只优化 prompt 集合 Π,不优化权重 Θ;这也是它与 GRPO 的根本区别(§2、Eq.2)。
GEPA 的位置是「用环境反馈做定向突变 + 用帕累托保持多样性」。
MIPROv2 同时优化指令和 few-shot 示例,用 TPE 贝叶斯搜索候选组合。论文的对照设置是 auto=heavy:18 个指令候选、18 组 bootstrapped 示例;rollout 预算从 PUPA 的 2,270 到 HoVer 的 6,926(§4.3)。
EvoPrompt 把 LLM 和进化算法结合,但论文认为它的 prompt 种群没有充分利用训练反馈;AlphaEvolve 直接在代码层面做进化,适合可显式编码的解,不直接解决「多个 prompt 模块」的复合系统(§7)。
GRPO 用组内相对优势估计梯度,更新 LoRA 或全参数权重。它能看到最终奖励,但看不到评分器产生奖励之前的语言轨迹;论文的 baseline 固定 500 步、24,000 次 rollout(§4.3)。
GEPA 与三者都不同:它像进化算法一样维护候选种群,但突变由自然语言反馈驱动;它像 prompt 优化器一样不改权重,但优化对象是复合系统里的每个模块,而不是单个整体 prompt;它像 RL 一样使用环境反馈,但反馈是文本,不是标量梯度(§3、§7)。
奖励仍然可以只是 0/1 或任务得分;变化发生在「从哪条轨迹学、学哪个模块、下一步选谁」。
GEPA 把复合系统记为 Φ = (M, C, X, Y),M 是语言模块,C 是控制流。每个模块 Mi 有 prompt πi 和权重 θi;GEPA 只改 π,不改 θ(§2)。候选池 P 初始只有原始系统;每次迭代从池中选一个候选、选一个模块、改这条模块的 prompt,生成新候选(§3.1、Algorithm 1)。
对选中的候选,GEPA 从训练集抽一个小批量(论文用 b=3),在目标模块上跑几条 rollout,记录模块的输入、输出、推理,以及最终成功/失败。反馈函数 μf 还可以返回评分器执行过程中的文本,例如编译器报错、检索到了哪些文档、哪些约束满足/未满足(§3.2)。
这些材料被拼成一个反思 prompt,交给 LLM;LLM 要判断「目标模块的 prompt 缺了什么、哪条指令导致失败」,并输出一条新的 prompt。新候选是当前候选的副本,只替换目标模块的 prompt。模块按 round-robin 选择,保证每个模块都有机会被更新(§3.2、Algorithm 1)。
论文强调「评估轨迹」也是学习信号:评分器在给出最终分数前可能执行编译、运行、profiling 等步骤,这些步骤的文本比最终分数更有诊断价值。GEPA 把评分器改造成 μf,在返回分数的同时返回反馈文本(§3.2)。
如果每次都选当前平均分最高的候选来突变,优化器很容易在找到一个局部最优后停住:它会把剩余预算都花在改进这一个候选上,而不是探索其他策略。论文用 Figure 6 展示这一点:SelectBestCandidate 在找到一个新策略后反复尝试改进它,最终耗尽预算(§3.3)。
GEPA 的做法是:对每个训练实例,找出所有候选在该实例上的最高分;保留「至少在一个实例上达到最高分」的候选,去掉被严格支配的候选;再按「在多少个实例上是最好的」加权采样。这样,一个候选即使平均分不高,只要它在某个任务上是唯一赢家,就有机会被选中并继续进化(§3.3、Algorithm 2)。
此外还有一个可选的 Merge 策略:从两个候选的谱系里各取表现最好的模块,拼成一个新候选。Merge 最多调用 5 次;它在 GPT-4.1 mini 上最多带来 5.0 个百分点的提升,但在 Qwen3-8B 上并不总是有效(§3、§4.3、§5、Appendix F)。
论文给的是 rollout 数、模型和硬件;没有给美元成本或总 GPU 小时。
为了公平比较,GEPA 的 rollout 预算按每个 benchmark 对齐到 MIPROv2 的实际消耗;两边提案/验证流程不同,预算差异始终在 10.15% 以内(§4.3)。
GEPA 的 minibatch size 为 3;Merge 启用时最多调用 5 次。没有梯度更新、没有 LoRA、没有优化器状态(§4.3)。
两个模型分别代表开源与商业模型;所有模块共用同一个模型,上下文上限 16,384 token。Qwen3-8B 温度 0.6、top-p 0.95、top-k 20;GPT-4.1 mini 温度 1.0(§4.2)。
训练实验在 1×H100/A100 80GB 上跑,rollout 用独立 GPU;GRPO 基线 500 步、24,000 次 rollout。论文没有给 GEPA 的 API 费用、GPU 小时或每个任务的 wall-clock(§4.3)。
GRPO 基线的配置是:每步 group size 12、4 个训练实例(总 batch 48)、LoRA rank 16、α=64、dropout 0.05、学习率 1e-5、β=0.01、梯度裁剪 0.1、每 20 步累积一次梯度;500 步共 24,000 次 rollout(§4.3)。这些数字对复现很重要,也说明「35× 更少 rollout」比较的是固定 24,000 的 GRPO,而不是调过预算的 RL。
下面的回路是 GEPA 的核心循环;Merge 是从帕累托池分出的可选分支。
注意两个细节。第一,新候选只在 minibatch 上评估;只有比父代更好,才会进入候选池并在验证集 Dpareto 上打分。这控制了每次迭代的成本,也让「提升」是相对父代,而不是相对全局最优(Algorithm 1)。第二,Merge 不是每轮都做,最多 5 次;它的收益依赖两条已经分化出不同优势模块的谱系(§5、Appendix F)。
先看主表,再看效率与消融;最后看 GEPA+Merge 何时帮倒忙。
Qwen3-8B 上,GEPA 的四项分数是 HotpotQA 62.33、IFBench 38.61、HoVer 52.33、PUPA 91.85,聚合 61.28。GRPO 是 43.33/35.88/38.67/86.66,聚合 51.14;逐项差为 19.0/2.73/13.66/5.19 个百分点,平均 10.14。GEPA 在四项上都高于 GRPO,但 IFBench 只高 2.73,PUPA 只高 5.19;「最高 19」来自 HotpotQA 单任务,不是平均。
| 模型 / 方法 | HotpotQA | IFBench | HoVer | PUPA | 聚合 | 表内提升(百分点) |
|---|---|---|---|---|---|---|
| Qwen3-8B · Baseline | 42.33 | 36.90 | 35.33 | 80.82 | 48.85 | — |
| Qwen3-8B · MIPROv2 | 55.33 | 36.22 | 47.33 | 81.55 | 55.11 | +6.26 |
| Qwen3-8B · GRPO | 43.33 | 35.88 | 38.67 | 86.66 | 51.14 | +2.29 |
| Qwen3-8B · GEPA | 62.33 | 38.61 | 52.33 | 91.85 | 61.28 | +12.44 |
| Qwen3-8B · GEPA+Merge | 64.33 | 28.23 | 51.67 | 86.26 | 57.62 | +8.78 |
| GPT-4.1 mini · Baseline | 38.00 | 47.79 | 46.33 | 78.57 | 52.67 | — |
| GPT-4.1 mini · MIPROv2 | 58.00 | 49.15 | 48.33 | 83.37 | 59.71 | +7.04 |
| GPT-4.1 mini · GEPA | 69.00 | 52.72 | 51.67 | 94.47 | 66.97 | +14.29 |
| GPT-4.1 mini · GEPA+Merge | 65.67 | 55.95 | 56.67 | 96.46 | 68.69 | +16.02 |
主图 JS 逻辑:pct = value / max * 100(本图 max = 100),柱高写 pct.toFixed(1) + '%',右侧读数写 value.toFixed(2)。因为 max = 100,pct 在数值上等于 value。
参数组 A:Qwen3-8B · HotpotQA
Baseline:42.33 / 100 × 100 = 42.33 → toFixed(1) = 42.3,读数 42.33;
GRPO:43.33 / 100 × 100 = 43.33 → 43.3,读数 43.33;
GEPA:62.33 / 100 × 100 = 62.33 → 62.3,读数 62.33。
同参数下 MIPROv2 为 55.3 / 读数 55.33,GEPA+Merge 为 64.3 / 读数 64.33。
参数组 B:Qwen3-8B · IFBench
Baseline:36.90 → 36.9,读数 36.90;GRPO:35.88 → 35.9,读数 35.88;
GEPA:38.61 → 38.6,读数 38.61;GEPA+Merge:28.23 → 28.2,读数 28.23。
GPT-4.1 mini 的 GRPO 是 null,JS 跳过该柱,不产生柱高或读数。
论文报告 GEPA 在 HotpotQA/IFBench/HoVer/PUPA 上达到最优测试性能分别用 6,438/678/6,858/2,157 次 rollout;对应 GRPO 固定 24,000 次,IFBench 的比值约 35.4×(本页复算:24,000/678;原文 §5 写「35× fewer」)。若只算训练集 rollout(真正用于学习的部分),四个任务是 737/79/558/269 次;论文说大部分 rollout 花在验证集候选选择上,这是 GEPA 成本结构的关键(§5、§8)。
「追平 GRPO 最佳验证分」只需要 402/330/1,179/306 次 rollout;原文写「up to 78× greater sample efficiency」,其中 24,000/306≈78.4 是本页复算(§5)。注意这是「达到 GRPO 最佳验证分」的口径,不是「达到 GEPA 最优测试分」;两者不要混用(§5)。
预算图 JS 逻辑:pct = value / max * 100,柱高写 pct.toFixed(1) + '%',数值写 value.toFixed(0);三个视图的 max 分别是 8,000 / 800 / 1,500。
参数组 A:总 rollout · IFBench
678 / 8,000 × 100 = 8.475%;(8.475).toFixed(1) = 8.5,所以柱高 8.5%,数值 678。
参数组 B:追平 GRPO 最佳验证分 · PUPA
306 / 1,500 × 100 = 20.4%;(20.4).toFixed(1) = 20.4,所以柱高 20.4%,数值 306。相对 GRPO 固定 24,000 次的倍数:24,000 / 306 = 78.431… → 78.4×。
把上方切到对应视图,柱高与读数应与这里逐位一致;跨视图柱长不可直接比较。
Table 2 在 Qwen3-8B 上比较 SelectBestCandidate 与 GEPA:SelectBestCandidate 的四项是 58.33/30.44/45.33/85.45,聚合 54.89;GEPA 聚合 61.28,高 6.4 个百分点。最大单项差在 IFBench:38.61 对 30.44,差 8.17 个百分点。论文的解释是:总选当前最好会让优化器在第一个局部最优上耗尽预算;帕累托选择保留了在不同实例上获胜的候选(§5、Figure 6)。
GPT-4.1 mini 上,Merge 把 GEPA 的 HoVer 从 51.67 提到 56.67,高 5.0 个百分点;但 HotpotQA 从 69.00 降到 65.67,低 3.33 个百分点。Qwen3-8B 上,Merge 并非全面变差:HotpotQA 从 GEPA 的 62.33 升到 64.33(高 2.0 个百分点),但 IFBench 只有 28.23,比 GEPA 的 38.61 低 10.38 个百分点,也比 baseline 的 36.90 低 8.67 个百分点;聚合 57.62 低于 GEPA 的 61.28。论文把原因归到「Merge 与突变之间的预算分配、以及何时调用 Merge」没有按模型调参;同一套超参在 Qwen 上不是最优(§5、Appendix F)。
GEPA 的优势有明确的适用条件;论文自己列了若干限制。
论文明确说:prompt 学习与权重学习的边界还不清楚;rollout 昂贵时 GEPA 有优势,但数据充足或大规模 rollout 可行时,权重更新可能更好。GRPO 基线只用 LoRA,没有做全参数微调(§8)。
GEPA 当前只改指令,不选示例。MIPROv2 同时优化指令和示例;在示例很重要的任务上,GEPA 可能放弃了一部分性能。论文把「prompt 更短」当作成本优势,但也承认这是限制(§8)。
GEPA 的总 rollout 里,多数用于在 Dpareto 上评估候选,真正用于学习的训练 rollout 少得多。论文建议研究更小的验证集,或在动态选择、子采样的验证集上跟踪分数,来进一步省预算(§5、§8)。
GEPA+Merge 在 GPT-4.1 mini 上聚合最高,但在 Qwen3-8B 上聚合 57.62 低于 GEPA 的 61.28,IFBench 甚至低于 baseline。Merge 的调用时机与预算分配需要按模型/任务调参(§5、Appendix F)。
结果层面还有三条限制。第一,「35×」是 IFBench 单任务:HotpotQA 是 6,438 对 24,000(约 3.7×),HoVer 约 3.5×,PUPA 约 11×;不能把 35× 说成四个任务的平均。第二,「10% 平均」是 Qwen3-8B 四个任务逐项差的平均:19.0、2.73、13.66、5.19 的算术平均是 10.145 ≈ 10.14(聚合差 61.28−51.14 也是 10.14);它不是聚合分的相对提升,也不是 GPT-4.1 mini 的结果。第三,没有统计检验:Table 1 只给单点分数,未报告置信区间、方差或随机种子;是否来自单次运行原文未说明。页面不把 0.几 的差说成显著(Table 1、§5)。
方法层面的边界是「反馈质量」:GEPA 假设评分器能给出有诊断价值的文本。如果任务只有 0/1 奖励、没有可读的中间反馈,反思突变可能退化成「让 LLM 猜哪里错了」(推断,由 §3.2 的反馈构造反推);论文把「反馈工程」列为未来方向,没有系统比较不同反馈的质量(§8)。