使用LangChain+HuggingFaceEmbeddings查询Redis向量存储遇维度不匹配错误
问题:LangChain+Redis向量存储切换HuggingFaceEmbeddings后查询报错
问题详情
我用LangChain和Redis向量存储搭建RAG系统,使用OpenAIEmbeddings时能正常完成存储与查询,但切换为以下HuggingFaceEmbeddings配置后:
embeddings = HuggingFaceEmbeddings( model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2", model_kwargs={'device': 'cpu'} )
执行rds.similarity_search("foo")触发错误:
ResponseError: Error parsing vector similarity query: query vector blob size (1536) does not match index's expected size (6144).
示例代码:
from langchain.embeddings.openai import OpenAIEmbeddings from langchain.embeddings import HuggingFaceEmbeddings from langchain_community.vectorstores.redis import Redis import os embeddings = OpenAIEmbeddings() metadata = [ { "user": "john", "age": 18, "job": "engineer", "credit_score": "high", }, { "user": "derrick", "age": 45, "job": "doctor", "credit_score": "low", }, { "user": "nancy", "age": 94, "job": "doctor", "credit_score": "high", }, { "user": "tyler", "age": 100, "job": "engineer", "credit_score": "high", }, { "user": "joe", "age": 35, "job": "dentist", "credit_score": "medium", }, ] texts = ["foo", "foo", "foo", "bar", "bar"] rds = Redis.from_texts( texts, embeddings, metadatas=metadata, redis_url="redis://localhost:6379", index_name="users", ) results = rds.similarity_search("foo")
错误原因
Redis中已存在users索引,该索引是用OpenAIEmbeddings创建的,对应的向量维度为6144;而当前使用的HuggingFace模型生成的查询向量维度为1536,两者维度不匹配,导致查询失败。
解决方法
删除旧索引:
打开Redis命令行,执行以下命令删除已存在的索引及关联数据:redis-cli FT.DROPINDEX users DD(
DD参数会同时删除索引绑定的所有文档数据)重新生成索引:
修改代码中的embeddings变量为你的HuggingFace配置,重新运行代码即可创建对应维度的新索引:embeddings = HuggingFaceEmbeddings( model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2", model_kwargs={'device': 'cpu'} )验证向量维度(可选):
可以先确认模型输出的向量维度,避免再次出现维度不匹配问题:sample_embedding = embeddings.embed_query("test") print(f"当前模型向量维度:{len(sample_embedding)}")
内容的提问来源于stack exchange,提问作者Vahe
相关产品推荐
相关产品推荐

