回归测试:把提示当代码守护
一句话定义
提示回归测试在每次变更(或定期)自动重跑评估全集,任何历史已修复问题重新出现即报警——用工程世界的"测试套件"守护一个非确定性的系统。
为什么重要
提示的改动会引发无法直觉预测的连锁反应:修好日期格式,摘要突然开始编数字。没有回归,每个修复都是给未来的自己埋雷;有了回归,评估集就是提示的"测试套件",历史失败永远站在门口等着抓复发。它是 评估集构建:黄金样本与失败分类 评估集的价值兑现环节,也是团队能放心迭代的前提——没有回归的提示迭代,每个版本都是赌博。
前置知识
- 评估集构建:黄金样本与失败分类:评估集是回归的测试用例库;
- 自动评估与 LLM-as-Judge:无法程序判定的样本由校准过的 Judge 自动评分,回归才能全自动。
直观类比
提示回归像药品的稳定性试验:每一批新配方(新版本)都要重新过一遍全套检测(评估集),老毛病(历史失败)复发就直接打回——不是因为不信任配方师,是因为复方效应无法靠经验预判。
图示
提示变更 → CI 触发回归:
确定性层(T=0,零容忍):格式/Schema/边界/工具选择
统计层(Judge×3 取中位):开放回答质量 ≥ 基线
容忍层(仅监控):长文案波动带内
全绿 → 允许发布 任何红灯 → 阻断 + 逐样本 diff 报告核心概念
- 回归套件:评估全集 + 判定器(程序规则 + Judge)+ 基线分数表。
- 红绿判定:三类失败即红——格式/校验失败、边界行为错误(该拒没拒/误拒)、历史失败样本再次失败。
- 非确定性的处理:固定采样参数 + 关键样本多次运行取多数(自洽性(Self-Consistency):用多次采样投票换稳定 思想),或对波动样本标注容忍区间。
- 质量门禁:回归不过不允许发布(进 CI 流水线或手动流程均可,关键是强制)。
- 快照对比:不只看绝对通过率,还输出与上一版的逐样本 diff——哪几条从绿变红了。
原理与机制
回归对提示系统的特殊难点是非确定性:同样的输入两次运行可能一红一绿。机制上的解法分三档:
- 确定性层:格式、Schema、边界话术、工具选择——这些能程序判定,用温度 0 跑,允许零容忍;
- 统计层:开放回答质量——Judge 评分取多次中位数,与基线比不降级即过;
- 容忍层:天然波动的样本(长文案)——标注"仅监控不卡门禁",避免回归套件被随机性绑架后大家开始无视红灯。
另一条关键机制:失败样本永久化。每个从线上回流或回归中发现的失败,修好后其原始样本永远留在套件里——这是"历史不再重演"的机制保证,也是评估集随时间越用越强的原因。
公式或模型
本节不适用——门禁判定是规则集而非模型;波动容忍区间用多轮基线运行的经验分布(如 5 次基线的 min~max)设定。
实例或案例
案例:给客服提示搭最小回归流水线。 操作步骤:① 把 评估集构建:黄金样本与失败分类 的 50 条样本接进脚本:程序判定的(30 条)温度 0 单跑;Judge 判定的(20 条)跑 3 次取中位;② 输出报告:总通过率 + 与上版逐样本 diff + 红灯清单;③ 接入发布流程:红灯必须人工豁免并写明理由才能发布;④ 每次线上失败样本回流后,当天补进套件并重跑。最小脚本骨架:
for 样本 in 评估集:
输出 = 调用(提示版本, 样本.输入, T=0 或 Judge×3)
判定 = 程序规则(输出) or Judge(输出, 样本.rubric)
if 样本.曾经失败 and 判定 == 红: 级别 = "回归复发(阻断)"
报告: 通过率 / diff(上版→本版) / 红灯清单 / 回归复发数排错清单:
- 症状:红灯频繁但复现不了 → 非确定性样本混进了确定性层;挪到统计层或加多次取多数;
- 症状:大家开始无视红灯 → 容忍层太宽或 Judge 未校准噪声大;收紧容忍标注、重新校准(自动评估与 LLM-as-Judge);
- 症状:回归全绿但线上出问题 → 评估集没覆盖新流量模式,回流失败样本并重新分层(评估集构建:黄金样本与失败分类)。
常见误区
- 回归 = 偶尔手动跑一下:没有强制门禁的回归会被跳过,等于没有;必须卡在发布流程上;
- 零容忍一切:对天然波动样本零容忍会让套件变成随机红灯发生器,最终被团队抛弃;
- 只看总通过率:总分会掩盖结构性回退(某意图类型整体变差),必须看逐样本 diff 与分层分数。
自测题
- 为什么历史失败样本要永久留在回归套件里?
答:修复过的提示仍可能在后续改动中复发;永久保留使每次复发都被自动捕获,这是"历史不再重演"的机制保证。
- 三层判定各管什么,容忍层为什么"只监控不卡门禁"?
答:确定性层零容忍管硬错误;统计层管开放质量不降级;容忍层样本天然波动,卡门禁会造成随机红灯、摧毁套件公信力。
- 总通过率持平,如何发现结构性回退?
答:看逐样本 diff 与分层(意图/错误类别)分数——某层整体变红而总分被其他层掩盖。
与其他知识点的关系
校验-重试回路:让输出自修复 的最终成功率是回归的指标之一;输出格式控制三件套:指令、示例与结构 的格式合格率是确定性层的常驻用例;套件内容与分层方法来自 评估集构建:黄金样本与失败分类,判定器来自 自动评估与 LLM-as-Judge,发布衔接来自 提示版本管理与 A/B 实验。
延伸阅读
- 综述:The Prompt Report(Schulhoff et al., 2024)——评估流水线与质量保障的讨论。
来源
- The Prompt Report: A Systematic Survey of Prompting Techniques (Schulhoff et al.
- 2024)