用途:dspy.GEPA 是 DSPy 3.2.x 中的反射式(Genetic-Pareto)优化器,通过强语言模型读取指标的文本反馈,改写程序指令与 few-shots,并在验证任务上维护候选的 Pareto 前沿,适合复杂 DSPy 工作流。名称中 Pareto 是核心:它保留多候选前沿而非收敛到单一程序。
前置条件:需要端到端可运行的 dspy.Module;返回 dspy.Prediction(score=float, feedback=str) 的丰富反馈指标(DSPy 3.2.1 下返回 dict 会导致 dspy.Evaluate 报错);分离的 trainset 与 valset(GEPA 应尽量扩大训练集,验证集只需代表下游分布);以及 reflection_lm(建议强模型,temperature=1.0)。
主要能力:按指标反馈做指令与示例变异;候选选择策略 pareto 或 current_best;可开启 use_merge 合并候选;track_stats、track_best_outputs、log_dir 支持统计、推理时最优输出与断点续跑;支持 wandb/mlflow 跟踪。
使用方式:先 import dspy,设置 dspy.configure(lm=...),构造 dspy.GEPA(metric=rich_metric, auto="medium", reflection_lm=reflection_lm, ...),再调用 optimizer.compile(student=program, trainset=trainset, valset=valset)。auto 可选 light/medium/heavy,或用 max_full_evals / max_metric_calls 指定显式预算,二者不可同时使用。reflection_lm 必须在构造时提供。可用 optimized.save("optimized_program.json", save_program=False) 保存。
选择建议:指标能给出具体可教学批评、程序含多个 predictor 需针对性改进、或预算较小时,GEPA 优于 MIPROv2;指标仅有标量分数、需纯 few-shot 引导或训练集极大(500+)时用 MIPROv2;想更轻量反射优化可先试 SIMBA。BetterTogether 可用于串联多优化器,但有明确理由时再用。
限制与注意:仅标量、无反馈的指标会使 GEPA 退化为随机搜索;训练/验证混用会令 Pareto 选择过拟合;reflection_lm 用小模型难以有效批评;不要先在未验证指标上跑 heavy。务必设置 log_dir 以便续跑。构造时若报 “GEPA requires a reflection language model...”,需补上 reflection_lm。