Chroma는 패키지 형태로 코드에 내장된 임베디드 데이터베이스 응용 프로그램입니다. Chroma의 장점은 그 간결함에 있습니다. LLM 응용 프로그램을 개발할 때 LLM 메모리를 구현하기 위한 벡터 데이터베이스가 필요하고 독립적인 벡터 데이터베이스를 설치하고 싶지 않을 경우, 텍스트 유사성 언어 검색을 지원하는 Chroma는 좋은 선택입니다. 현재, Chroma 라이브러리는 Python과 JavaScript 두 가지 언어를 지원합니다. 이 튜토리얼은 주로 Python을 기반으로 합니다.

1. Chromadb 설치

pip install chromadb

참고: 현재 버전의 chromadb는 Python 3.11과 호환되지 않습니다. Python 버전을 낮추는 것을 권장합니다.

2. Chroma 클라이언트 초기화

import chromadb
chroma_client = chromadb.Client()

3. 컬렉션 생성

컬렉션은 Chroma 데이터베이스의 테이블과 유사하며 벡터 데이터(문서 및 기타 원본 데이터 포함)가 저장되는 곳입니다. 다음과 같이 컬렉션을 생성합니다:

collection = chroma_client.create_collection(name="tizi365")

4. 데이터 추가

컬렉션을 정의한 후, 데이터를 컬렉션에 추가합니다. Chroma는 데이터를 저장하고 텍스트 데이터의 벡터를 기반으로 특별한 벡터 인덱스를 생성하여 나중에 쉽게 쿼리할 수 있게 합니다.

4.1. 내장 임베딩 모델을 사용하여 벡터 계산

collection.add(
    documents=["This is a document", "This is another document"],
    metadatas=[{"source": "my_source"}, {"source": "my_source"}],
    ids=["id1", "id2"]
)

4.2. 데이터 추가 시 벡터 값 지정

collection.add(
    embeddings=[[1.2, 2.3, 4.5], [6.7, 8.2, 9.2]],
    documents=["This is a document", "This is another document"],
    metadatas=[{"source": "my_source"}, {"source": "my_source"}],
    ids=["id1", "id2"]
)

5. 데이터 쿼리

이제 유사한 텍스트 내용을 쿼리할 수 있으며, Chroma는 "n"개의 가장 유사한 결과를 반환할 것입니다. 아래는 query_texts 쿼리 매개변수를 기반으로 유사 문서 내용을 쿼리하는 예시입니다:

results = collection.query(
    query_texts=["This is a query document"],
    n_results=2
)

기본적으로, Chroma의 데이터는 메모리에 저장되므로 프로그램을 다시 시작할 때 데이터가 손실됩니다. 물론, Chroma를 하드 디스크에 데이터를 지속적으로 저장하도록 설정하여 프로그램이 시작할 때 디스크에서 데이터를 로드하게 할 수 있습니다.