在 langchain 中使用 HuggingFaceEmbeddings 时查询 Redis 矢量存储时出现问题

问题描述 投票:0回答:1

我正在尝试使用 langchain 和 Redis 矢量存储创建一个 RAG(检索增强生成)系统。 langchain文档提供了如何从Redis存储和查询数据的示例,如下所示:

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")

这个例子使用了OpenAIEmbeddings,并且它运行得很好。但是,当我选择不同的嵌入方法时,例如

embeddings = HuggingFaceEmbeddings(
    model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2",
            model_kwargs={'device': 'cpu'}
        ) 

我在尝试查询 Redis 矢量存储时遇到问题。我收到 rds.similarity_search("foo") 的以下错误:

ResponseError: Error parsing vector similarity query: query vector blob size (1536) does not match index's expected size (6144).

我不确定为什么会发生此错误以及如何修复它。有其他人遇到过类似的问题或者可以提供解决此问题的指导吗?我们将非常感谢您的帮助!

redis huggingface-transformers langchain py-langchain
1个回答
0
投票

本质上,问题在于尽管使用了两种不同的嵌入模型,但您仍试图重用相同的索引。

我运行了你的代码,如果我更改嵌入模型,然后为索引提供不同的名称,因此可能会创建一个新的而不是重用现有的,一切都会按预期进行。

如果出于某种原因您想对不同的嵌入模型使用相同的索引,我认为您需要更具体地了解向量模式和/或在将嵌入向量保存到数据库之前修改它们。不过我自己没有尝试过,所以这只是猜测。

注意:当我运行代码时,我收到一条警告,要求使用 langchain_community 的嵌入实现而不是 langchain 实现,因为后者似乎已被弃用。也许这样做您还会收到其他可能更有意义的错误。

© www.soinside.com 2019 - 2024. All rights reserved.