ChromaDB 컬렉션

ChromaDB 컬렉션 (Collections)

컬렉션은 ChromaDB에서 데이터를 저장하고 검색하는 가장 기본적인 단위예요. 벡터 DB 안의 "테이블"이라고 생각하면 돼요. 이 페이지에서는 컬렉션을 만들고, 조회하고, 이름이나 메타데이터를 수정하는 방법을 다뤄요.

출처: 공식문서 - Manage Collections

컬렉션 만들기

create_collection을 호출하면 이름만으로도 컬렉션을 만들 수 있어요. 컬렉션 이름은 같은 데이터베이스 안에서 유일해야 하고, 이미 존재하는 이름으로 만들면 예외가 발생해요.

collection = client.create_collection(name="my_collection")

문서를 컬렉션에 추가하면 ChromaDB가 컬렉션에 연결된 임베딩 함수(embedding function) 를 이용해 자동으로 벡터를 만들고 저장해요. 임베딩 함수를 지정하지 않으면 기본값으로 sentence transformer 기반 임베딩이 사용돼요.

from chromadb.utils.embedding_functions import OpenAIEmbeddingFunction

collection = client.create_collection(
    name="my_collection",
    embedding_function=OpenAIEmbeddingFunction(
        api_key=os.getenv("OPENAI_API_KEY"),
        model_name="text-embedding-3-small"
    )
)

반대로 ChromaDB가 임베딩하도록 하지 않고, 데이터를 추가할 때 벡터를 직접 넘길 수도 있어요. 이 경우 컬렉션에 임베딩 함수가 없으므로 데이터를 추가하거나 검색할 때 직접 벡터를 제공해야 해요.

컬렉션 메타데이터

컬렉션에는 설명 같은 메타데이터를 붙일 수 있어요. 임베딩 함수와 함께 metadata 인자로 전달하면 돼요.

from datetime import datetime

collection = client.create_collection(
    name="my_collection",
    embedding_function=emb_fn,
    metadata={
        "description": "my first Chroma collection",
        "created": str(datetime.now())
    }
)

컬렉션 조회

get_collection은 이름으로 컬렉션을 찾아 Collection 객체를 돌려줘요. 여기에는 name, metadata, configuration, embedding_function 같은 정보가 담겨 있어요.

collection = client.get_collection(name="my-collection")

list_collections는 데이터베이스에 있는 모든 컬렉션을 만든 순서(오래된 것부터) 로 돌려줘요.

collections = client.list_collections()

컬렉션을 만들 때 사용했던 임베딩 함수는 최신 ChromaDB 버전(1.1.13 이상)에서는 서버에 저장돼서, 이후 get에서 자동으로 다시 찾아줘요. 더 오래된 버전이라면 조회할 때 같은 임베딩 함수를 직접 제공해야 해요.

컬렉션 수정

컬렉션을 만든 뒤에는 modify 메서드로 이름, 메타데이터, 그리고 인덱스 설정(configuration) 중 수정 가능한 값들을 바꿀 수 있어요.

collection.modify(
   name="new-name",
   metadata={"description": "new description"}
)

더 알아보기 (Learn more)