换了 embedding 模型之后,写入时报维度不匹配,或者检索直接返回空结果。向量库按固定维度建集合,模型一换,旧数据就不能再用了。
先确认两边的维度
v = embed("测试文本")
print(len(v))
再查集合的维度设置:不同库的写法不一样,Chroma 在创建集合时确定,Milvus 在建表时确定。两边数字不一致就是根因,和「模型效果变差」无关。
正确做法是重建而不是硬凑
- 新建集合,维度设为新模型输出长度
- 把原始文本重新嵌入并写入
- 切换检索入口,确认命中后再删旧集合
不要用截断或补零的方式凑维度,向量空间已经变了,距离计算失去意义,检索结果会大范围跑偏。
把模型信息写进元数据
集合的元数据里记录模型名称、版本和维度,后续换模型前先读出来对比。多数事故不是换模型本身,而是换完不知道哪些库还是旧维度。
重建期间保留旧索引做灰度,新链路跑通再切流量,比直接覆盖安全得多。