ChromaEmbeddingRetriever

ChromaEmbeddingRetriever

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

출처: 문서

본문

항목 내용
파이프라인에서의 일반적인 위치 1. RAG 파이프라인에서 Text Embedder 이후, PromptBuilder 이전 / 2. 의미 검색(semantic search) 파이프라인의 마지막 컴포넌트 / 3. 추출형 QA 파이프라인에서 Text Embedder 이후, TransformersExtractiveReader 이전
필수 init 변수 document_store — ChromaDocumentStore의 인스턴스
필수 run 변수 query_embedding — float 리스트
출력 변수 documents — 문서 리스트
API reference Chroma
GitHub link https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/chroma
Package name chroma-haystack

Overview

ChromaEmbeddingRetriever는 ChromaDocumentStore와 호환되는 임베딩 기반 Retriever예요. 쿼리 임베딩과 문서 임베딩을 비교하고, 그 결과를 바탕으로 ChromaDocumentStore에서 쿼리와 가장 관련 있는 문서를 가져옵니다.

쿼리는 이 컴포넌트에 넘기기 전에 먼저 임베딩되어야 해요. 예를 들어 텍스트 embedder 컴포넌트를 사용하면 됩니다.

query_embedding 외에도 ChromaEmbeddingRetriever는 top_k(검색할 최대 문서 수)와 filters(검색 공간을 좁히기 위한 필터) 같은 다른 선택적 파라미터를 받아들여요.

Usage

On its own

이 Retriever를 실행하려면 ChromaDocumentStore와 인덱싱된 문서가 필요합니다.

from haystack_integrations.document_stores.chroma import ChromaDocumentStore
from haystack_integrations.components.retrievers.chroma import ChromaEmbeddingRetriever

document_store = ChromaDocumentStore()

retriever = ChromaEmbeddingRetriever(document_store=document_store)

# example run query
retriever.run(query_embedding=[0.1] * 384)

In a pipeline

파이프라인에서 ChromaEmbeddingRetriever를 사용하는 방법이에요. 이 예시에서는 인덱싱 파이프라인과 쿼리 파이프라인 두 개를 만들게 됩니다.

인덱싱 파이프라인에서는 문서를 Document Embedder에 전달한 뒤 Document Store에 씁니다.

그리고 쿼리 파이프라인에서는 텍스트 embedder로 입력 쿼리의 벡터 표현을 얻어 ChromaEmbeddingRetriever에 전달해 결과를 얻습니다.

import os
from pathlib import Path

from haystack import Pipeline
from haystack.dataclasses import Document
from haystack.components.writers import DocumentWriter

# Note: the following requires a "pip install sentence-transformers-haystack"
from haystack_integrations.components.embedders.sentence_transformers import (
    SentenceTransformersDocumentEmbedder,
    SentenceTransformersTextEmbedder,
)

from haystack_integrations.document_stores.chroma import ChromaDocumentStore
from haystack_integrations.components.retrievers.chroma import ChromaEmbeddingRetriever
from sentence_transformers import SentenceTransformer

# Chroma is used in-memory so we use the same instances in the two pipelines below
document_store = ChromaDocumentStore()

documents = [
    Document(content="This contains variable declarations", meta={"title": "one"}),
    Document(
        content="This contains another sort of variable declarations",
        meta={"title": "two"},
    ),
    Document(
        content="This has nothing to do with variable declarations",
        meta={"title": "three"},
    ),
    Document(content="A random doc", meta={"title": "four"}),
]

indexing = Pipeline()
indexing.add_component("embedder", SentenceTransformersDocumentEmbedder())
indexing.add_component("writer", DocumentWriter(document_store))
indexing.connect("embedder.documents", "writer.documents")
indexing.run({"embedder": {"documents": documents}})

querying = Pipeline()
querying.add_component("query_embedder", SentenceTransformersTextEmbedder())
querying.add_component("retriever", ChromaEmbeddingRetriever(document_store))
querying.connect("query_embedder.embedding", "retriever.query_embedding")
results = querying.run({"query_embedder": {"text": "Variable declarations"}})

for d in results["retriever"]["documents"]:
    print(d.meta, d.score)

Additional References

더 알아보기 (Learn more)