ArcadeDBEmbeddingRetriever
ArcadeDBEmbeddingRetriever
ArcadeDB Document Store와 호환되는 임베딩 기반 Retriever예요. 벡터 유사도 검색에 ArcadeDB의 LSM_VECTOR(HNSW) 인덱스를 사용합니다.
파이프라인에서 가장 흔한 위치:
- RAG 파이프라인에서 Text Embedder 다음, ChatPromptBuilder 앞
- 의미 검색(semantic search) 파이프라인의 마지막 컴포넌트
필수 init 변수: document_store — ArcadeDBDocumentStore 인스턴스
필수 run 변수: query_embedding — 쿼리를 나타내는 벡터(float 목록)
출력 변수: documents — 문서 목록
API reference: ArcadeDB
GitHub link: https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/arcadedb
Package name: arcadedb-haystack
출처: 문서
본문
Overview
ArcadeDBEmbeddingRetriever는 스토어의 HNSW 인덱스를 사용해 쿼리 임베딩을 문서 임베딩과 비교함으로써 ArcadeDBDocumentStore에서 문서를 검색해요. 메타데이터 필터링을 위한 선택 filters와 결과 수를 제한하는 top_k를 받아들입니다. 인덱싱 파이프라인에는 Document Embedder를, 쿼리 파이프라인에는 Text Embedder를 사용해 임베딩이 준비되게 하세요.
Installation
pip install arcadedb-haystack
ArcadeDB가 실행 중인지(예: Docker로) 확인하고 자격 증명(ARCADEDB_USERNAME, ARCADEDB_PASSWORD)이 설정되어 있는지 확인하세요.
이 페이지의 예시는 sentence-transformers-haystack 패키지의 Sentence Transformers 임베더를 사용해요. 예시를 실행하려면 설치하세요:
pip install sentence-transformers-haystack
Usage
On its own
from haystack_integrations.document_stores.arcadedb import ArcadeDBDocumentStore
from haystack_integrations.components.retrievers.arcadedb import (
ArcadeDBEmbeddingRetriever,
)
document_store = ArcadeDBDocumentStore(
url="http://localhost:2480",
database="haystack",
embedding_dimension=768,
)
retriever = ArcadeDBEmbeddingRetriever(document_store=document_store, top_k=5)
# Example: run with a query embedding (e.g. from an embedder)
result = retriever.run(query_embedding=[0.1] * 768)
for doc in result["documents"]:
print(doc.content)
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.arcadedb import ArcadeDBDocumentStore
from haystack_integrations.components.retrievers.arcadedb import (
ArcadeDBEmbeddingRetriever,
)
document_store = ArcadeDBDocumentStore(
url="http://localhost:2480",
database="haystack",
embedding_dimension=768,
recreate_type=True,
)
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["documents"],
policy=DuplicatePolicy.OVERWRITE,
)
query_pipeline = Pipeline()
query_pipeline.add_component("text_embedder", SentenceTransformersTextEmbedder())
query_pipeline.add_component(
"retriever",
ArcadeDBEmbeddingRetriever(document_store=document_store, top_k=3),
)
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])
더 알아보기 (Learn more)
- ArcadeDBDocumentStore — 스토어 설정
- Metadata Filtering — 필터 문법