跳轉至

建立 2026-09-15 更新 2026-09-15

Chroma

Chroma 是開源的嵌入資料庫,目標是「在自己的機器上幾分鐘就能查」。預設會幫你跑 embedding,所以最小範例常常看不到向量本身。適合課程作業、RAG 原型,以及先驗證切塊策略再搬去託管服務。

教學影片見 Chroma 影音

什麼時候選它

  • 本機開發,不想先申請雲端 API。
  • 跟著 LangChain、LlamaIndex 的入門範例走。
  • 資料量還在筆電記憶體/磁碟可負擔的範圍。

資料要上正式叢集、要多租戶與嚴格 SLA 時,再評估 QdrantMilvusPinecone

核心物件

名稱 作用
Client 連到記憶體、本機目錄或 Chroma server。
Collection 類似資料表;文件、embedding、metadata 都放這裡。
Document 你傳入的原文。若沒自己給向量,Chroma 會用預設 embedding 函式算出來。

三種連法差在資料會不會在行程結束後消失:

  • chromadb.Client():行程內,重啟就沒了。
  • chromadb.PersistentClient(path="./chroma"):寫到目錄,適合本機專案。
  • chroma run 或 Docker 起 server,再用 HttpClient:多個程式共用同一個庫。

最小流程

import chromadb

client = chromadb.PersistentClient(path="./chroma")
collection = client.get_or_create_collection(name="docs")

collection.add(
    ids=["1", "2"],
    documents=[
        "退貨請於七日內提出申請。",
        "運費依重量與地區計算。",
    ],
    metadatas=[{"topic": "refund"}, {"topic": "shipping"}],
)

hits = collection.query(
    query_texts=["怎麼把商品寄回去?"],
    n_results=2,
    where={"topic": "refund"},
)
print(hits["documents"], hits["distances"])

query_texts 會走跟寫入時相同的 embedding 函式。若你已經有向量,改傳 embeddings=query_embeddings=,並在建立 collection 時指定對應的 embedding function,避免混用兩個模型。

實務注意

  • 預設模型多半是 Sentence Transformer 小模型,品質與 OpenAI 大模型不同;要比產品時先固定同一套 embedding。
  • where 是 metadata 過濾。條件太嚴會得到空結果,這是正常行為。
  • Chroma Cloud 與本機 API 持續演進,複製範例前先看 Getting Started

官方學習資源

官方文件與頻道

Chroma 文件 Getting Started 是目前最準的 API 來源。官方 YouTube @trychroma 以概念與研究分享為主,逐步操作多在社群教學。內嵌見 Chroma 影音

官方 YouTube

創辦人 Jeff Huber 的 Context Engineering for Engineers 說明檢索品質如何影響 LLM context,適合做完 Hello World 之後看。