提示词越优化越长,效果却不升反降——这是进化式提示优化最常见的翻车现场。
GEPA 这类进化优化器每轮迭代就往提示里追加规则和注意事项,跑几轮下来提示膨胀到原来的 3 倍,准确率却原地踏步。一项新研究给出的 ESPO 方法,把这个问题治住了:7 个基准平均提升 3.76 个百分点,提示反而短了 47%。这篇我拆开讲原理和落地。
一、开篇痛点
提示词是成本的一部分:每多一个 token,每百万次调用就多一笔钱。提示从 600 字膨胀到 1800 字,调用量一大,账单一目了然。
更糟的是膨胀往往换不来质量。进化式优化"每轮把失败的教训写进提示",听起来合理,实际上是把规则越堆越多,模型被冗长指令淹没,反而更糊涂。
二、原理速览:膨胀从哪来
进化式优化的通病有三个:
问题1:错误观察不完整
只看当前失败的样本 -> 看不到错误全貌
问题2:搜索多样性不足
候选生成策略单一 -> 反复在同一条路上打转
问题3:选择不可靠
凭单次表现选提示 -> 选了碰运气的版本
三个缺陷叠加,结果就是提示越来越长、越来越臃肿,却没有系统性变好。
三、ESPO 三阶段:诊断、生成、选择
ESPO 把提示优化拆成三个明确阶段:
Diagnose(诊断)
一次性把所有训练错误聚类成结构化模式,看清错误全貌,而不是逐条修补。
Propose(生成)
用四种互补策略生成候选提示,每种策略有独立的偏差,避免同质化。
Select(选择)
用 bootstrap 稳定性选择挑出最稳的候选,而不是看单次表现。
训练错误 -> 聚类诊断 -> 四策略生成候选 -> 稳定性选择 -> 最优提示
每个阶段解决一个缺陷,三个缺陷一起治。
四、实测数据:又短又准
在 7 个公开 NLP 基准上(Tweet、MMLU、GSM8K、HotpotQA、ScoNe、HoVer、PUPA):
| 指标 | ESPO | GEPA(基线) |
|---|---|---|
| 平均准确率 | 74.67% | 70.91% |
| 提示长度 | 1,004 字符 | 1,878 字符 |
| 提升 | +3.76 pp | 基准 |
准确率更高、提示短了 47%,推理还更快。跨 4 个学生模型(Gemma 3 12B、Mistral 14B、Qwen3 32B、Claude Haiku 4.5)测试,ESPO 在每个模型上都是最优。
五、关键消融:多样性不能单干
最值得注意的消融结果:只加多样性、不用 bootstrap 选择,效果反而下降 1.20 个百分点。
这说明"生成更多候选"和"稳定地选择"必须配套。多样性负责打开搜索空间,稳定性选择负责收敛到正确答案,缺一个都不行。
六、落地:Python 接入示例
实际使用中,我把 ESPO 的产出当成普通提示词模板管理,通过 4sapi(https://4sapi.com)统一接入层做多轮评估:
from openai import OpenAI
client = OpenAI(api_key="4sapi-key", base_url="https://4sapi.com/v1")
OPTIMIZED_PROMPT = "根据输入文本,输出分类标签。只输出标签本身。" # ESPO 产出的精简提示
def classify(text: str) -> str:
resp = client.chat.completions.create(
model="qwen3-32b",
messages=[
{"role": "system", "content": OPTIMIZED_PROMPT},
{"role": "user", "content": text},
],
max_tokens=10,
)
return resp.choices[0].message.content.strip()
# 评估稳定性:同一输入跑 5 次看方差
results = [classify("今天天气很好,适合出门") for _ in range(5)]
print(results)
提示短了,单次调用 token 减少,批量评估的成本同步下降。以一个日调用 10 万次的分类任务为例,提示从 1,878 字符压到 1,004 字符,配合 32B 模型,单日 token 消耗大约省下四成,换算成月度账单是很可观的数字。
优化流程本身也建议固化:把诊断样本、候选生成、稳定性评估写成脚本,每周跑一次,而不是每次手工改提示。提示词和代码一样需要版本管理,谁改的、为什么改、效果如何,都应该留痕。
七、成本与风险提示
- 优化本身有成本:诊断和评估要跑多轮模型调用;
- 稳定性选择要多次采样,评估成本翻倍,但换来的是可复现的结果;
- 提示过短可能丢上下文,要保留任务必需的示例;
- 换模型后提示可能要重新优化,不同模型的提示偏好不同。
还有一个常被忽略的成本项:提示模板的维护。提示一旦进入生产,就会有人不断往里加规则——加一个特例、补一句说明、贴一段历史结论。半年后回看,提示又膨胀回去了。ESPO 这类系统性优化应该纳入定期维护节奏,而不是只在出问题时才做一次。把"提示长度"和"准确率"两个指标挂在监控上,超过阈值自动告警,膨胀问题就不会悄无声息地复发。
八、检查清单:提示优化该怎么做
- 先跑一轮诊断,看清错误模式再动手,不要逐条打补丁;
- 用多种策略生成候选,避免同质化;
- 用 bootstrap 稳定性选择,而不是单次表现;
- 评估时多次采样,记录方差;
- 监控提示长度与准确率的双指标,膨胀立刻回滚;
- 换模型后重新验证提示是否仍然有效。
九、我的结论
提示优化的目标不是"越长越全",而是"最短且最准"。ESPO 的思路值得直接抄:先诊断、再多样化生成、最后稳定性选择。提示短 47% 意味着同一预算下可以多跑近一倍的任务,这笔账很划算。
总结
进化式提示优化容易陷入"越长越不准"的陷阱,ESPO 用诊断、多样化、稳定性选择三阶段治好了这个问题:7 个基准 +3.76pp、提示短 47%。欢迎在评论区聊聊提示词优化的踩坑经历。