用对话模型 qwen2.5:7b 调 /api/embeddings 生成向量,返回 400,提示该模型不支持 embeddings,换成 nomic-embed-text 后正常。
真正麻烦的地方在于,几个原因的现象几乎一样。对话模型没有被编译成支持向量输出的结构;请求里 model 字段写的是对话模型名;接口用的是 /api/embed 而非旧版 /api/embeddings;批量输入时字段名写成 input 而不是 prompt。
拉一个专用向量模型
ollama pull nomic-embed-text
然后按新版接口发送单条文本
curl http://localhost:11434/api/embed -d '{"model":"nomic-embed-text","input":"测试文本"}'
批量时把多条文本放进数组
curl http://localhost:11434/api/embed -d '{"model":"nomic-embed-text","input":["a","b"]}'
等前面都确认过,再确认返回维度与向量库配置一致
python -c "import json;print(len(json.load(open('e.json'))['embeddings'][0]))"
当时还开着另一个排查窗口,两边日志对照着看才定位到。
同一份数据我导出了两份,一份留底,一份拿来试。
别只看报错消失,验证要多做一步。接口返回 embeddings 数组,维度与向量库建表时声明的维度一致,写入不再报错。
这里还有个坑。不同向量模型的维度差别很大,从 384 到 1024 都有,换模型时必须重建集合,只改代码不改库一定对不上。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。