问题出现得很突然,日志倒是留得挺全。把线上 14 个 prompt 从 gpt-4o 2024-08-06 切到 gpt-4.1,同一批用例里 3 个模板开始返回裹着 markdown 代码块的 JSON,2 个摘要变长约 40%。切换前只发了一个冒烟请求,没做逐条对比,出问题后回滚靠改配置重启花了 25 分钟。
刚开始盯着「没有固定的用例集,验证全靠个人手测几条」,折腾了半个多小时,排掉了。
把日志和配置对完,能解释这个现象的基本就这几处。新模型对格式指令的遵循程度不同,旧 prompt 靠历史习惯才生效。还有一种是采样参数默认值有变化,temperature 与 top_p 的组合效果不一样。
还有一种情况,输出变长后触发下游截断,前端只看到半段内容。
动手时先把线上 prompt 和用例固化成可重跑的集合
python eval_run.py --prompts prompts/ --cases cases.jsonl --out run_new.jsonl
同一批用例在旧模型上跑一遍当基线
python eval_run.py --model gpt-4o-2024-08-06 --cases cases.jsonl --out run_old.jsonl
接着逐条对齐算通过率和长度差异
python compare_runs.py --a run_old.jsonl --b run_new.jsonl --metric exact --out diff.csv
等前面都确认过,再把格式类失败用例固化成回归断言
pytest tests/test_format.py -q
别只看报错消失,验证要多做一步。回归集通过率与旧模型持平或更高,输出长度偏差在 15% 以内,灰度 5% 流量观察两小时没有新增告警。
换模型不是改一个字符串,prompt 和断言要一起进版本库;灰度比例和回滚开关先备好再去动线上流量。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
