由 deepset 维护
集成:AstraDB
用于在AstraDB中存储和检索文档的文档存储.
目录
概述
DataStax Astra DB 是一个基于 Apache Cassandra 构建的无服务器向量数据库,支持基于向量的搜索和自动扩展。您可以将其部署在 AWS、GCP 或 Azure 上,并轻松扩展到这些云中的一个或多个区域,以实现多区域可用性、低延迟数据访问、数据主权,并避免云供应商锁定。有关更多信息,请参阅 DataStax 文档。
此集成允许您使用 AstraDB 在 Haystack 管道中进行文档存储和检索。本页面提供了有关如何初始化 AstraDB 实例并与 Haystack 连接的说明。
组件
-
AstraDocumentStore。此组件作为 Haystack 文档的持久化数据存储,并支持多种嵌入模型和向量维度。 -
AstraEmbeddingRetriever这是一个基于嵌入的检索器,与 Astra Document Store 兼容。
初始化
首先,您需要 注册一个免费的 DataStax 账户。请按照以下说明在 Datastax 控制台中 创建 AstraDB 数据库。请确保您创建一个集合、一个 keyspace 名称和一个访问令牌,因为稍后会用到它们。
安装
pip install astra-haystack
使用
此包包含 Astra Document Store 和 Astra Retriever 类,它们与 Haystack 集成,让您可以轻松地使用 AstraDB 进行文档检索或 RAG,并将这些功能包含在 Haystack 管道中。
要将 AstraDB 与 Haystack 连接,您需要从 Datastax 控制台获取以下信息:
- 数据库 API 端点
- 应用程序令牌
- Astra 集合名称(否则将使用
documents)
如何使用 AstraDocumentStore
from haystack import Document
from haystack_integrations.document_stores.astra import AstraDocumentStore
# Make sure ASTRA_DB_API_ENDPOINT and ASTRA_DB_APPLICATION_TOKEN environment variables are set
document_store = AstraDocumentStore()
document_store.write_documents([
Document(content="This is first"),
Document(content="This is second")
])
print(document_store.count_documents())
如何使用 AstraEmbeddingRetriever
from haystack import Document, Pipeline
from haystack.components.embedders import SentenceTransformersTextEmbedder, SentenceTransformersDocumentEmbedder
from haystack_integrations.components.retrievers.astra import AstraEmbeddingRetriever
from haystack_integrations.document_stores.astra import AstraDocumentStore
# Make sure ASTRA_DB_API_ENDPOINT and ASTRA_DB_APPLICATION_TOKEN environment variables are set
document_store = AstraDocumentStore()
model = "sentence-transformers/all-mpnet-base-v2"
documents = [Document(content="There are over 7,000 languages spoken around the world today."),
Document(content="Elephants have been observed to behave in a way that indicates a high level of self-awareness, such as recognizing themselves in mirrors."),
Document(content="In certain parts of the world, like the Maldives, Puerto Rico, and San Diego, you can witness the phenomenon of bioluminescent waves.")]
document_embedder = SentenceTransformersDocumentEmbedder(model=model)
document_embedder.warm_up()
documents_with_embeddings = document_embedder.run(documents)
document_store.write_documents(documents_with_embeddings.get("documents"))
query_pipeline = Pipeline()
query_pipeline.add_component("text_embedder", SentenceTransformersTextEmbedder(model=model))
query_pipeline.add_component("retriever", AstraEmbeddingRetriever(document_store=document_store))
query_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
query = "How many languages are there?"
result = query_pipeline.run({"text_embedder": {"text": query}})
print(result['retriever']['documents'][0])
注意
请注意,Astra JSON API 的当前版本不支持以下运算符:$lt, $lte, $gt, $gte, $nin, $not, $neq,以及使用 None 值进行过滤(这些不会被插入,因为结果以 json 文档的形式存储,并且它不存储 None 值)。
许可证
astra-haystack 在 Apache-2.0 许可证条款下分发。
