升级模型要做什么
更换嵌入模型后,旧向量与新模型编码的查询向量不在同一空间,必须全量重算文档向量并重建索引。稳妥做法是双索引灰度:新建集合用新模型灌全量数据,增量阶段双写,再按比例把读流量切到新集合,评测确认指标不降后下线旧集合。模型升级还会改变相似度分布,依赖固定阈值的兜底逻辑必须重新校准。
基本信息
| 核心动作 | 全量重算文档向量并重建索引 |
|---|---|
| 灰度方式 | 新集合并行、增量双写、按比例切流量 |
| 收尾 | 旧索引保留快照若干天再下线 |
| 副作用 | 相似度分布变化,阈值与兜底逻辑要重校 |
典型使用场景
- 版本升级:新模型效果更好,需要平滑替换而不是停机重灌
- 供应商更换:从一家 embedding 服务换到另一家,维度与语义都会变
- 自建替代托管:为成本或合规改自建模型,重建流程要重新跑通
- 效果回退应急:新模型上线后指标下滑,按预案切回旧集合
- 多环境同步:测试环境先完成升级演练,再生产照做
双索引灰度切换
双索引灰度切换
1. 新建 collection kb_v2,用新模型全量灌库并校验向量条数
2. 双写增量:新文档同时写入 kb_v1 与 kb_v2
3. 灰度:5% → 20% → 100% 流量读 kb_v2,监控召回与延迟
4. 下线:确认评测指标不降后停写 kb_v1,保留快照若干天
# 每阶段都留回退开关,出现异常立即切回 kb_v1
迁移阶段与检查点
| 阶段 | 动作 | 检查点 |
|---|---|---|
| 准备 | 新建集合,用新模型灌全量数据 | 向量条数与源数据一致 |
| 双写 | 新数据同时写新旧集合 | 两侧条数保持同步 |
| 灰度 | 按比例切读流量到新集合 | 召回与延迟指标不降 |
| 收尾 | 停写旧集合并保留快照 | 确认无流量后再下线 |
模型升级会改变相似度分布:依赖固定阈值的兜底逻辑必须重新校准,否则误拒率变化会非常明显,而这类问题通常要在用户反馈后才被发现。
双写期间要考虑写入失败的处理:一侧失败要记录并补偿,否则灰度切过去会发现新集合缺少部分文档,这种缺口很难在事后补全。