三份"真相"会对不上
AI 系统里通常有三处数据 ✔:缓存(上次结果 ✔)、索引(检索用的资料 ✔)、数据库(业务记录 ✔)。
三者更新时机不同 ✗ → 就会出现"对不上" ✔:
用户改了资料 → 索引还没更新 → 答案还是旧的 ✔;
缓存没失效 → 结果比库里的还老 ✔。
要让三者有明确的"版本与失效约定" ✔。
一、三种典型不一致
| 现象 | 原因 |
|---|---|
| 回答依据旧资料 ✔ | 索引未重建或版本未切 ✔ |
| 结果与库里不一致 ✔ | 缓存键没带数据版本 ✔ |
| 同一问题两次答案冲突 ✔ | 一次命中缓存、一次回源 ✔ |
第 ③ 项最容易被误判为"模型不稳定" ✗→✔ ——
其实是缓存 ✔(见缓存那篇 ✔)。
二、四条约定
- 缓存键必须包含数据版本 ✔(索引版本 + 提示词版本 + 模型 ✔ —— 见可复现那篇 ✔);
- 索引切换用版本号,不用"就地覆盖" ✔(新版本建好再切 ✔ —— 见新鲜度那篇 ✔);
- 写操作要触发失效 ✔(资料变了 → 主动清相关缓存 ✔);
- 留一条"旁路"(跳过缓存直读 ✔)—— 供排查与对照 ✔。
三、怎么验证一致性
- 抽样对照:抽 20 个问题,分别走"带缓存"与"旁路" ✔,比较差异 ✔;
- 检查索引滞后时间 ✔(最实用的新鲜度指标 ✔);
- "缓存命中但数据已变"计数 ✔(应接近 0 ✔)。
四、三个反模式
- 缓存键只有用户与问题 ✗(数据变了还命中旧结果 ✔);
- 索引就地覆盖 ✗(切换过程中新旧混合 ✔);
- 没有旁路 ✗(排查时无法判断是缓存还是模型 ✔)。
五、一条判据
同一条问题,间隔 5 分钟问两次 ✔,答案会在什么情况下不同 ✔?
说不清(缓存?模型?数据?),说明三者的失效约定还不明确 ✗。