GEPA框架的提示词进化:替代强化学习
系统指令和智能体的调优通常会陷入无休止的手动文本调整。修复一个表述——逻辑改进了,但输出格式却崩了。使用像GRPO这样的强化学习来进行这种调整又太过昂贵:算法需要数万次运行,而所有反馈最终都归结为一个分数。
最近我探索了GEPA(遗传-帕累托)仓库。该项目由加州大学伯克利分校和斯坦福大学的研究人员开发,提供了一种从根本上不同的优化任何文本参数的方法。
项目的核心理念
经典优化器将系统视为黑盒:它们在输出端获得一个数值分数,然后尝试猜测下一步该往哪里移动。GEPA的工作方式不同。该框架向神经网络提供完整的执行日志——错误、性能分析器输出、堆栈跟踪和中间推理过程。
模型像开发者在调试时一样分析这些数据。它能看到失败的具体原因,并提出有针对性的修复方案。然后遗传算法开始发挥作用,结合帕累托前沿的考量:系统保留在任务不同子集上表现最佳的文本变体。
框架能做什么
这种方法支持对各种元素的自动调优:
- DSPy和LangChain中单个模型或链的提示词
- 智能体架构及其技能组合
- 任务规划规则和配置文件
- MCP协议的工具描述
在作者的测试中,GPT-4.1 Mini模型在AIME数学基准上的准确率从46.6%提升到56.6%,仅需一百次迭代。Databricks工程师使用GEPA将智能体运营成本降低了90倍,同时没有损失质量。
优化过程如何运作
框架在五个顺序步骤的循环中运作:
- 从帕累托前沿选择候选。系统挑选在特定测试组上表现最佳的变体。
- 在小数据集上运行。在此期间,收集所有执行日志和错误。
- 反思。反射器模型读取文本形式的失败日志并制定诊断。
- 变异。考虑所有祖先的过去错误,创建提示词或代码的新版本。
- 决策。如果新候选展示了真正的改进,则将其添加到共享池中。
在作者的术语中,所有诊断被称为可操作侧信息。在文本优化中,它充当传统机器学习中梯度的等价物。

如何编写代码
你可以从PyPI安装该库:
pip install gepa
该项目有一个名为optimize_anything的简单API。它允许你调优不仅是提示词,还有任何文本产物:
import gepa.optimize_anything as oa
from gepa.optimize_anything import GEPAConfig, EngineConfig, optimize_anything
def evaluate(candidate: str) -> float:
result = run_my_system(candidate)
oa.log(f"Output: {result.output}")
oa.log(f"Error: {result.error}")
return result.score
result = optimize_anything(
seed_candidate="Начальный текст инструкции или кода",
evaluator=evaluate,
objective="Уменьшить количество ошибок форматирования вывода",
config=GEPAConfig(engine=EngineConfig(max_metric_calls=100)),
)
通过oa.log()发送的日志正是进入反射器模型进行错误检测的内容。如果你已经在使用DSPy,该工具作为dspy.GEPA开箱即用。
何时通过GEPA调优真正值得
该方法在以下场景中表现最佳:
- 运行具有许多外部工具的智能体
- 小型训练数据集,只有5-10个示例
- 通过API访问的闭源模型
- 昂贵或缓慢的调用,包括代码编译和模拟
强化学习需要5,000-25,000次运行才能收敛,而该算法通常只需要100-500次评估。
总结
该框架解决了手动文本指令调优的痛点。令人欣喜的是,该工具已经集成到MLflow、Pydantic AI和Google ADK中,所以你不需要在项目中引入一堆额外的代码。从文档中的简短教程开始,或者在几个最有问题的提示词上运行optimize_anything。
相关项目