提示词存在代码常量 PROMPT = "...v3..." 里,灰度把 v3 回滚到 v2 时发现库里记录的版本号还是 v3,三十条问题样本无法归因到具体那版。
一开始怀疑是「日志只记版本号不记哈希,回滚后无法区分」,查了一圈,方向不对。
原因不止一个,得分开看。版本号是手写字符串,和内容没有绑定。还有一种是没有对提示词内容做哈希,改字不改号。
不容易想到的是,回滚靠 git 但服务没重启,内存里还是旧常量。
算一次提示词内容的哈希
python -c "import hashlib;print(hashlib.sha256(open('prompt.txt','rb').read()).hexdigest()[:8])"
接着把版本号和哈希一起写进请求日志
python -c "import hashlib;c=open('prompt.txt','rb').read();print({'v':'v3','h':hashlib.sha256(c).hexdigest()[:8]})"
然后改成启动时从文件加载并在变更时打印
python -c "print(open('prompt_v3.txt').read()[:40])"
回滚后确认进程实际加载的哈希
python -c "import requests;print(requests.get('http://127.0.0.1:8000/healthz').json())"
改完先别撤,确认这几项。回滚后健康检查返回的哈希是 v2 对应的值,日志里同一天的两批请求能按哈希分开,问题样本全部归因成功。
容易忽略的是,版本号是人写的,哈希是内容算的,只有哈希能在回滚时证明线上到底跑的是哪一版。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
