AlloyDBEmbeddingRetriever
AlloyDBEmbeddingRetriever
AlloyDB Document Store와 호환되는 임베딩 기반 Retriever예요.
파이프라인에서 가장 흔한 위치:
- RAG 파이프라인에서 Text Embedder 다음, PromptBuilder 앞
- 의미 검색(semantic search) 파이프라인의 마지막 컴포넌트
- 추출형 QA 파이프라인에서 Text Embedder 다음, TransformersExtractiveReader 앞
필수 init 변수: document_store — AlloyDBDocumentStore 인스턴스
필수 run 변수: query_embedding — 쿼리를 나타내는 벡터(float 목록)
출력 변수: documents — 문서 목록
API reference: AlloyDB
GitHub link: https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/alloydb
Package name: alloydb-haystack
출처: 문서
본문
Overview
AlloyDBEmbeddingRetriever는 AlloyDBDocumentStore와 호환되는 임베딩 기반 Retriever예요. 쿼리와 Document 임베딩을 비교하고, 그 결과를 바탕으로 AlloyDBDocumentStore에서 쿼리와 가장 관련 있는 Documents를 가져옵니다.
파이프라인에서 AlloyDBEmbeddingRetriever를 쓸 때는 쿼리 임베딩과 Document 임베딩이 준비돼 있어야 해요. 인덱싱 파이프라인에 Document Embedder를, 쿼리 파이프라인에 Text Embedder를 추가하면 됩니다.
query_embedding 외에도 AlloyDBEmbeddingRetriever는 선택 파라미터를 받아요. top_k(가져올 최대 Document 수), 검색 공간을 좁히는 filters, 그리고 Document Store에 설정된 유사도 함수를 덮어쓰는 vector_function 등이 있죠.
임베딩 검색에 영향을 주는 일부 파라미터는 해당 AlloyDBDocumentStore를 초기화할 때 정의해야 해요. 여기에는 embedding_dimension, vector_function, 그리고 검색 전략("exact_nearest_neighbor" 또는 "hnsw")이 포함됩니다.
Installation
alloydb-haystack 통합을 설치하세요:
pip install alloydb-haystack
AlloyDB 클러스터와 인스턴스를 설정하려면 AlloyDB quickstart를 따르세요.
이 페이지의 예시는 sentence-transformers-haystack 패키지의 Sentence Transformers 임베더를 사용해요. 예시를 실행하려면 설치하세요:
pip install sentence-transformers-haystack
Usage
On its own
이 Retriever는 실행하려면 AlloyDBDocumentStore와 인덱싱된 Documents가 필요해요.
AlloyDB 인스턴스에 연결하려면 ALLOYDB_INSTANCE_URI, ALLOYDB_USER, ALLOYDB_PASSWORD 환경 변수를 설정하세요.
from haystack_integrations.document_stores.alloydb import AlloyDBDocumentStore
from haystack_integrations.components.retrievers.alloydb import (
AlloyDBEmbeddingRetriever,
)
document_store = AlloyDBDocumentStore()
retriever = AlloyDBEmbeddingRetriever(document_store=document_store)
## using a fake vector to keep the example simple
retriever.run(query_embedding=[0.1] * 768)
In a Pipeline
from haystack import Document, Pipeline
from haystack.document_stores.types import DuplicatePolicy
from haystack_integrations.components.embedders.sentence_transformers import (
SentenceTransformersTextEmbedder,
SentenceTransformersDocumentEmbedder,
)
from haystack_integrations.document_stores.alloydb import AlloyDBDocumentStore
from haystack_integrations.components.retrievers.alloydb import (
AlloyDBEmbeddingRetriever,
)
document_store = AlloyDBDocumentStore(
embedding_dimension=768,
vector_function="cosine_similarity",
recreate_table=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",
AlloyDBEmbeddingRetriever(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)
- AlloyDBDocumentStore — 임베딩 차원·검색 전략 설정
- AlloyDBKeywordRetriever — 키워드 기반 검색
- Metadata Filtering — 필터 문법