先把当时的情况摆出来。提示词灰度期间新版本复用旧缓存,10% 的灰度用户看到的是老提示词生成的内容,回滚后又有用户拿到新版本的缓存,两边都不对。

把日志和配置对完,能解释这个现象的基本就这几处。缓存键只有问题和模型名,没有提示词版本。另一种情况是灰度期间两版共用同一个缓存命名空间。

还有一种情况,回滚时没有清理新版本写入的缓存。另外,缓存 TTL 比灰度周期长。

动手时先确认缓存键的组成字段

python -c "print('key=md5(q+model)')"

接着把 prompt 版本号并进缓存键

python -c "import hashlib;print(hashlib.md5('q|gpt-4.1|p_v9'.encode()).hexdigest())"

灰度与正式用不同前缀

python -c "print({'gray':'p_v9_gray:','prod':'p_v8:'})"

回滚时按前缀清理灰度缓存

python cache_purge.py --prefix p_v9_gray:

别只看报错消失,验证要多做一步。灰度用户只命中新版本缓存,回滚后旧版本缓存全部命中旧值,两边答案不再互串。

容易忽略的是,灰度不只是切流量,缓存、索引、配置都要分命名空间;键里缺版本号时,回滚也救不回来。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189