事情本身不复杂,线索都在日志里。embedding 模型从 768 维换成 1024 维,collection 当初按 768 建,新数据一插入就报 wrong vector dimension,报错里写着 expected dim: 768。
第一反应是「客户端配置的维度与模型实际输出不一致」,验证下来不成立。
真正麻烦的地方在于,几个原因的现象几乎一样。集合维度在创建时固定,不能就地修改。少数情况下是别名还指向旧集合,新建的集合没被查询用上。
不容易想到的是,批量导入脚本里把 768 写死了。
先核对模型输出与集合维度
python -c "from openai import OpenAI;print(len(OpenAI().embeddings.create(model='text-embedding-3-small',input='x').data[0].embedding))"
新建 1024 维的集合
curl -X PUT http://127.0.0.1:6333/collections/kb_v2 -H "Content-Type: application/json" -d '{"vectors":{"size":1024,"distance":"Cosine"}}'
接着把别名切到新集合
curl -X POST http://127.0.0.1:6333/collections/aliases -H "Content-Type: application/json" -d '{"actions":[{"create_alias":{"collection_name":"kb_v2","alias_name":"kb"}}]}'
剩下的就是确认新集合的维度参数
curl -s http://127.0.0.1:6333/collections/kb_v2 | jq ".config.params.vectors.size"
这台环境是别人交接的,不少默认值被动过,只能一项项核。
怎么算真的好了,看的是同一批现象。新数据插入不再报维度错误,kb 别名指向 kb_v2,查询返回的 payload 来自新数据。
补一句。换 embedding 模型等于换索引,老数据必须全量重算,别名切换能让回滚只改一行。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
