文档API 参考📓 教程🧑‍🍳 食谱🤝 集成💜 Discord🎨 Studio
文档

AstraEmbeddingRetriever

这是一个与 Astra Document Store 兼容的基于 embedding 的 Retriever。

pipeline 中的最常见位置1. 在 Text Embedder 之后,在 RAG pipeline 的 PromptBuilder 之前 2. 语义搜索 pipeline 中的最后一个组件 3. 在 Text Embedder 之后,在 extractive QA pipeline 的 ExtractiveReader 之前
必需的初始化变量"document_store": AstraDocumentStore 的一个实例
强制运行变量“query_embedding”:浮点数列表
输出变量“documents”:文档列表
API 参考Astra
GitHub 链接https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/astra

概述

AstraEmbeddingRetriever 根据结果比较查询和文档的 embedding,并从 AstraDocumentStore 中获取与查询最相关的文档。

使用要将 AstraEmbeddingRetriever 集成到您的 NLP 系统中,请确保查询和文档的 embedding 可用。您可以通过在索引管道中添加 Document Embedder,在查询管道中添加 Text Embedder 来实现此目的。

除了query_embedding 之外,AstraEmbeddingRetriever 还接受其他可选参数,包括top_k(要检索的最大文档数)和filters(用于缩小搜索范围)。

设置与安装

在拥有 AstraDB 账户并创建数据库后,安装astra-haystack 集成。

pip install astra-haystack

在 AstraDB 的 Web UI 的配置中,您需要数据库 ID 和生成的 token。

您还需要一个集合名称和一个命名空间。创建集合名称时,还需要设置 embedding 的维度和相似性指标。命名空间用于组织数据库中的数据,在 Apache Cassandra 中称为 keyspace。

然后,您可以选择安装 sentence-transformers 以运行以下示例。

pip install sentence-transformers

用法

我们强烈建议通过环境变量传递身份验证数据:在运行以下示例之前,请确保已填充环境变量ASTRA_DB_API_ENDPOINTASTRA_DB_APPLICATION_TOKEN

在 pipeline 中

像这样在查询管道中使用此 Retriever:

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


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"), policy=DuplicatePolicy.SKIP)

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])

示例输出将是:

Document(id=cfe93bc1c274908801e6670440bf2bbba54fad792770d57421f85ffa2a4fcc94, content: 'There are over 7,000 languages spoken around the world today.', score: 0.8929937, embedding: vector of size 768)

其他参考资料

🧑‍🍳 食谱:在 Haystack 管道中使用 AstraDB 作为数据存储