ChromaDocumentStore

ChromaDocumentStore

Chroma는 문서 컬렉션을 메타데이터와 함께 저장하고, 문서·쿼리용 임베딩을 만들며, 문서 메타데이터나 내용으로 필터링해 컬렉션을 검색할 수 있는 오픈소스 벡터 데이터베이스예요. 여기에 더해 Chroma는 멀티모달 임베딩 함수도 지원합니다.

출처: 문서

본문

Chroma는 인메모리(in-memory), 임베디드 데이터베이스, 또는 클라이언트-서버 방식으로 사용할 수 있어요. 인메모리로 실행해도 세션을 넘나들며 내용을 디스크에 유지할 수 있습니다. 덕분에 인메모리 버전으로 프로토타입을 빠르게 만들고, 나중에 클라이언트-서버 버전이 배포된 프로덕션으로 옮겨갈 수 있어요.

Initialization

먼저 Chroma 통합을 설치합니다. Haystack과 Chroma가 아직 없다면 함께 설치돼요. 시작에 필요한 명령은 다음과 같습니다:

pip install chroma-haystack

Chroma에 데이터를 저장하려면 ChromaDocumentStore 인스턴스를 만들고 문서를 쓰면 됩니다:

from haystack_integrations.document_stores.chroma import ChromaDocumentStore
from haystack import Document

document_store = ChromaDocumentStore()
document_store.write_documents(
    [
        Document(content="This is the first document."),
        Document(content="This is the second document."),
    ],
)
print(document_store.count_documents())

이 경우 문서와 함께 임베딩을 넘기지 않았기 때문에, Chroma가 기본 임베딩 함수를 사용해 임베딩을 만들어 줍니다.

Connection Options

인메모리 모드(로컬): Chroma를 로컬 Document Store로 설정해 빠르고 가볍게 쓸 수 있어요. 개발 중이나 소규모 실험에 적합한 옵션입니다. 로컬 인메모리 인스턴스는 이렇게 설정하세요:

from haystack_integrations.document_stores.chroma import ChromaDocumentStore

document_store = ChromaDocumentStore()

영구 저장(Persistent Storage): 세션 간 문서를 유지해야 한다면, 디스크에 저장할 경로를 지정해 영구 저장을 쓸 수 있어요:

from haystack_integrations.document_stores.chroma import ChromaDocumentStore

document_store = ChromaDocumentStore(persist_path="your_directory_path")

원격 연결(Remote Connection): HTTP를 통해 원격 Chroma 데이터베이스에 연결할 수 있어요. 여러 클라이언트가 같은 원격 Chroma 인스턴스와 상호작용하는 분산 설정에 적합합니다. 이 옵션은 인메모리·영구 저장 모드와 호환되지 않습니다.

먼저 Chroma 서버를 시작하세요:

chroma run --path /db_path

또는 docker를 사용해:

docker run -p 8000:8000 chromadb/chroma

그 다음 host와 port 파라미터로 Document Store를 초기화합니다:

from haystack_integrations.document_stores.chroma import ChromaDocumentStore

document_store = ChromaDocumentStore(host="localhost", port=8000)

Supported Retrievers

Haystack Chroma 통합에는 두 가지 Retriever 컴포넌트가 있어요. 둘 다 Chroma query API에 의존하지만 입력·출력이 달라서, 파이프라인에 가장 잘 맞는 것을 고를 수 있습니다:

  • ChromaQueryTextRetriever — 평문 쿼리 문자열을 입력받아 일치하는 문서 리스트를 반환해요. Chroma가 기본 임베딩 함수로 쿼리 임베딩을 만듭니다.
  • ChromaEmbeddingRetriever — 단일 쿼리의 임베딩을 입력받아 일치하는 문서 리스트를 반환해요. 이 컴포넌트에 넘기기 전에 쿼리를 먼저 임베딩해야 합니다. 예를 들어 embedder 컴포넌트를 사용하면 됩니다.

Additional References

더 알아보기 (Learn more)