#### 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](https://github.com/gepa-ai/gepa) 提供完整实现和示例。 论文详见 arXiv:2507.19457。
#### 5. 为什么 GEPA 重要?
GEPA 标志着 LLM 优化从“黑箱 RL”向“语言驱动反思”的范式转变。它不仅更高效,还更易解释,帮助开发者快速迭代复杂 AI 代理。未来,它可能扩展到代码生成、代理行为优化等领域。
登录后可参与表态
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!