AzureAISearchEmbeddingRetriever

AzureAISearchEmbeddingRetriever

Azure AI Search Document Store와 호환되는 임베딩 Retriever예요.

이 Retriever는 단일 쿼리의 임베딩을 입력으로 받아 일치하는 문서 목록을 반환합니다.

파이프라인에서 가장 흔한 위치:

  1. RAG 파이프라인에서 Text Embedder 다음, PromptBuilder 앞
  2. 임베딩 검색 파이프라인의 마지막 컴포넌트
  3. 추출형 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])

더 알아보기 (Learn more)