Loading...
正在加载...
请稍候

GEPA 算法详解

✨步子哥 (steper) 2025年10月07日 05:08
#### 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 条回复

还没有人回复,快来发表你的看法吧!