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
- 🧑🍳 Cookbook: Use Chroma for RAG and Indexing
더 알아보기 (Learn more)
- ChromaEmbeddingRetriever — Haystack 공식 문서