====== Chroma ======
[[https://github.com/chroma-core/chroma|Chroma]] je open-source datová vrstva pro AI aplikace zaměřená hlavně na ukládání embeddingů, dokumentů a metadat pro retrieval. Podle [[https://docs.trychroma.com/|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í
* [[https://docs.trychroma.com/cloud/search-api/overview|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 [[https://docs.trychroma.com/reference/architecture/overview|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 [[https://docs.trychroma.com/docs/overview/getting-started|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 [[https://docs.trychroma.com/docs/run-chroma/clients|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 [[https://www.trychroma.com/|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 [[https://docs.trychroma.com/docs/cli/run|CLI dokumentaci pro ''chroma run'']].
===== Vyhledávání a filtrování =====
Open-source Chroma umí podle [[https://docs.trychroma.com/docs/querying-collections/query-and-get|Query and Get]] hlavně:
* similarity search přes ''.query()''
* přímé čtení záznamů přes ''.get()''
* filtrování přes ''where'' pro metadata
* filtrování přes ''where_document'' pro 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 [[https://docs.trychroma.com/docs/querying-collections/full-text-search|Full Text Search]] Chroma podporuje v dokumentovém filtru i:
* ''$contains'' a ''$not_contains''
* ''$regex'' a ''$not_regex''
* logické kombinace přes ''$and'' a ''$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 [[https://docs.trychroma.com/cloud/search-api/overview|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()'' a ''get()''
* 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.
===== Zdroje =====
* [[https://github.com/chroma-core/chroma|chroma-core/chroma – GitHub repozitář]]
* [[https://raw.githubusercontent.com/chroma-core/chroma/main/README.md|Chroma – README]]
* [[https://docs.trychroma.com/|Chroma Documentation]]
* [[https://docs.trychroma.com/docs/overview/getting-started|Getting Started]]
* [[https://docs.trychroma.com/docs/run-chroma/clients|Chroma Clients]]
* [[https://docs.trychroma.com/docs/cli/run|Run a Chroma Server]]
* [[https://docs.trychroma.com/docs/querying-collections/query-and-get|Query and Get]]
* [[https://docs.trychroma.com/docs/querying-collections/full-text-search|Full Text Search]]
* [[https://docs.trychroma.com/reference/architecture/overview|Architecture Overview]]
* [[https://docs.trychroma.com/cloud/search-api/overview|Search API Overview]]
* [[https://docs.trychroma.com/docs/overview/oss|Open Source]]
* [[https://www.trychroma.com/|Chroma homepage]]