GEPA 的核心主张:不要只把 rollout 压成一个 reward 标量。
这篇论文的关键不是“又一个 prompt optimizer”,而是一个更强的训练信号观点:复杂 AI system 的每次 rollout 都会产生大量自然语言中间产物,包括 reasoning、tool call、retrieval 结果、compiler error、rubric failure 等。RLVR/GRPO 通常把这些东西折叠成最终 reward;GEPA 反过来让 LLM 读这些 trace,反思失败原因,再把可泛化的规则写回 prompt。
问题不是“prompt 要不要优化”,而是“每次昂贵试错到底浪费了多少信息”。
论文把背景放在 compound AI systems:一个真实 agent / RAG / language program 往往不是单次 LLM call,而是多个 language modules、retriever、tool、control flow 组合起来的系统。这样的系统每跑一次,成本可能来自多轮推理、检索、工具调用、代码编译、benchmark evaluation。
RLVR/GRPO 的强项是可以用可验证 reward 训练模型权重,但它的典型使用方式需要大量 rollouts。论文认为,这在复杂工具链里会很贵,而且会丢掉“为什么错”的信息。比如代码任务里 compiler error、profiling log;检索任务里 missing document;instruction following 里没满足哪些约束;privacy delegation 里 quality 和 PII leakage 的分项。这些都比一个最终标量更接近人类 debugging 时真正用的信息。
作者阵容为什么值得注意
作者来自 UC Berkeley、Stanford、Notre Dame、Databricks、MIT 等机构。名单里有 Matei Zaharia、Ion Stoica、Dan Klein、Omar Khattab、Christopher Potts、Alexandros G. Dimakis 等熟悉系统、NLP、DSPy / language program 生态的人。这个背景解释了为什么论文不是只做 prompt trick,而是把 GEPA 写成“系统优化器”:它要优化的是一个带模块、反馈、预算和候选池的 AI workflow。
- rollout 昂贵时,不能靠 24k、100k 次试错硬堆。
- 闭源强模型无法 finetune 权重,但可以改 prompt。
- compound system 的错误往往是模块级的,需要可解释 credit assignment。
- 只追全局最好 prompt 容易早早掉进 local optimum。
- 把系统执行过程序列化成自然语言 trace。
- 把 evaluator 的文本诊断抽成 feedback function \(\mu_f\)。
- 让 reflection LM 改写某个模块 prompt。
- 用 Pareto selection 保留不同训练实例上的“赢家策略”。
GEPA 先把 prompt optimizer、RL finetuning 和 compound system 放进同一个目标函数。
论文定义 compound AI system 为 \(\Phi=(M,C,\mathcal{X},\mathcal{Y})\)。其中 \(M=\langle M_1,\ldots,M_{|M|}\rangle\) 是 language modules,\(C\) 是控制流,\(\mathcal{X},\mathcal{Y}\) 是系统输入输出 schema。每个模块 \(M_i=(\pi_i,\theta_i,\mathcal{X}_i,\mathcal{Y}_i)\),其中 \(\pi_i\) 是 prompt / instruction / demos,\(\theta_i\) 是底层模型权重。
这个写法故意同时允许优化 prompts \(\Pi_\Phi=\langle\pi_1,\ldots,\pi_{|M|}\rangle\) 和 weights \(\Theta_\Phi=\langle\theta_1,\ldots,\theta_{|M|}\rangle\)。这样 GEPA 与 GRPO 才能在同一个“系统优化”问题下比较:GRPO 主要走 \(\Theta\) 的权重更新;GEPA 固定 \(\Theta_\Phi\),只演化 \(\Pi_\Phi\)。
预算约束
现实问题是 rollout 有预算 \(B\):每次 rollout 是一次系统执行加评价。论文把 sample-efficient optimization 写成:
反馈函数 \(\mu_f\):GEPA 的“语言梯度”入口
普通 metric \(\mu\) 只输出分数;GEPA 需要的是 \(\mu_f\),它返回分数和文本反馈:
这里的 \(\mathrm{feedback\_text}\) 可以来自 evaluator 的自然语言解释,也可以来自程序环境的错误信息、检索任务中的 missing documents、rubric 中未满足的 constraints、或多个子指标的 breakdown。我的理解是:GEPA 的效率很大程度来自它没有把这些结构化诊断“压扁”。
GEPA = reflective mutation + genetic ancestry + Pareto-based illumination。
主循环
输入:系统 Φ、训练集 D_train、metric μ、feedback function μ_f、预算 B
拆分:D_feedback 用于产生反思信号;D_pareto 用于候选选择
初始化:候选池 P = [Φ],记录每个候选在 D_pareto 上的分数 S
while 预算未耗尽:
1. SelectCandidate(P, S): 从 Pareto front 中抽一个候选 Φ_k
2. SelectModule(Φ_k): 选一个要更新的模块 prompt π_j
3. 在 D_feedback 采样 minibatch,运行 Φ_k,收集 trace、score、feedback
4. reflection LM 读取当前 prompt + I/O trace + feedback,生成新 prompt π'_j
5. 得到新系统 Φ',在同一 minibatch 比较更新前后分数
6. 若 Φ' 更好:加入候选池,并在 D_pareto 上评估记录
输出:在 D_pareto 上平均分最高的候选 Φ*
Pareto candidate selection
如果每次只选择全局平均分最高的候选继续变异,就很容易陷入“一个局部策略已经不错,但再也改不动”的状态。GEPA 的选择策略改成按实例保留赢家:
然后把每个训练实例上的赢家合并成候选集合,删除被严格支配的候选。设 \(f[\Phi]\) 是候选 \(\Phi\) 在多少个实例上处于 non-dominated Pareto winner,GEPA 按 \(f[\Phi]\) 成比例采样下一轮要演化的候选。
某个 prompt 可能只擅长一类题,但那类题的策略值得保留。
如果候选 A 的赢家覆盖被 B 包含,A 就没有继续占预算的价值。
既保留多样性,又把预算集中到有 evidence 的候选。
System-aware Merge
GEPA+Merge 是 crossover:如果两个候选来自共同祖先,但分别优化了不同模块,且都优于祖先,那么可以把它们的模块级 prompt 组合成一个新候选。这个策略很像把两个分支上学到的互补经验合并。论文也承认 Merge 的收益依赖时机和预算分配:GPT-4.1 Mini 上更有帮助,Qwen3 8B 上固定超参会导致部分退化。
Reflection meta-prompt 的本质
附录里的 meta-prompt 并不神秘:它让反思模型看到当前 instruction、若干输入输出和 feedback,并要求它输出新的 instruction。重要的是它明确要求把 minibatch 中暴露的 niche/domain-specific information 和可泛化策略写进新指令。换句话说,GEPA 在做一种“把局部失败经验编译成未来可执行规则”的过程。
实验覆盖 6 个任务、2 类模型、4 组优化器,并把 rollout budget 尽量对齐。
实验使用标准 train / validation / test split。优化器可以访问 train 的文本和标签;可以监控 validation 分数用于候选选择或 early stopping,但不能直接读取 validation 内容;test 完全 held-out,只在优化后评估。
| Benchmark | 任务类型 | 系统 / module 形态 | Feedback function 例子 | Split |
|---|---|---|---|---|
| HotpotQA | Wikipedia multi-hop QA | 修改版 HoVerMultiHop,最后一跳回答问题 | 提示每阶段还有哪些 relevant docs 未检索 | 150 / 300 / 300 |
| IFBench | 精确指令与输出约束遵循 | 两阶段:先回答,再 rewrite 以满足 constraints | 描述哪些 constraints 满足 / 未满足 | 150 / 300 / 294 |
| AIME-2025 | 数学竞赛题 | 单步 Chain-of-Thought system | 基于最终答案格式和正确性 | AIME 2022-2024 训练/验证;AIME-2025 测试并重复采样 |
| LiveBench-Math | 持续更新数学题 | 单步 Chain-of-Thought system | 数学答案评价 | 368 题随机等分 |
| HoVer | open-domain multi-hop fact verification | 最多 3-hop retrieval,query writer 与 summary modules | 已检索正确文档 + 仍缺失文档 | 150 / 300 / 300 |
| PUPA / PAPILLON | 隐私保护 delegation | trusted rewriter + untrusted model + response rewriter | response quality 与 PII leakage breakdown | 111 / 111 / 221 |
模型和推理设置
开源实验和 GRPO 对比使用
Qwen3-8B。论文按官方建议使用 temperature
\(0.6\)、top-p \(0.95\)、top-k \(20\),训练和推理一致。
商业闭源模型实验使用
openai/gpt-4.1-mini-2025-04-14,temperature
\(1.0\)。所有模型推理 context window 设为最多 16384 tokens。
优化器配置
- Baseline:不做优化,直接评估初始系统。
-
MIPROv2:DSPy 生态里的 instruction + few-shot
optimizer;论文使用
auto=heavy,每模块 18 个 instruction candidates 和 18 组 few-shot sets。 - Trace / TextGrad:用 Trace 框架实现,同架构、同 initial prompt、同数据,并给它们同样的 metric 与 feedback functions;但 Trace 不支持 GEPA 那种 per-module feedback。
- GRPO:compound system 训练使用 LoRA,500 training steps,总计 24,000 rollouts;另在 HoVer 单模块设置里补充 full-parameter finetuning 对比。
- GEPA / GEPA+Merge:minibatch size 为 3;启用 merge 时最多调用 5 次;\(D_\mathrm{feedback}\) 是训练集,\(D_\mathrm{pareto}\) 是验证集。为了和 MIPROv2 公平比较,GEPA 的 rollout budget 按每个 benchmark 对齐 MIPROv2,预算差异控制在约 10.15% 内。
主要结果:GEPA 在 sample efficiency、闭源模型可用性、prompt 长度和跨模型迁移上同时占优。
Qwen3 8B:GEPA 对 GRPO 的核心对比
| Qwen3 8B | HotpotQA | IFBench | HoVer | PUPA | AIME-2025 | LiveBench-Math | Aggregate | Improvement |
|---|---|---|---|---|---|---|---|---|
| Baseline | 42.33 | 36.90 | 35.33 | 80.82 | 27.33 | 48.70 | 45.23 | -- |
| GRPO | 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(+Merge) total rollouts | 6871 | 3593 | 7051 | 2426 | 1839 | 1839 | 3936 | -- |
| GRPO total rollouts | 24000 | 24000 | 24000 | 24000 | 24000 | 24000 | 24000 | -- |
这张表支持一个强结论:在 Qwen3 8B 上,GEPA aggregate 54.85,高于 GRPO 48.91;除 AIME-2025 外,GEPA 在另外 5 个任务上超过 GRPO。注意 AIME 是重要例外:这里 GRPO 38.00 明显高于 GEPA 32.00,说明数学题权重更新仍然很强,不能把结论泛化成“prompt evolution 永远胜过 RL”。
GPT-4.1 Mini:GEPA 对 prompt optimizers 的闭源模型对比
| GPT-4.1 Mini | HotpotQA | IFBench | HoVer | PUPA | AIME-2025 | LiveBench-Math | Aggregate | Improvement |
|---|---|---|---|---|---|---|---|---|
| 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 | 65.67 | 49.83 | 54.67 | 90.05 | 52.67 | 59.31 | 62.03 | +9.00 |
闭源模型这里不能和 GRPO 做同类权重训练比较,因此主问题变成:同样是 prompt optimizer,GEPA 是否优于 MIPROv2 / TextGrad / Trace。表格显示 GEPA+Merge 的 aggregate improvement 为 +13.33,而 MIPROv2 为 +5.64,TextGrad 为 +6.11。更有意思的是 GEPA-Qwen-Opt:用 Qwen3-8B 优化出的 prompt 直接迁移到 GPT-4.1 Mini,aggregate 仍有 +9.00,超过直接在 GPT-4.1 Mini 上优化的 MIPROv2、Trace、TextGrad。
Pareto selection ablation:不是所有“反思变异”都一样
| Qwen3 8B 四任务 ablation | HotpotQA | IFBench | HoVer | PUPA | Aggregate | Improvement |
|---|---|---|---|---|---|---|
| Baseline | 42.33 | 36.90 | 35.33 | 80.82 | 48.84 | -- |
| SelectBestCandidate | 58.33 | 30.44 | 45.33 | 85.45 | 54.89 | +6.05 |
| BeamSearch | 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 |
这个 ablation 对理解论文非常关键:如果只是让 LLM 反思并一直改当前 best candidate,确实也能提升,但远不如 Pareto-based candidate selection。这说明 GEPA 的主要贡献不是“用 LLM 改 prompt”这么简单,而是把 prompt evolution 的搜索轨迹设计得不容易早熟收敛。
Prompt 长度与成本
论文还强调 instruction-optimized prompts 往往比 few-shot demonstration prompts 短。主文写到 GEPA / GEPA+Merge 的 prompts 最多可比 MIPROv2 短 \(9.2\times\)。这很重要:MIPROv2 优化 demos 可能提升效果,但运行时 input tokens 更长;GEPA 把经验压成 instruction,运行成本、延迟和服务吞吐会更友好。
One More Thing:GEPA 不止能优化 prompt
扩展实验把 GEPA 当 inference-time search:令 \(D_\mathrm{train}=D_\mathrm{pareto}\),允许优化器“过拟合”一组待解问题,并把一个任务中学到的失败经验迁移到其他任务。论文在 NPUEval 和 KernelBench 上做了初步代码生成实验。
这是一篇很值得重视的论文:它把“prompt 是程序”这件事做成了可比较的优化算法。
- 信号利用效率高:GEPA 没有浪费 evaluator 和系统 trace 里的文本诊断,这对 agent / tool-use / code / RAG 特别自然。
- 方法闭环完整:不是单次 reflection,而是 candidate pool、ancestry、Pareto selection、minibatch accept、validation selection 的完整 optimizer。
- 对闭源模型现实:很多最强模型不能训练权重,GEPA 这种外部 prompt-space optimizer 更符合实际部署。
- 实验覆盖有说服力:任务包括数学、检索、多跳问答、指令遵循、隐私 delegation;baseline 也覆盖 GRPO、MIPROv2、Trace、TextGrad。
- 反馈函数是核心依赖:GEPA 最强时往往需要高质量 textual feedback。低诊断、低可解释环境下优势会缩小多少?
- GRPO 对比仍有调参边界:论文用了 LoRA GRPO 和部分 full finetune 补充,但 RL baseline 的最佳调参空间很大。
- 统计稳定性:主表非常清楚,但我仍希望看到更多 seed / confidence interval,尤其是 prompt evolution 搜索可能受采样路径影响。
- validation 使用是重要杠杆:GEPA 大量 budget 花在 \(D_\mathrm{pareto}\) 评分上。它确实不读取 validation 内容,但 validation 子集大小、动态采样策略会显著影响效率。
我对“GEPA vs RL”的真实判断
这篇论文最有价值的读法不是“GEPA 要替代 RL”,而是:当任务反馈能被语言解释、rollout 很贵、系统由多个模块组成、模型权重不可训练或不值得训练时,GEPA 应该成为第一优先级的优化层。它很适合做快速适配、prompt / tool description / agent architecture 的低成本搜索;如果后续还需要权重层面的泛化或压缩,再把 GEPA 产出的策略、轨迹和优质样本喂给 RL / SFT,可能是更自然的组合。
对我们做 skill / paper2html 的启发
GEPA 本质上在做一件和“沉淀 skill”非常接近的事:把一批具体失败案例和反馈,压缩成未来可执行的自然语言程序。区别在于它有自动化评估函数和 Pareto selection,所以能系统地筛选哪些经验值得保留。这个思想可以反过来指导我们的工作流:每次生成论文 HTML 后,不只记“哪里错了”,还要把错误绑定到证据类型、检查脚本和模板规则,让下一篇自动规避。
公开证据来源
用于确认标题、作者、v2 时间、ICLR 2026 Oral 状态、摘要主张和公开代码链接。
用于阅读主文、算法、实验设置、表格、图和附录。
用于核对 TeX 中的表格、caption、算法和附录内容;页面不暴露本地源码路径。
用于确认公开实现、quickstart、API、adapter 与文档入口。
用于确认项目公开文档入口和使用路线。
公开 README 指向的实验复现 artifact 入口;用于后续更完整复现实验。