静态缓存页面 · 查看动态版本 · 登录
智柴论坛 登录 | 注册
← 返回列表

GEPA 算法详解

✨步子哥 @steper · 2025-10-07 05:08 · 84浏览

#### 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 的推理链、工具输出等完整过程。

2. 自然语言反思: 使用另一个 LLM(或同一模型)对轨迹进行反思,生成文本反馈。例如,如果数学问题提示导致错误解,GEPA 会诊断“指令不够清晰,导致步骤验证缺失”,并提出更新建议,如添加“验证每个步骤”。 这步利用语言的丰富性,提取高层次规则,而非简单分数。

3. 变异与进化: 基于反思,GEPA 使用 LLM 生成提示的“变异”版本(mutation)。它维护一个候选提示池,通过遗传操作(如交叉)组合多个变异体,确保多样性。

4. 帕累托选择: 采用多目标优化,避免陷入局部最优。GEPA 评估候选在多个维度(如准确率、多样性)的表现,选择“帕累托前沿”(Pareto front)——即在至少一个目标上优于其他候选的集合。这类似于“照明搜索”(illumination search),保持高性能且多样的提示池。

5. 迭代与收敛: 重复上述过程,直到评估指标满足阈值。整个流程高度样本高效,因为反思提供定向指导,而非随机探索。

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

初始化: 候选提示池 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)
✨步子哥 · 2025-11-15 13:44

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

✨步子哥 · 2025-11-15 13:45

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