QdrantEmbeddingRetriever

QdrantEmbeddingRetriever

Qdrant Document Store와 호환되는 임베딩 기반 Retriever예요. 쿼리와 문서 임베딩을 비교해 관련성이 가장 높은 문서를 가져오죠.

출처: 문서

본문

항목 내용
파이프라인에서 가장 흔한 위치 1. RAG 파이프라인에서 Text Embedder 다음, PromptBuilder 앞 2. 시맨틱 검색 파이프라인의 마지막 컴포넌트 3. 추출형 QA 파이프라인에서 Text Embedder 다음, TransformersExtractiveReader 앞
필수 init 변수 document_store: QdrantDocumentStore 인스턴스
필수 run 변수 query_embedding: 쿼리를 나타내는 벡터 (float 목록)
출력 변수 documents: 문서 목록
API reference Qdrant
GitHub 링크 qdrant 통합
패키지 이름 qdrant-haystack

개요

QdrantEmbeddingRetriever는 QdrantDocumentStore와 호환되는 임베딩 기반 Retriever예요. 쿼리와 문서 임베딩을 비교한 결과에 따라 QdrantDocumentStore에서 쿼리에 가장 관련 있는 문서를 가져와요.

NLP 시스템에서 QdrantEmbeddingRetriever를 사용할 때는 쿼리와 문서 임베딩이 준비되어 있어야 해요. 인덱싱 파이프라인에 Document Embedder를, 쿼리 파이프라인에 Text Embedder를 추가하면 되죠.

query_embedding 외에도 QdrantEmbeddingRetriever는 top_k(가져올 최대 문서 수)와 filters(검색 공간을 좁히기) 같은 선택적 파라미터를 받아요.

임베딩 검색에 영향을 주는 몇 가지 파라미터는 해당 QdrantDocumentStore가 초기화될 때 정의해야 해요. 임베딩 차원(embedding_dim), 임베딩 비교 시 사용할 similarity 함수, HNSW 구성(hnsw_config)이 여기에 해당하죠.

설치

Qdrant를 Haystack에서 사용하려면 먼저 패키지를 설치하세요:

pip install qdrant-haystack

사용법

단독으로 사용하기

이 Retriever는 동작하려면 QdrantDocumentStore와 인덱싱된 문서가 필요해요.

from haystack import Document
from haystack_integrations.components.retrievers.qdrant import QdrantEmbeddingRetriever
from haystack_integrations.document_stores.qdrant import QdrantDocumentStore

document_store = QdrantDocumentStore(
    ":memory:",
    embedding_dim=3,
    recreate_index=True,
    return_embedding=True,
    wait_result_from_api=True,
)
document_store.write_documents(
    [Document(content="Qdrant supports vector search.", embedding=[0.1, 0.2, 0.3])],
)

retriever = QdrantEmbeddingRetriever(document_store=document_store)
# Use matching fake vectors to keep the example independent of embedding models.
result = retriever.run(query_embedding=[0.1, 0.2, 0.3])
print(result["documents"][0].content)
# Qdrant supports vector search.

파이프라인에서 사용하기

이 페이지의 예제는 sentence-transformers-haystack 패키지의 Sentence Transformers 임베더를 사용해요. 예제를 실행하려면 설치하세요:

pip install sentence-transformers-haystack
from haystack.document_stores.types import DuplicatePolicy
from haystack import Document
from haystack import Pipeline
from haystack_integrations.components.embedders.sentence_transformers import (
    SentenceTransformersTextEmbedder,
    SentenceTransformersDocumentEmbedder,
)
from haystack_integrations.components.retrievers.qdrant import QdrantEmbeddingRetriever
from haystack_integrations.document_stores.qdrant import QdrantDocumentStore

document_store = QdrantDocumentStore(
    ":memory:",
    recreate_index=True,
    return_embedding=True,
    wait_result_from_api=True,
)

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()
documents_with_embeddings = document_embedder.run(documents)
document_store.write_documents(
    documents_with_embeddings.get("documents"),
    policy=DuplicatePolicy.OVERWRITE,
)

query_pipeline = Pipeline()
query_pipeline.add_component("text_embedder", SentenceTransformersTextEmbedder())
query_pipeline.add_component(
    "retriever",
    QdrantEmbeddingRetriever(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)