人工智能15 min read

基于GEPA对Agent PE进行调优

hayrsiane
hayrsiane
2026/6/16
摘要

本文面向需要评估 GEPA 是否值得引入 Agent 调优流程的工程读者,覆盖技术原理、评测表现、与现有方案的对比、落地路径与风险五部分。

调研结论先行

  • 是什么:GEPA(Genetic-Pareto)是一套用 LLM 反思 + 进化搜索来自动优化提示的框架,把"读执行轨迹→诊断→改写提示"做成闭环,适用于任意可度量的文本参数(提示、代码、Agent 架构、配置)。

  • 核心优势:样本效率极高。论文实测以最多 35× 更少的 rollout 超越 GRPO 达 19%,并以 10%+ 优势超过 MIPROv2[GEPA: Reflective Prompt Evolution Can Outperform Reinforcement Learning]

  • 适用判断:rollout 昂贵、数据稀缺、仅有 API 权限、需要可解释优化过程的 Agent 场景 → 推荐试用 ↑;数据充裕且可大规模 rollout 的场景 → RL/微调仍可能更优。

  • 落地成本:低。已集成进 DSPy、MLflow、LangChain、Pydantic、Google ADK 等主流框架,最少 3 个样本即可起步。


#1 背景:Agent 提示调优的痛点

当前把 LLM 适配到下游任务主要有两条路:一是 RL(如 GRPO),在权重空间用策略梯度更新,通常需要数千到数十万次 rollout;二是人工提示工程,写一版、跑几个 case、改措辞、再跑,迭代慢且不可复现。

到了 Agent 场景,问题被进一步放大。Agent 本质是复合 AI 系统(Compound AI System)——由多个 LLM 模块、工具调用、检索、护栏按控制流串起来。最终只拿到一个系统级的成功/失败信号,根本无法定位是哪个模块、哪一步出了问题,信用分配(credit assignment)很难做。

说明:GEPA 的出发点是一个反直觉的判断——自然语言是比稀疏标量奖励信息密度更高的学习介质。与其把整条轨迹坍缩成一个数字,不如让一个强模型直接读轨迹,用自然语言诊断"哪里错、为什么、怎么改",再据此改写提示。一次自然语言更新往往能带来比一次梯度步大得多的行为变化[GEPA arXiv:2507.19457]


#2 技术原理:它怎么工作

GEPA = Genetic(遗传)+ Pareto(多目标)。它维护一个候选提示池,靠"反思变异 + Pareto 择优"迭代进化。三个核心组件如下。

2.1 遗传优化主循环

在评测预算(rollout)耗尽前反复执行:从候选池按策略选一个候选 → 在训练 minibatch 上执行并采集完整轨迹 → 反思生成变异候选 → 有提升则纳入池中、更新 Pareto 前沿 →(可选)对两个分别擅长不同任务的候选做系统级合并(merge)。

2.2 反思式变异:GEPA 的灵魂

系统执行时产生的轨迹(中间推理、工具调用与返回)捕获了各模块的行为;配上最终成败,LLM 就能做隐式信用分配,把结果归因到具体模块的提示。GEPA 的做法是:用 round-robin 轮流选一个待改进模块(保证每个模块都有机会被更新)→ 在 minibatch 上跑若干 rollout → 让 LLM 检视该模块的输入/输出/推理,反思性地归因并提出新指令 → 生成一个只替换了该模块提示的新候选[GEPA arXiv:2507.19457]

关键设计:评测轨迹本身也是诊断信号。GEPA 强调,除系统轨迹外,评测指标 μ 的中间过程(如代码评测里的编译、执行、性能剖析日志)同样高诊断价值,应连同分数一起喂回反思环节。开源实现里把它叫做 Actionable Side Information(ASI),相当于文本优化中"梯度"的功能对应物。实务上这意味着:你的反馈函数写得好不好,直接决定 GEPA 能调到多好。

2.3 Pareto 候选选择:为什么不能贪心选最优

如果每轮都只在"当前总分最高"的候选上继续改,很容易陷入局部最优——找到一个强势策略后就难以超越,预算耗尽却学不到新东西[GEPA arXiv:2507.19457]。GEPA 改用 Pareto"照明"策略:

  1. 2

    统计每个训练样本在所有候选上的最高分,构成 Pareto 前沿;

  2. 4

    保留"至少在一个样本上最优"的候选,留住每次变异发现的有效策略;

  3. 6

    剪除被严格支配的候选;

  4. 8

    从剩余候选里按"占优样本数"加权随机采样

效果是:在不过度扩张搜索的前提下逃离局部最优,把资源集中到已被验证有效的"获胜策略"上。


#3 评测表现:数据说话

论文用四个基准做评估,每个都配了现成的复合 AI 系统和文本反馈模块[GEPA arXiv:2507.19457]

基准任务 / 系统反馈模块给什么train/val/test
HotpotQA多跳问答各阶段尚待检索的相关文档150/300/300
IFBench精确指令遵循,两阶段"作答→按约束改写"已满足/未满足的约束描述150/300/294
HoVer多跳事实核查,最多 3 跳已检索正确文档 + 剩余待检索150/300/300
PUPA隐私保护委托(PAPILLON)质量分 + PII 泄露诊断

注意:IFBench 测试集刻意放了 58 个全新、分布外的输出约束,训练阶段接触不到——这是测泛化而不是测记忆,评测设计上比较严谨,参考价值更高。

对比的优化器与各自预算:Baseline(不优化)、MIPROv2(贝叶斯联合优化指令+少样本,2270–6926 rollout)、GRPO(权重空间 RL,LoRA,24000 rollout)、GEPA/GEPA+Merge(数百至数千)。两个被测模型:Qwen3-8B(含 GRPO 实验)与 GPT-4.1-mini。下表为主结果(论文 Table 1,聚合分与相对 Baseline 提升)[GEPA arXiv:2507.19457]:

模型 / 优化器HotpotQAIFBenchHoVerPUPA聚合提升
Qwen3-8B Baseline42.3336.9035.3380.8248.85
MIPROv255.3336.2247.3381.5555.11+6.26
GRPO43.3335.8838.6786.6651.14+2.29
GEPA62.3338.6152.3391.8561.28+12.44 ↑
GEPA+Merge64.3328.2351.6786.2657.62+8.78
GPT-4.1-mini Baseline38.0047.7946.3378.5752.67
MIPROv258.0049.1548.3383.3759.71+7.04
GEPA69.0052.7251.6794.4766.97+14.29 ↑
GEPA+Merge65.6755.9556.6796.4668.69+16.02 ↑

从数据里能提炼出三条对选型有用的结论:

  • 样本效率碾压 RL:GEPA 仅用 402/330/1179/306 次 rollout 就追平了 GRPO 跑 24000 次的最佳验证分,最高 78× 效率优势;若只算真正用于学习的训练集 rollout,达到最优仅需 737/79/558/269 次[GEPA arXiv:2507.19457]

  • 纯指令优化反超"指令+少样本":GEPA 在全部设置下稳超 MIPROv2,最高优势 11.1%(GPT-4.1-mini)/ 10.3%(Qwen3-8B),聚合增益是 MIPROv2 的两倍以上,且泛化间隙更小[GEPA arXiv:2507.19457]

  • Pareto 选择是有效设计:消融显示 Pareto 采样比"始终选最优"最高高 8.17%,聚合 +6.4%[GEPA arXiv:2507.19457]

注意一个反例:GEPA+Merge 在 Qwen3-8B 的 IFBench 上掉到 28.23(低于 Baseline 36.90),说明 merge 并非总是正收益,在某些任务上会引入退化。选型时 merge 应作为可开关项,并以验证集结果为准。


#4 与现有方案的横向对比

维度人工提示工程MIPROv2GRPO(RL)GEPA
学习信号人凭直觉标量分(贝叶斯)标量奖励(梯度)分数 + 文本反馈
所需样本/预算少但慢数千 rollout万级 rollout数百起 ↓
是否需权重访问是 ↑否(纯 API 可用)
可解释性低(黑盒权重)高(轨迹可读)
可复现性
适合 Agent 多模块难维护支持支持支持(Adapter)

#5 落地路径

GEPA 通过 Adapter 接口(实现 evaluatemake_reflective_dataset)接入任意系统,官方内置 DSPy Full Program、Generic RAG、MCP、TerminalBench、LangChain 等适配器,且已被 Shopify、Databricks、Dropbox 等用于生产[GEPA GitHub]。建议按以下顺序推进。

5.1 第一步:设计反馈函数(最关键)

评测器要返回"分数 + 可操作诊断",并区分失败类型(格式错/事实错/工具调用错)。诊断要具体到"哪一步、为什么",而不是泛泛的"答错了"。

python
import gepa.optimize_anything as oa def evaluate(candidate: str) -> float: result = run_my_agent(candidate) oa.log(f"Output: {result.output}") # 实际产出 oa.log(f"Error: {result.error}") # 工具/执行失败原因 oa.log(f"Expected: {result.expected}") # 期望与差异 return result.score

5.2 第二步:备数据 + 选模型

  • 数据:20–100 个代表性样本即可,少至 3 个也能跑[Optimizing GEPA for production];划分 train(反思学习)/ val(选型防过拟合)。

  • 双模型分工task_lm 用线上要部署的(可小可廉),reflection_lm 上最强的前沿模型——后者决定优化上限,且可与执行模型不同[GEPA beats RL with 35× fewer rollouts]。这也是"小模型 + GEPA 反超前沿模型"的原理:把强模型的智能蒸馏进一段可复用提示。

python
import gepa trainset, valset, _ = gepa.examples.aime.init_dataset() seed_prompt = {"system_prompt": "You are a helpful assistant. Answer the question. " "Put your final answer in the format '### <answer>'"} result = gepa.optimize( seed_candidate=seed_prompt, trainset=trainset, valset=valset, task_lm="openai/gpt-4.1-mini", # 执行模型 reflection_lm="openai/gpt-5", # 反思模型,决定上限 max_metric_calls=150, # 预算,从小起步 ) print(result.best_candidate['system_prompt']) # 报告值:GPT-4.1-mini 在 AIME 2025 上 46.6% -> 56.6%(+10pp)

5.3 第三步:接系统、设预算、分析

  • 单提示用 gepa.optimize;Agent/管线用对应 Adapter(DSPy / RAG / MCP / LangChain)。

  • 预算从 auto='light'max_metric_calls=150 起步,看收益曲线再加码。

  • 分析三件事:① 看 Pareto 前沿而非单一最优(track_stats=True),不同候选擅长不同子任务往往暴露任务内冲突目标;② 复盘 GEPA 产出的提示——它常写出一份完整"系统说明书",把领域知识、陷阱、分类讨论显式化,本身就是有价值的洞察[GEPA GitHub];③ 盯提示长度与推理成本。


#6 风险与适用边界

推荐使用

  • rollout 昂贵(复杂 Agent、工具调用、慢编译)

  • 数据稀缺(几十个样本)

  • 仅有 API 权限、无法改权重

  • 需要可解释、可审计的优化过程

慎用 / 需注意

  • 效果强依赖反思模型质量,反思模型弱则上限低

  • 数据充裕、可大规模 rollout 时,RL/全参微调可能更优

  • 当前仅优化指令,未含少样本示例优化

  • merge 非总正收益(见 §3 反例),须以验证集为准

  • 多数 rollout 消耗在验证集,验证集过大影响效率

总体判断:对于 rollout 贵、数据少、只能走 API 的 Agent 调优场景,GEPA 是当前性价比很高的选择——落地成本低、可解释性强、样本效率显著优于 RL。建议的引入姿势是"GEPA 快速打底 + 必要时叠加微调(BetterTogether)",而不是把它当成 RL 的完全替代。引入时最该投入精力的不是调参,而是把反馈函数写好——这是整条链路的杠杆点。


#附:主要信息来源

评论 (0)

Cmd + Enter 发送