ArangoEmbeddingRetriever
ArangoEmbeddingRetriever
ArangoDB Document Store와 호환되는 임베딩 기반 Retriever예요.
파이프라인에서 가장 흔한 위치:
- RAG 파이프라인에서 Text Embedder 다음, PromptBuilder 앞
- 의미 검색(semantic search) 파이프라인의 마지막 컴포넌트
필수 init 변수: document_store — ArangoDocumentStore 인스턴스
필수 run 변수: query_embedding — 쿼리를 나타내는 벡터(float 목록)
출력 변수: documents — 문서 목록
API reference: ArangoDB
GitHub link: https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/arangodb
Package name: arangodb-haystack
출처: 문서
본문
Overview
ArangoEmbeddingRetriever는 ArangoDB의 AQL 벡터 함수를 사용해 ArangoDocumentStore에서 문서를 검색해요. 쿼리 임베딩을 문서 임베딩과 비교해 가장 유사한 문서를 반환합니다.
query_embedding 외에도 retriever는 검색 공간을 좁히는 선택 filters와 결과 수를 제한하는 top_k를 받아들여요. 둘 다 초기화 때 설정할 수 있고 run() 호출마다 덮어쓸 수 있습니다.
임베딩 차원과 유사도 함수(cosine, dot_product, l2)는 초기화 시점에 ArangoDocumentStore에 설정됩니다.
Installation
pip install arangodb-haystack
벡터 인덱스가 활성화된 ArangoDB 3.12+가 실행 중인지 확인하세요. 예를 들어 Docker로:
docker run -d -p 8529:8529 \
-e ARANGO_ROOT_PASSWORD=test-password \
arangodb:3.12 arangod --vector-index
이 페이지의 예시는 sentence-transformers-haystack 패키지의 Sentence Transformers 임베더를 사용해요. 예시를 실행하려면 설치하세요:
pip install sentence-transformers-haystack
Usage
On its own
from haystack import Document
from haystack_integrations.document_stores.arangodb import ArangoDocumentStore
from haystack_integrations.components.retrievers.arangodb import (
ArangoEmbeddingRetriever,
)
document_store = ArangoDocumentStore(
host="http://localhost:8529",
embedding_dimension=3,
recreate_collection=True,
)
document_store.write_documents(
[
Document(
content="There are over 7,000 languages spoken around the world today.",
embedding=[0.1, 0.2, 0.3],
),
Document(
content="Elephants have been observed to recognize themselves in mirrors.",
embedding=[0.8, 0.1, 0.5],
),
],
)
retriever = ArangoEmbeddingRetriever(document_store=document_store, top_k=1)
result = retriever.run(query_embedding=[0.1, 0.2, 0.3])
print(result["documents"][0].content)
In a pipeline
from haystack import Document, Pipeline
from haystack.document_stores.types import DuplicatePolicy
from haystack_integrations.components.embedders.sentence_transformers import (
SentenceTransformersDocumentEmbedder,
SentenceTransformersTextEmbedder,
)
from haystack_integrations.document_stores.arangodb import ArangoDocumentStore
from haystack_integrations.components.retrievers.arangodb import (
ArangoEmbeddingRetriever,
)
document_store = ArangoDocumentStore(
host="http://localhost:8529",
embedding_dimension=384,
recreate_collection=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(
model="sentence-transformers/all-MiniLM-L6-v2",
)
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(model="sentence-transformers/all-MiniLM-L6-v2"),
)
query_pipeline.add_component(
"retriever",
ArangoEmbeddingRetriever(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].content)
더 알아보기 (Learn more)
- ArangoDocumentStore — 유사도 함수·임베딩 차원 설정
- Metadata Filtering — 필터 문법