You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:56:06