Chroma는 AI 네이티브 오픈소스 벡터 데이터베이스다. LangChain, LlamaIndex, Haystack과 긴밀히 통합되며 로컬 영속 모드와 클라이언트-서버 모드를 모두 지원한다. 빠른 프로토타이핑에 적합하다.
주요 특징
| 항목 | 설명 |
|---|
| 저장 방식 | SQLite + HNSW 인덱스 |
| 임베딩 내장 | 자동 임베딩 생성 지원 |
| 메타데이터 | 필드 기반 필터링 |
| 멀티모달 | 텍스트, 이미지, 오디오 |
| 배포 | 로컬, 클라이언트-서버, 클라우드 |
기본 사용법
python
import chromadb
from chromadb.utils import embedding_functions
client = chromadb.PersistentClient(path="./chroma_db")
openai_ef = embedding_functions.OpenAIEmbeddingFunction(
api_key="sk-...",
model_name="text-embedding-3-small"
)
collection = client.get_or_create_collection(
name="my_documents",
embedding_function=openai_ef,
metadata={"hnsw:space": "cosine"}
)
collection.add(
documents=[
"Python은 인터프리터 언어입니다.",
"JavaScript는 웹 개발에 사용됩니다.",
"Rust는 시스템 프로그래밍 언어입니다.",
],
metadatas=[
{"category": "language", "type": "interpreted"},
{"category": "language", "type": "scripting"},
{"category": "language", "type": "systems"},
],
ids=["doc1", "doc2", "doc3"]
)
results = collection.query(
query_texts=["빠른 프로그래밍 언어"],
n_results=2,
where={"category": "language"},
)
print(results["documents"])
LangChain 통합
python
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(
documents=docs,
embedding=embeddings,
persist_directory="./chroma_db",
collection_name="rag_docs",
)
retriever = vectorstore.as_retriever(
search_type="mmr",
search_kwargs={"k": 5, "fetch_k": 20}
)
관련 문서