先把当时的情况摆出来。提示词灰度期间新版本复用旧缓存,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:
别只看报错消失,验证要多做一步。灰度用户只命中新版本缓存,回滚后旧版本缓存全部命中旧值,两边答案不再互串。
容易忽略的是,灰度不只是切流量,缓存、索引、配置都要分命名空间;键里缺版本号时,回滚也救不回来。这类问题最好一次改到位,反复小改反而容易把原因搅混。
