数据库新时代: Astra DB与自查询检索器
随着数据量的不断增长,如何高效搜寻和管理数据成为现代应用的核心挑战之一。DataStax Astra DB凭借其服务器无依赖、Cassandra驱动的特性,为开发者提供了一种高效的解决方案。本文将带你了解如何使用Astra DB构建强大的向量存储,并结合OpenAI实现自查询检索功能。
1. 引言
Astra DB是一款基于Cassandra构建的数据库,支持使用JSON API便捷访问。通过结合OpenAI的Embeddings,我们可以创建一个向量存储,并使用自查询检索器来实现智能化的数据提取。
2. 创建Astra DB向量存储
2.1 准备工作
首先,我们需要安装必要的Python包:
%pip install --upgrade --quiet lark astrapy langchain-openai
确保你已获取OpenAI API密钥:
import os
from getpass import getpass
from langchain_openai.embeddings import OpenAIEmbeddings
os.environ["OPENAI_API_KEY"] = getpass("OpenAI API Key:")
embeddings = OpenAIEmbeddings()
2.2 初始化向量存储
我们需要创建一个Astra DB VectorStore并用一些数据进行初始化。例如,这里我们使用电影摘要数据:
from langchain_community.vectorstores import AstraDB
from langchain_core.documents import Document
docs = [
Document(page_content="A bunch of scientists bring back dinosaurs...", metadata={"year": 1993, "rating": 7.7, "genre": "science fiction"}),
# 更多文档...
]
ASTRA_DB_API_ENDPOINT = input("ASTRA_DB_API_ENDPOINT = ")
ASTRA_DB_APPLICATION_TOKEN = getpass("ASTRA_DB_APPLICATION_TOKEN = ")
vectorstore = AstraDB.from_documents(
docs,
embeddings,
collection_name="astra_self_query_demo",
api_endpoint=ASTRA_DB_API_ENDPOINT, # 使用API代理服务提高访问稳定性
token=ASTRA_DB_APPLICATION_TOKEN,
)
3. 创建自查询检索器
自查询检索器需要了解文档的元数据结构:
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]"),
# 更多属性信息...
]
llm = OpenAI(temperature=0)
retriever = SelfQueryRetriever.from_llm(
llm, vectorstore, "Brief summary of a movie", metadata_field_info, verbose=True
)
4. 代码示例: 自查询检索的强大功能
# 查询关于恐龙的电影
retriever.invoke("What are some movies about dinosaurs?")
# 查询评分高于8.5的电影
retriever.invoke("I want to watch a movie rated higher than 8.5")
# 执行复合过滤查询
retriever.invoke("What's a highly rated (above 8.5), science fiction movie ?")
此外,还可以通过设置enable_limit=True来限制返回文档的数量。
5. 常见问题和解决方案
- API访问稳定性:由于网络限制,建议使用API代理服务。
- 数据安全:存储敏感数据时,确保使用安全的连接和方法。
6. 总结和进一步学习资源
这篇文章演示了如何使用DataStax Astra DB结合OpenAI实现自查询功能。希望您能够通过这些示例掌握基本的实现流程,同时注意API的使用细节,确保系统的稳定性与安全性。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---