Chroma
Chroma je open-source datová vrstva pro AI aplikace zaměřená hlavně na ukládání embeddingů, dokumentů a metadat pro retrieval. Podle oficiální dokumentace umí semantické vyhledávání nad vektory, filtrování podle metadat, fulltext a v některých režimech i hybridní vyhledávání. Prakticky je to nástroj pro RAG, agentic search, interní znalostní báze nebo libovolné AI workflow, kde je potřeba rychle najít relevantní kusy dat.
Co to umí
Z README a dokumentace vychází, že Chroma pokrývá hlavní části retrieval vrstvy:
- ukládání dokumentů, embeddingů a metadat do kolekcí
- vektorové similarity search nad dense embeddingy
- metadata filtering při dotazu
- full-text a regex filtrování nad obsahem dokumentů
- multimodální práci s embeddingy
- lokální běh, single-node server i distribuovaný provoz
- cloud variantu Chroma Cloud pro managed provoz
Dokumentace také rozlišuje dvě důležité roviny:
- open-source Chroma pro lokální nebo self-hosted použití
- Chroma Cloud Search API pro pokročilejší cloudové hledání, včetně hybrid search a složitějšího rankingu
K čemu je to dobré
Chroma dává smysl hlavně tam, kde je potřeba převést vlastní data na něco, co může LLM nebo agent rychle prohledávat:
- RAG nad interní dokumentací – návody, wiki, PDF, exporty z Notionu nebo knowledge base
- paměť pro AI agenty – ukládání kontextu, poznámek, výsledků a pozdější retrieval podle podobnosti
- vyhledávání v kódu nebo firemních datech – pokud je potřeba hledat sémanticky, ne jen přes substring
- vyhledávání s filtrováním – například jen dokumenty z určitého zdroje, projektu nebo časového období
- prototypování AI aplikací – lokálně bez velkého setupu, později s možností přejít na persistentní nebo cloudový režim
Jinými slovy: Chroma není samotný model ani chatbot. Je to infrastruktura, ze které si model bere relevantní kontext.
Základní datový model
Podle architektury je základní jednotkou collection. Každá kolekce obsahuje:
- unikátní ID záznamu
- embedding vector
- volitelná metadata
- dokument
Nad tím jsou ještě další vrstvy:
- database – logický namespace pro více kolekcí
- tenant – vyšší úroveň izolace pro uživatele nebo tým
To je praktické hlavně tehdy, když je potřeba oddělit různé projekty, prostředí nebo zákazníky bez míchání dat v jedné kolekci.
Jak se s tím pracuje
README ukazuje velmi jednoduchý základní workflow v Pythonu:
import chromadb client = chromadb.Client() collection = client.create_collection("all-my-documents") collection.add( documents=["This is document1", "This is document2"], metadatas=[{"source": "notion"}, {"source": "google-docs"}], ids=["doc1", "doc2"], ) results = collection.query( query_texts=["This is a query document"], n_results=2, )
Podle Getting Started je nejjednodušší lokální začátek přes chromadb.Client(), který v Pythonu spustí Chroma in-memory. Pro trvalé uložení dat je potřeba použít PersistentClient nebo běh serveru přes CLI.
Režimy nasazení
Architektura rozlišuje tři hlavní režimy:
- local – embedded režim pro prototypování a experimenty
- single-node – jeden server pro menší a střední workload
- distributed – škálovatelný provoz pro větší produkční nasazení
Podle dokumentace je single-node typicky cílený na menší až střední workloady, zhruba do desítek milionů záznamů napříč několika kolekcemi. Managed variantou distribuovaného režimu je Chroma Cloud.
Pokud se Chroma spouští lokálně jako server, dokumentace uvádí tento základ:
chroma run --path /cesta/k/databazi
Podrobnosti jsou v CLI dokumentaci pro ''chroma run''.
Vyhledávání a filtrování
Open-source Chroma umí podle Query and Get hlavně:
- similarity search přes
.query() - přímé čtení záznamů přes
.get() - filtrování přes
wherepro metadata - filtrování přes
where_documentpro obsah dokumentů
To je důležité, protože retrieval v praxi většinou není jen „najdi nejbližší embedding“. Často je potřeba říct třeba:
- hledej jen v dokumentech z určitého systému
- vrať jen záznamy s konkrétním tagem nebo stránkou
- kombinuj podobnost s textovým omezením v samotném dokumentu
Podle Full Text Search Chroma podporuje v dokumentovém filtru i:
$containsa$not_contains$regexa$not_regex- logické kombinace přes
$anda$or
To je praktické například tehdy, když je potřeba vyhledávat nejen sémanticky, ale i podle explicitních textových vzorů.
Cloud vs. open-source režim
Tady je dobré nepomíchat dvě různé věci:
- open-source Chroma je databázová a retrieval vrstva, kterou lze provozovat lokálně nebo self-hosted
- Chroma Cloud je managed služba nad stejným ekosystémem, která přidává serverless provoz a další cloudové funkce
Dokumentace výslovně uvádí, že nové Search API je v tuto chvíli dostupné pro Chroma Cloud. Právě tam jsou dnes pokročilé možnosti jako:
- unified Search API místo odděleného
query()aget() - hybrid search
- vlastní ranking expressions
- batch operations
- přesnější výběr vracených polí
Pokud tedy někdo čte marketing nebo homepage, je potřeba rozlišovat, co je dostupné obecně v projektu a co je dnes specificky cloudová funkce.
Proč je Chroma zajímavá
Z praktického pohledu je na Chromě zajímavé hlavně to, že spojuje několik věcí do jednoho celku:
- jednoduchý start pro lokální prototypy
- přirozený datový model pro AI retrieval
- více způsobů nasazení od embedded režimu po cloud
- práce s dokumenty, embeddingy i metadata filtrováním v jednom API
To z ní dělá dobrý stavební blok pro aplikace, které potřebují vlastní znalostní vrstvu, ale nechtějí si celou retrieval infrastrukturu skládat ručně z více produktů.
Na co dát pozor
- in-memory klient v Pythonu není persistence – data se po ukončení procesu ztratí, pokud se nepoužije persistentní nebo serverový režim
- pokročilé cloudové search funkce nejsou totéž co lokální OSS režim – je potřeba číst dokumentaci podle konkrétního deployment mode
- Chroma řeší retrieval, ne celé AI workflow – chunking, kvalita embeddingů, relevance dotazů a navazující práce LLM zůstávají na aplikaci
- výsledná kvalita závisí i na datech a embedding modelu – samotná databáze nevyřeší špatně připravené dokumenty nebo nekvalitní chunking
Instalace
README uvádí tento rychlý start:
pip install chromadb # pro JavaScript: npm install chromadb # pro client-server mode: chroma run --path /chroma_db_path
Pokud jde o nejrychlejší první test, dává smysl Python in-memory klient. Pokud má aplikace běžet déle nebo sdílet data mezi více procesy, je lepší persistentní nebo serverový režim.