AzureAISearchEmbeddingRetriever
AzureAISearchEmbeddingRetriever
Azure AI Search Document Store와 호환되는 임베딩 Retriever예요.
이 Retriever는 단일 쿼리의 임베딩을 입력으로 받아 일치하는 문서 목록을 반환합니다.
파이프라인에서 가장 흔한 위치:
- RAG 파이프라인에서 Text Embedder 다음, PromptBuilder 앞
- 임베딩 검색 파이프라인의 마지막 컴포넌트
- 추출형 QA 파이프라인에서 Text Embedder 다음, TransformersExtractiveReader 앞
필수 init 변수: document_store — AzureAISearchDocumentStore 인스턴스
필수 run 변수: query_embedding — float 목록
출력 변수: documents — 문서 목록
API reference: Azure AI Search
GitHub link: https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/azure_ai_search
Package name: azure-ai-search-haystack
출처: 문서
본문
Overview
AzureAISearchEmbeddingRetriever는 AzureAISearchDocumentStore와 호환되는 임베딩 기반 Retriever예요. 쿼리와 문서 임베딩을 비교하고, 그 결과를 바탕으로 AzureAISearchDocumentStore에서 가장 관련 있는 문서를 가져옵니다.
쿼리는 이 컴포넌트에 전달하기 전에 임베딩되어야 해요. 예를 들어 Text Embedder 컴포넌트를 사용할 수 있습니다.
기본적으로 AzureAISearchDocumentStore는 벡터 검색을 처리하는 데 HNSW 알고리즘과 코사인 유사도를 사용해요. 벡터 구성은 문서 스토어 초기화 때 설정되며, vector_search_configuration 파라미터를 제공해 커스터마이즈할 수 있습니다.
query_embedding 외에도 AzureAISearchEmbeddingRetriever는 top_k(가져올 최대 문서 수)와 검색 공간을 좁히는 filters 등 선택 파라미터를 받아요.
Semantic Ranking Azure AI Search의 의미 순위 매김 기능은 벡터 검색에는 사용할 수 없어요. 검색 과정에 의미 순위 매김을 포함하려면 AzureAISearchBM25Retriever나 AzureAISearchHybridRetriever를 사용하세요. 자세한 내용은 Azure AI 문서를 참고하세요.
Usage
Installation
이 통합을 쓰려면 배포된 Azure AI Search 서비스가 있는 활성 Azure 구독이 있어야 해요.
Haystack에서 Azure AI 검색을 쓰려면 패키지를 설치하세요:
pip install azure-ai-search-haystack
On its own
이 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)
In a pipeline
파이프라인에서 AzureAISearchEmbeddingRetriever를 쓰는 방법은 이렇습니다. 이 예시에서는 인덱싱 파이프라인과 쿼리 파이프라인 두 개를 만듭니다.
인덱싱 파이프라인에서는 문서가 Document Embedder에 전달된 뒤 Document Store에 기록됩니다.
그런 다음 쿼리 파이프라인에서 Text Embedder로 입력 쿼리의 벡터 표현을 얻어 AzureAISearchEmbeddingRetriever에 전달해 결과를 얻습니다.
이 페이지의 예시는 sentence-transformers-haystack 패키지의 Sentence Transformers 임베더를 사용해요. 예시를 실행하려면 설치하세요:
pip install sentence-transformers-haystack
from haystack import Document, Pipeline
from haystack_integrations.components.embedders.sentence_transformers 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)
# 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])