ArangoEmbeddingRetriever

ArangoEmbeddingRetriever

ArangoDB Document Store와 호환되는 임베딩 기반 Retriever예요.

파이프라인에서 가장 흔한 위치:

  1. RAG 파이프라인에서 Text Embedder 다음, PromptBuilder 앞
  2. 의미 검색(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)