← 返回目录
ap2.4实操⏱ 约 11 分钟

提示词回归测试:改一个字,老 case 全量重跑

你的第一套 evals——以及一个"加了规则却白加"的真实教训

🔎 最后验证 2026-08📚 来源:本节三版提示词跑分为 ECS 实测(2026-08,deepseek-chat,temperature=0,20 条标注样本,脚本与原始输出见本节代码)🧰 DeepSeek API、Python
为什么学这个

这是全课的分水岭

在这一节之前,你改提示词的依据是"感觉这样更好";从这一节起,你有分数。而分数会告诉你一些让人不舒服的真相——比如这次实测里:我在提示词里认真加了 127 字的边界规则,分数一分没涨,成本涨了 43%。

如果没有评测集,我会以为自己变强了,然后把这个"改进"发上线。

💡 打个比方

写代码的人都懂:改完跑测试。没测试的重构叫"祈祷式开发"。

提示词是给模型的代码,凭什么不用测?评测集就是提示词的单元测试——改一个字,20 条老 case 全量重跑,分数说话。

场景:客服工单分类

任务很典型:把用户消息分到 5 类(退款/物流/商品咨询/投诉/其他)+ 判断紧急度。

评测集:20 条真实感消息 + 人工标注的标准答案,其中 5 条是故意放的边界样本:

边界样本难在哪
"发错货了,我要退!"物流问题导致的退款,主诉是退
"?"极短无意义
"东西不错就是发货慢了点,下次注意"有抱怨但不紧急
"我要投诉快递员态度差,还要退款"双意图,该以谁为主
"在吗"寒暄

评测集的质量决定评测的价值:全是简单样本的评测集,永远给你 100 分,毫无用处。边界样本才是分数的来源。

三版提示词,一次跑分

  • v1 朴素(84 字):就说清任务和输出格式
  • v2 加规则(273 字):加了 5 条带优先级的分类规则 + 紧急度判定标准
  • v3 加边界(400 字):在 v2 基础上,针对上面那 5 类边界情况逐条写了处理规则

真实跑分:

版本          分类        紧急度       全对        提示词长度    总token
v1_朴素       14/20      17/20      12/20      84          1231
v2_加规则      18/20      18/20      16/20      273         3587
v3_加边界      18/20      18/20      16/20      400         5127

结论:v2_加规则 最优(全对 16/20),比 v1 提升 +20 个百分点
      代价:提示词长了 189 字,总 token 多 2356

三个必须看懂的结论

① v1 → v2:加规则真的有用(+20 个百分点)。 看 v1 的错例就懂了:

✗ 「我买的鞋子小了,能换个大一码吗?」 应=退款 实=商品咨询
✗ 「买大了能否补差价换小的」        应=退款 实=商品咨询
✗ 「下单三天了还没发货,什么情况」   应=物流/不急 实=物流/紧急

模型不是笨,是不知道你们家的规矩:"换货算不算退款类"、"等三天算不算紧急"——这些是业务定义,不写清楚它只能猜。

② v2 → v3:精心加的 127 字边界规则,分数纹丝不动。 两版的错例一模一样(4 条完全相同)。也就是说:我针对边界写的规则,一条都没起作用,但每次调用都要多付这 127 字的钱。

这就是没有评测集时最容易发生的自我欺骗:我花了 20 分钟精心打磨规则,主观上确信"这版更严谨"。分数说:没有。

③ 剩下的 4 条错例,提示词可能治不了。 比如"你们家产品是正品吗?我怀疑是假货"——标注为紧急,模型判不紧急。这类标注本身可争议的样本,说明:要么你的标注标准要更明确(重新定义"紧急"),要么这就是当前方案的天花板(该上 AP3 的结构化约束或 AP5 的模型判分了)。

评测集怎么建(50 条起步法)

  1. 从真实数据里捞:上线前从竞品/论坛/客服记录里找;上线后直接用真实用户输入(AP5 讲回流);
  2. 必须含边界:一半正常样本、一半边界(混合意图、极短、反讽、超长、脏数据);
  3. 标注要写标准:不是凭感觉标,而是先写一页"什么算紧急"的定义,再按定义标——否则你的分数在测标注者的心情;
  4. 50 条起步:太少(10 条)分数抖动大,一条错就是 10 个百分点;太多(500 条)每次跑分太贵太慢。50-100 条是甜区,跑一次几毛钱、一分钟出结果。

🔧 动手做:给你的产品建第一套 evals(20 分钟)

  1. 跑本节代码 prompt_regression.py,看三版跑分(你的数字可能略有不同,模型有随机性)。
  2. 换成你的场景:把 CASES 换成你毕业方向里的 20 条真实样本 + 标准答案;把 PROMPTS 换成你的提示词。
  3. 跑基线(你现在用的那版提示词),记下分数——这是你的锚点
  4. 改一版试试:加一条你觉得能提分的规则,重跑。分数动了吗?动了多少?成本涨了多少?
  5. 把这个脚本存进你的项目(比如 evals/run.py),从今天起:改提示词 → 跑一遍 → 看分数 → 再决定要不要留

做到这里你应该有:一套属于你的评测集 + 一个基线分数 + 至少一次"改动前后对比"的记录。

为什么:这一节是全课主线的落地。有了它,你后面每一章的改进都能被验证——AP3 的 schema 约束提了多少分?AP4 的 RAG 让幻觉降了多少?没有分数,一切改进都是玄学。而且它会像本节这样,定期打你的脸——这正是它的价值。

❓ 测验
实测里 v3 比 v2 多了 127 字边界规则,但分数完全一样、成本涨 43%。正确的做法是?
⚠️ 避坑评测集会「过拟合」——你会不知不觉照着它调提示词

反复用同一套 20 条调提示词,调到 20/20 时,你可能只是把这 20 条背下来了。两个防御:① 留一份"从不用来调优"的保留集(比如另外 20 条,只在准备上线时跑一次);② 定期换血,把线上真实的失败样本补进评测集(AP5 的回流机制)。这和机器学习里的训练集/测试集是同一个道理——在自己出的题上考满分,不算本事

🤖 让 AI 帮你建评测集
我的 AI 功能是:【描述任务和输出格式】。请帮我设计一套 30 条的评测集:1) 15 条典型样本 + 15 条边界样本(混合意图/极短/反讽/超长/脏数据各若干);2) 每条给出输入和标准答案;3) 先写一页「标注标准」说明什么情况算什么类别,避免我自己标得前后不一。
✅ 小结

回归测试三句话:评测集是提示词的单元测试、边界样本才产生分数、改动必须看"提升多少 vs 代价多少";还有一个反直觉的实测教训:加了 127 字规则,分数纹丝不动

下一节把这套方法用到底:A/B 跑分——同一套评测集、两版提示词,不看感觉只看数据,顺便讲清"分差多少才算真的赢"。

下一节 → A/B 跑分:两版提示词,让数据判胜负
🔎 来源与核验· 2 条,点开核对
本节每个关键论断都对应一个可追溯的来源 —— 这是本课程"靠谱、不过时"的底线。
「20 条标注样本实测三版提示词:v1(84字)全对 12/20、v2(273字)全对 16/20、v3(400字)全对 16/20;v3 相对 v2 分数持平但总 token 从 3587 增至 5127」
📚 ECS 实测 prompt_regression.py(2026-08,deepseek-chat,temperature=0,5 并发)✓ 已核验 2026-08
「v2/v3 的 4 条错例完全相同,表明新增的边界规则未产生效果」
📚 同上实测逐条错例输出✓ 已核验 2026-08
智图软件的赞赏码
都看到这了,打个赏呗!
接下来 · ap2.5
A/B 跑分:分差多少,才算真的赢?
继续读下一节 →