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_embedding,AzureAISearchEmbeddingRetriever 接受其他可选参数,包括top_k(要检索的文档的最大数量)和filters(用于缩小搜索范围)。
语义排名
Azure AI Search 的语义排名功能不适用于向量检索。要在检索过程中包含语义排名,请使用
AzureAISearchBM25Retriever或AzureAISearchHybridRetriever。更多详情,请参阅 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])
更新于 9 个月前
