DynamoDBEmbeddingRetriever
DynamoDBEmbeddingRetriever
Amazon DynamoDB Document Store와 호환되는 임베딩 기반 리트리버예요.
출처: 문서
본문
- 파이프라인에서의 일반적인 위치: 1. RAG 파이프라인에서 Text Embedder 뒤,
PromptBuilder앞. 2. 시맨틱 검색 파이프라인의 마지막 컴포넌트. 3. 추출형 QA 파이프라인에서 Text Embedder 뒤,TransformersExtractiveReader앞. - 필수 초기화 변수:
document_store(DynamoDBDocumentStore 인스턴스) - 필수 실행 변수:
query_embedding(쿼리를 나타내는 벡터, float 리스트) - 출력 변수:
documents(문서 리스트)
개요 (Overview)
DynamoDBEmbeddingRetriever는 DynamoDBDocumentStore와 호환되는 임베딩 기반 리트리버예요. 쿼리 임베딩과 문서 임베딩을 비교하고, DynamoDB의 네이티브 SearchVectors API를 코사인 유사도로 사용해 쿼리에 가장 관련 있는 문서를 가져와요.
파이프라인에서 DynamoDBEmbeddingRetriever를 사용할 때는 임베딩이 준비되어 있어야 해요. 인덱싱 파이프라인에 Document Embedder를, 쿼리 파이프라인에 Text Embedder를 추가하세요.
리트리버는 query_embedding 외에도 top_k(검색할 최대 문서 수)와 filters(검색 공간을 좁히는 용도) 같은 선택적 파라미터를 받아요. filter_policy 파라미터는 실행 시점의 필터와 초기화 시점에 설정한 필터가 어떻게 결합되는지 제어해요.
후보 수 제한 (Candidate limit)
DynamoDB의 SearchVectors는 요청당 최대 100개의 후보를 반환하므로 top_k는 100을 넘을 수 없어요. 메타데이터 필터는 이 후보들에 대해 클라이언트 측에서 적용돼요. DynamoDB는 인덱스 생성 시점에 고정된 속성만 필터링할 수 있기 때문이에요. 따라서 선택적인 필터는 일치하는 문서가 더 있어도 top_k보다 적은 문서를 반환할 수 있어요.
설치 (Installation)
통합을 설치하세요.
pip install dynamodb-haystack
아래 파이프라인 예시는 Sentence Transformers 임베더도 사용해요.
pip install sentence-transformers-haystack
AWS 자격 증명과 리전을 환경 변수(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION)로 설정하거나 다른 boto3 자격 증명 소스를 사용하세요.
사용법 (Usage)
단독 사용 (On its own)
from haystack_integrations.document_stores.dynamodb import DynamoDBDocumentStore
from haystack_integrations.components.retrievers.dynamodb import (
DynamoDBEmbeddingRetriever,
)
document_store = DynamoDBDocumentStore(embedding_dimension=768)
retriever = DynamoDBEmbeddingRetriever(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.dynamodb import DynamoDBDocumentStore
from haystack_integrations.components.retrievers.dynamodb import (
DynamoDBEmbeddingRetriever,
)
document_store = DynamoDBDocumentStore(embedding_dimension=768)
documents = [
Document(content="There are over 7,000 languages spoken around the world today."),
Document(
content="Elephants have been observed to recognize themselves in mirrors."
),
Document(
content="Bioluminescent waves can be seen in the Maldives and Puerto Rico."
),
]
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",
DynamoDBEmbeddingRetriever(document_store=document_store),
)
query_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
result = query_pipeline.run(
{"text_embedder": {"text": "How many languages are there?"}}
)
print(result["retriever"]["documents"][0])