## 引言
Redis是一款广泛使用的开源键值存储解决方案,其应用场景涵盖了缓存、消息代理、数据库等,而在AI和大数据时代,它也延伸到了向量数据库领域。本文将带领大家探索如何利用Redis向量存储来构建自查询检索器,旨在提升信息检索的智能化和效率。
## 主要内容
### 创建Redis向量存储
我们首先需要创建一个Redis向量存储,并为其填充一些数据。在这里,我们使用一组电影简介数据进行演示。在使用自查询检索器时,需要额外安装`lark`以及其他一些整合库:
```bash
%pip install --upgrade --quiet redis redisvl langchain-openai tiktoken lark
配置OpenAI Embeddings
为了使用OpenAI提供的嵌入模型,我们需要准备OpenAI的API Key。
import getpass
import os
# 设置OpenAI API Key
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
然后初始化需要使用的库和嵌入模型:
from langchain_community.vectorstores import Redis
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()
初始化文档和索引模式
让我们创建一些示例文档,这些文档提供了关于电影的简短描述,还有关于电影的元数据,比如年份、导演、评分等。
docs = [
Document(
page_content="A bunch of scientists bring back dinosaurs and mayhem breaks loose",
metadata={
"year": 1993,
"rating": 7.7,
"director": "Steven Spielberg",
"genre": "science fiction",
},
),
# 其他文档省略...
]
index_schema = {
"tag": [{"name": "genre"}],
"text": [{"name": "director"}],
"numeric": [{"name": "year"}, {"name": "rating"}],
}
vectorstore = Redis.from_documents(
docs,
embeddings,
redis_url="redis://localhost:6379", # 使用API代理服务提高访问稳定性
index_name="movie_reviews",
index_schema=index_schema,
)
创建自查询检索器
自查询检索器能够智能解析查询句的意图,并根据文档元数据进行过滤。
from langchain.chains.query_constructor.base import AttributeInfo
from langchain.retrievers.self_query.base import SelfQueryRetriever
from langchain_openai import OpenAI
metadata_field_info = [
AttributeInfo(
name="genre",
description="The genre of the movie",
type="string or list[string]",
),
# 其他属性省略...
]
document_content_description = "Brief summary of a movie"
llm = OpenAI(temperature=0)
retriever = SelfQueryRetriever.from_llm(
llm,
vectorstore,
document_content_description,
metadata_field_info,
verbose=True
)
代码示例
以下示例展示了如何使用检索器查询关于恐龙的电影,并对结果进行限制和过滤。
# 查询恐龙主题的电影
result = retriever.invoke("What are some movies about dinosaurs")
print(result)
常见问题和解决方案
数据索引模式不匹配
如果出现index_schema与生成的模式不匹配的警告信息,您可能需要手动调整并确认模式。
网络访问问题
由于某些地区的网络限制,在使用外部API服务(如OpenAI)时,可以考虑使用API代理服务来提高访问的稳定性。
总结和进一步学习资源
Redis向量存储与自查询检索器结合,为我们提供了强大的信息检索能力。若想深入了解,可以查阅官方文档或相关社区资源。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---