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

AzureAISearchEmbeddingRetriever

一个与 Azure AI Search 文档存储兼容的 Embedding Retriever。

此 Retriever 接受单个查询的 embeddings 作为输入,并返回匹配文档的列表。

pipeline 中的最常见位置1. 在 RAG 管道中的 Text Embedder 和 PromptBuilder 之前 2. Embedding 检索管道中的最后一个组件 3. 在提取式 QA 管道中的 Text Embedder 和 ExtractiveReader 之后
必需的初始化变量"document_store": AzureAISearchDocumentStore 的一个实例
强制运行变量"query_embedding": 浮点数列表
输出变量“documents”:文档列表
API 参考Azure AI Search
GitHub 链接https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/azure_ai_search

概述

该 AzureAISearchEmbeddingRetriever 是一个基于 embedding 的 Retriever,与AzureAISearchDocumentStore 兼容。它比较查询和文档的 embeddings,并根据结果从AzureAISearchDocumentStore 中获取最相关的文档。

在将查询传递给此组件之前,需要先对其进行 embedding。例如,您可以使用 Text Embedder 组件。

默认情况下,AzureAISearchDocumentStore 使用 HNSW 算法 和余弦相似度来处理向量搜索。向量配置在初始化文档存储时设置,可以通过提供vector_search_configuration 参数进行自定义。

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

📘

语义排名

Azure AI Search 的语义排名功能不适用于向量检索。要在检索过程中包含语义排名,请使用 AzureAISearchBM25RetrieverAzureAISearchHybridRetriever。更多详情,请参阅 Azure AI 文档

用法

安装

此集成要求您拥有一个有效的 Azure 订阅,并已部署 Azure AI Search 服务。

要开始使用 Azure AI Search 和 Haystack,请使用以下命令安装包:

pip install azure-ai-search-haystack

单独使用

此 Retriever 需要AzureAISearchDocumentStore 和已索引的文档才能运行。

from haystack_integrations.document_stores.azure_ai_search import AzureAISearchDocumentStore
from haystack_integrations.components.retrievers.azure_ai_search import AzureAISearchEmbeddingRetriever

document_store = AzureAISearchDocumentStore()

retriever = AzureAISearchEmbeddingRetriever(document_store=document_store)

# example run query
retriever.run(query_embedding=[0.1]*384)

在 pipeline 中

以下是如何在管道中使用 AzureAISearchEmbeddingRetriever 的示例。在此示例中,您将创建两个管道:一个索引管道和一个查询管道。

在索引管道中,文档被传递给 Document Embedder,然后写入 Document Store。

然后,在查询管道中,我们使用 Text Embedder 来获取输入查询的向量表示,该表示随后将被传递给 AzureAISearchEmbeddingRetriever 以获取结果。

from haystack import Document, Pipeline
from haystack.components.embedders import SentenceTransformersDocumentEmbedder, SentenceTransformersTextEmbedder
from haystack.components.writers import DocumentWriter

from haystack_integrations.components.retrievers.azure_ai_search import AzureAISearchEmbeddingRetriever
from haystack_integrations.document_stores.azure_ai_search import AzureAISearchDocumentStore

document_store = AzureAISearchDocumentStore(index_name="retrieval-example")

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

# Indexing Pipeline
indexing_pipeline = Pipeline()
indexing_pipeline.add_component(instance=document_embedder, name="doc_embedder")
indexing_pipeline.add_component(instance=DocumentWriter(document_store=document_store), name="doc_writer")
indexing_pipeline.connect("doc_embedder", "doc_writer")

indexing_pipeline.run({"doc_embedder": {"documents": documents}})

# Query Pipeline
query_pipeline = Pipeline()
query_pipeline.add_component("text_embedder", SentenceTransformersTextEmbedder(model=model))
query_pipeline.add_component("retriever", AzureAISearchEmbeddingRetriever(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])