您正在查看静态缓存页面 · 查看完整动态版本 · 登录 参与讨论

GEPA 算法详解

✨步子哥 (steper) 2025年10月07日 05:08 0 次浏览

1. 什么是 GEPA 算法?

GEPA 全称为 Genetic-Pareto(遗传-帕累托优化),是一种创新的 AI 提示(prompt)优化框架,由 UC Berkeley 等机构的研究者于 2025 年 7 月提出。它专为优化大型语言模型 (LLM) 系统中的文本组件(如提示、代码片段或规范)而设计,使用任何评估指标来驱动改进。 与传统的强化学习 (RL) 方法(如 GRPO)不同,GEPA 不依赖于稀疏的标量奖励(如准确率分数),而是利用 LLM 的自然语言能力,通过“反思”系统行为来实现高效优化。这种方法能从执行轨迹(如推理步骤、工具调用和输出)中提取丰富反馈,诊断问题并迭代改进提示。

GEPA 的核心理念是:语言的解释性远比数字奖励更适合 LLM 学习。它通过进化搜索和 LLM 驱动的变异,生成高性能提示,通常只需少量 rollout(系统运行实例)即可显著提升效果——在多个任务上,GEPA 比 GRPO 平均提升 10%,最高达 20%,并节省高达 35 倍的 rollout。

2. GEPA 的工作原理

GEPA 结合了 遗传算法(Genetic Algorithm)和 帕累托优化(Pareto Optimization),通过以下步骤迭代优化提示:
  1. 采样系统轨迹
对于一个包含一个或多个 LLM 提示的 AI 系统,GEPA 先运行系统生成轨迹。例如,在多跳推理任务中,它会采样输入、LLM 的推理链、工具输出等完整过程。
  1. 自然语言反思
使用另一个 LLM(或同一模型)对轨迹进行反思,生成文本反馈。例如,如果数学问题提示导致错误解,GEPA 会诊断“指令不够清晰,导致步骤验证缺失”,并提出更新建议,如添加“验证每个步骤”。 这步利用语言的丰富性,提取高层次规则,而非简单分数。
  1. 变异与进化
基于反思,GEPA 使用 LLM 生成提示的“变异”版本(mutation)。它维护一个候选提示池,通过遗传操作(如交叉)组合多个变异体,确保多样性。
  1. 帕累托选择
采用多目标优化,避免陷入局部最优。GEPA 评估候选在多个维度(如准确率、多样性)的表现,选择“帕累托前沿”(Pareto front)——即在至少一个目标上优于其他候选的集合。这类似于“照明搜索”(illumination search),保持高性能且多样的提示池。
  1. 迭代与收敛
重复上述过程,直到评估指标满足阈值。整个流程高度样本高效,因为反思提供定向指导,而非随机探索。

伪代码框架(基于论文描述):

初始化: 候选提示池 P
While 未收敛:
    对于每个候选 p in P:
        运行系统,生成轨迹 T
        反思 T → 反馈 F (LLM 生成)
        基于 F 变异 p → 新候选 p'
    更新 P: 使用帕累托选择保留前沿
End
输出: 最优提示

3. GEPA 与传统方法的比较

使用表格对比 GEPA 与强化学习(如 GRPO)和其它提示优化器(如 MIPROv2):
方面GEPA (Genetic-Pareto)强化学习 (e.g., GRPO)MIPROv2 (传统提示优化)
**学习介质**自然语言反思(轨迹诊断、规则提取)标量奖励(e.g., 准确率梯度)数值分数 + 少量变异
**样本效率**高(几百 rollout 即可显著提升)低(需数千 rollout)中等(依赖随机搜索)
**适用场景**复合 AI 系统(多提示、工具调用)简单策略优化单提示工程
**优势**解释性强、多目标优化、防局部最优通用性强,但计算密集简单实现,但易卡住
**性能示例**HotpotQA 上提升 20%,35x 更高效基准,但 rollout 多类似 GEPA 但反思弱

数据来源于 HotpotQA、多跳 QA 等 4 个任务评估。

4. 应用与实现

  • 集成工具:GEPA 已集成到 DSPy 框架中,便于 Python 使用。示例代码:
``python:disable-run import dspy from dspy.teleprompt import GEPA # 定义模块(e.g., 提示模板) class BasicQA(dspy.Signature): question: str = dspy.InputField() answer: str = dspy.OutputField() # 使用 GEPA 优化 teleprompter = GEPA(metric=my_metric, num_candidates=10) compiled = teleprompter.compile(program, trainset=trainset) `` 这会自动运行进化过程。
  • 实际案例:在代码优化中,GEPA 使用编译器错误作为反馈,迭代修复 bug;在提示工程中,它能生成更精确的指令,如为 HotpotQA 添加“逐步验证来源”。
  • 开源资源:GitHub 仓库 gepa-ai/gepa 提供完整实现和示例。 论文详见 arXiv:2507.19457。

5. 为什么 GEPA 重要?

GEPA 标志着 LLM 优化从“黑箱 RL”向“语言驱动反思”的范式转变。它不仅更高效,还更易解释,帮助开发者快速迭代复杂 AI 代理。未来,它可能扩展到代码生成、代理行为优化等领域。

讨论回复

2 条回复
✨步子哥 (steper) #1
11-15 13:44

GEPA的核心思想源于一个深刻的洞察:语言的可解释性为大型语言模型(LLM)提供了一个远比稀疏标量奖励信号更为丰富的学习媒介。
======

✨步子哥 (steper) #2
11-15 13:45

https://jieyibu.net/htmlpages/GEPA.html