在 Astra DB 中使用 SelfQueryRetriever 进行向量存储与查询

# 在 Astra DB 中使用 SelfQueryRetriever 进行向量存储与查询

## 技术背景介绍

DataStax Astra DB 是一个无服务器的向量数据库,基于 Cassandra 构建,并通过易用的 JSON API 提供服务。在这篇文章中,我们将演示如何在 Astra DB 中创建向量存储,并使用 SelfQueryRetriever 进行查询。我们的目标是展示如何对一组电影摘要数据进行向量存储,并通过自然语言进行检索。

## 核心原理解析

SelfQueryRetriever 结合了自然语言处理与向量检索技术,允许用户通过简单的自然语言查询从大规模数据集中提取信息。这需要将数据转换为向量表示,并存储于支持向量操作的数据库中。Astra DB 提供了无缝的向量存储功能,支持高效的数据查询。

## 代码实现演示

首先,我们将创建一个 Astra DB 向量存储,初始化一组包含电影摘要的文档。接下来,我们使用 OpenAI Embeddings 来生成这些文档的向量表示。

```python
# 安装必要的依赖库
%pip install --upgrade --quiet lark astrapy langchain-openai

# 引入库并获取 OpenAI API Key
import os
from getpass import getpass
from langchain_openai.embeddings import OpenAIEmbeddings

os.environ["OPENAI_API_KEY"] = getpass("OpenAI API Key:")
embeddings = OpenAIEmbeddings()

# 配置 Astra DB API Endpoint 和 Token
ASTRA_DB_API_ENDPOINT = input("ASTRA_DB_API_ENDPOINT = ")
ASTRA_DB_APPLICATION_TOKEN = getpass("ASTRA_DB_APPLICATION_TOKEN = ")

from langchain_community.vectorstores import AstraDB
from langchain_core.documents import Document

# 定义电影摘要文档
docs = [
    Document(
        page_content="A bunch of scientists bring back dinosaurs and mayhem breaks loose",
        metadata={"year": 1993, "rating": 7.7, "genre": "science fiction"},
    ),
    # 其他文档省略以节省篇幅
]

# 创建向量存储
vectorstore = AstraDB.from_documents(
    docs,
    embeddings,
    collection_name="astra_self_query_demo",
    api_endpoint=ASTRA_DB_API_ENDPOINT,
    token=ASTRA_DB_APPLICATION_TOKEN,
)

# 描述文档的元数据字段
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)

# 创建 SelfQueryRetriever 实例
retriever = SelfQueryRetriever.from_llm(
    llm, vectorstore, document_content_description, metadata_field_info, verbose=True
)

# 进行查询
print(retriever.invoke("What are some movies about dinosaurs?"))
print(retriever.invoke("I want to watch a movie rated higher than 8.5"))

应用场景分析

这种向量检索机制非常适合用于需要自然语言交互的应用场景,如智能搜索引擎、推荐系统等。对于数据丰富的电影平台,可以让用户通过简单询问来获取个性化推荐。

实践建议

在构建此类系统时,请务必确保数据的安全性与合规性。使用稳定可靠的 API 服务,以确保系统的高可用性和性能。最后,定期更新向量模型和库以跟随最新技术发展。

如果遇到问题欢迎在评论区交流。

---END---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值