我正在尝试使用 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).
我不确定为什么会发生此错误以及如何修复它。有其他人遇到过类似的问题或者可以提供解决此问题的指导吗?我们将非常感谢您的帮助!
本质上,问题在于尽管使用了两种不同的嵌入模型,但您仍试图重用相同的索引。
我运行了你的代码,如果我更改嵌入模型,然后为索引提供不同的名称,因此可能会创建一个新的而不是重用现有的,一切都会按预期进行。
如果出于某种原因您想对不同的嵌入模型使用相同的索引,我认为您需要更具体地了解向量模式和/或在将嵌入向量保存到数据库之前修改它们。不过我自己没有尝试过,所以这只是猜测。
注意:当我运行代码时,我收到一条警告,要求使用 langchain_community 的嵌入实现而不是 langchain 实现,因为后者似乎已被弃用。也许这样做您还会收到其他可能更有意义的错误。