GEPA 优化出来的提示词为什么又臭又长?ESPO:先诊断,再动手,投票定生死

💡 一句话总结:进化式提示词优化器普遍患「通胀病」------每轮加规则、越优化越长。ESPO 用「一轮诊断全部错误 → 四策略出候选 → bootstrap 投票定生死」三步治好它:平均超过 GEPA 3.76 个点,提示词还短了 47%。搞 prompt 工程的人可以直接抄作业。

导语:你的自动提示词优化,是不是越跑越长?

用 DSPy、GEPA 这类工具跑过自动提示词优化(automated prompt optimization)的朋友,大概率见过这个现象:优化跑到第十轮,打开产出的提示词一看------好家伙,三十条规则、一堆 caveat,活像一份法律法规汇编。准确率呢?没怎么动,有时候还跌了。

这就是圈内的老毛病:prompt bloat(提示词通胀) 。进化式优化器的每一轮反思都倾向于「再加一条规则补丁」,于是提示词像滚雪球。这篇新论文(ESPO,arXiv 2609.04197)给了一组扎心的测量:GEPA 产出的提示词平均是 ESPO 的 1.87 倍 长、极端情况 3 倍,却更不准。

为什么会这样?优化器又不傻。论文的诊断很到位:不是它想堆规则,是它的「进化」方式有三个结构性缺陷,堆规则是唯一出路。

想看原文?

这篇论文到底想解决什么问题?

三个缺陷,环环相扣:

  • 👀 看不全错误 :GEPA 每轮只随机抽 3--8 个错误来反思。用「优惠券收集问题」(想集齐一套 N 张卡,平均要抽多少次)算一笔账:要把所有系统性错误模式看全到 95% 概率,需要约 15 轮。也就是说前十几轮里,优化器一直在对着一小撮症状开药,规则自然越积越乱。
  • 🎲 变异太单一:只有一个变异算子,等于只有一种「口味」。碰上它搞不定的错误类型,它只能靠堆更多规则来硬凑------长度涨了,准确率没涨。
  • 🎯 选得不靠谱:约 10 个候选提示词,在 30 条样本的验证集上比一次就定胜负。这是教科书级的多重检验陷阱------最容易胜出的往往不是最好的,是最会利用这 30 条样本噪声的。而冗长的提示词恰恰更擅长过拟合小样本。

注意这三条的合力:看不全 → 打补丁;变异单一 → 只会打补丁;选不稳 → 专挑最长的补丁王。通胀就是这么来的。

它的思路是什么?

ESPO(Error-Structured Prompt Optimization)的思路一句话:把进化搜索改成结构化的统计估计,三个阶段正好对着三个缺陷打。

第一阶段:Diagnose(诊断)。 不再每轮抽几个错误,而是一轮收集全部训练错误,让反思 LLM 把它们聚成 3--7 个结构化模式(每个模式带描述、代表例、出现次数)。一次性看全所有病,后面所有动作都对着根因打。

第二阶段:Propose(提案)。 拿着诊断书,用四种口味互补的策略各生成 1--2 个候选:

  • 🩺 诊断修订:针对每个错误模式的根因改写提示词
  • 🧹 合并:不增加长度的前提下重写------去冗余、收紧语言,构造性防膨胀
  • ✂️ 消融:找出过度触发的规则,软化或删掉
  • 💉 事实注入:从错误例子里提取领域知识,作为事实背景注入

候选经过两轮交叉授粉(合并各家优点)和定向精炼,种群控制在 10 个以内。

第三阶段:Select(选择)。 不再「比一次定胜负」,而是对验证集做 20 轮 bootstrap 重采样(有放回抽样 30 条,重复 20 次),谁赢的轮次最多谁上岗------只有那些在数据扰动下反复赢的候选才可能是真的好。平手时偏向更短的提示词。

还有个漂亮的观察:GEPA 恰好是 ESPO 的退化特例------把策略数设为 1、bootstrap 轮数设为 1、诊断批量设为 3,就精确还原了 GEPA。三个开关各自对应泛化界的一项(偏差底、探索增益、选择误差),GEPA 三项全占弱值。这层关系让「为什么 ESPO 更好」从经验变成了结构。

效果到底怎么样?

实验设计里我最欣赏的一点:所有方法都从故意极弱的初始提示出发(比如情感分类任务给一句「偏向负面」,隐私任务干脆给「拒绝回答」)。以往基准都从精修好的提示出发,各方法挤在 1--2 个点里根本分不出高下;弱起点才是「优化器能不能雪中送炭」的真正考场。

七项公开基准(Tweet、MMLU、GSM8K、HotpotQA、ScoNe、HoVer、PUPA),Claude Sonnet 4.5 当学生模型:

  • 📈 平均 74.67% vs GEPA 70.91%(+3.76pp),配对显著性约 3.1 倍标准误;七个数据集全部不低于 GEPA,其中 HoVer +8.80、Tweet +6.18、MMLU +4.92
  • ✂️ 提示词短 47%(1004 vs 1878 字符),推理延迟一致更低
  • 🏅 弱起点下的分层很残酷:非反思系方法全军覆没(few-shot 演示配错误指令只会放大错误,Bootstrap 比不优化还低),COPRO/MIPROv2 落后 20--30 个点------这个赛道只剩反思系在真竞争

跨模型验证更狠:换成 Gemma 3 12B、Mistral 14B、Qwen3 32B、Claude Haiku 4.5 四个学生模型,ESPO 平均全部最佳。最大差距出现在 Qwen3 的 GSM8K 上:从 15.00% 直接拉到 91.40%。

消融实验则补上了理论的最后一环:只有多样性、没有 bootstrap 投票,反而掉 1.20%。这正是泛化界的预测------加了候选数量却不加固选择,只会放大选择误差。三个阶段缺一不可。

为什么你要关心?

  • 🛠️ DSPy/GEPA 用户可以直接迁移思路:哪怕不全套上 ESPO,两件事立刻能做------改提示前先把验证集错误全量聚类一轮(别再靠随机抽样反思);选提示词时加 20 轮 bootstrap 投票。这两个改动成本极低。
  • 💸 短提示是真金白银:短 47% 意味着推理便宜近一半、延迟更低,而且论文证明短不是靠堆长度惩罚,是消融和合并策略的自然结果。
  • 🧪 小验证集筛选的通用解:bootstrap 稳定性选择不限于提示词------任何「一堆候选、小验证集、选一个」的场景(特征选择、模型选型、A/B 方案)都适用。
  • 📐 先诊断后开方的工程哲学:全量错误 → 结构模式 → 分治策略,这个闭环适用于 agent 调试、评测分析,不止是提示词优化。

理性看待

冷静看三点。其一,弱起点设定虽然区分度高,但真实用户很少从废提示开始优化------从正常提示出发的增益幅度还是未知数。其二,验证集只有 30 条,这是它自己批评 GEPA 的点,bootstrap 只是缓解不是根治;主结果为单次运行加 3 种子标准差,还算扎实但不算豪华。其三,反思模型固定用 Sonnet 4.5,多花的调用成本与 GEPA 的对比论文没有细算,工程落地前建议先在小任务上跑个成本账。泛化界的可分性前提在部分数据集上也未经认证------作者自己在论文里注明了。

相关推荐
Y Shy11 小时前
2026.10 在受限的嵌入式机器人设备中使用LLM Agent
机器人·llm·嵌入式·agent
Behavior15 小时前
Kimi K3.1 疑似现身 LMArena:匿名代号 Kibitz、SGLang 单日六条加固 PR,月底有望官宣
llm·aigc·vibecoding
万联WANFLOW16 小时前
LiteLLM 1.107.0 投毒排查实战:依赖、Docker、CI 环境分别怎么查?
安全·docker·llm
米小虾16 小时前
KV 缓存全场景剖析
人工智能·llm
用户83145509803116 小时前
注意力稀释,上下文变长时模型在公式里丢了什么
人工智能·llm
GPUStack19 小时前
DeepInfer 能否跑赢 vLLM?GPUStack 八卡 B200 实测结果来了
llm·vllm·大模型推理·deepseek·gpustack·deepinfer
狂潮lister1 天前
第6篇 掀翻共识:注意力叠权才是一切,异源对撞破同源自噬|【狂潮元理论 2.1‑public】
人工智能·llm
先吃饱再说1 天前
大模型总是不按格式输出?LLM 结构化输出的四种解法
人工智能·llm
吴凡wudianmei1 天前
线上出问题不知道卡在哪?全链路追踪 + 三端统一部署
架构·langchain·llm