先把当时的情况摆出来。prompt 从 v7 回滚到 v6,回答里仍出现 v7 才加的请用表格输出,查下来应用层缓存 key 只用了用户问题,没带 prompt 版本。

把日志和配置对完,能解释这个现象的基本就这几处。缓存 key 未包含 prompt 版本。另一种情况是模型侧前缀缓存仍保留旧前缀。

还有一种情况,回滚只改文件没重启服务。另外,缓存 TTL 设得过长 旧结果一直有效。

动手时先看缓存 key 是怎么拼的

grep -rn "cache_key" app/ | head

key 里加入 prompt 版本哈希

python patch_cache.py --key 'q:prompt_ver'

回滚后主动清理对应前缀

redis-cli --scan --pattern 'q:*' | xargs -r redis-cli del

末了用固定问题对比两版输出

python compare.py --prompt-a v6.txt --prompt-b v7.txt --n 10

手上没有现成的复现脚本,就照着线上请求手工拼了一个。

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

怎么算真的好了,看的是同一批现象。回滚后回答不再出现表格格式,缓存命中率短暂回落后恢复正常。

容易忽略的是,版本不进 key,回滚就只回滚了文件,线上的回答还是旧的。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189