AI・機械学習
初級
Chroma(クロマ)
Pythonファーストの軽量オープンソースベクトルデータベース。LLMアプリ開発のプロトタイプ向けに設計され、インメモリ・ローカルファイル・クライアントサーバーの3モードで動作する。
0 回閲覧
0 いいね
2026/6/4 更新
関連タグ
ベクトルDB
Python
RAG
プロトタイプ
LangChain
Chroma とは
Chromaは、2022年に設立された米国Chroma AI社が開発するオープンソースのベクトルデータベース。「開発者にとって最も使いやすいベクトルDB」を目標に設計されており、特にPythonエコシステムとLLMフレームワークとの統合を重視している。
LangChain・LlamaIndex・AutoGenなど主要LLMフレームワークがChromaをデフォルトまたは推奨ベクトルストアとして採用しており、RAGシステムのプロトタイプ段階で最も使われるベクトルDBとなっている。
3つの動作モード
In-Memory(開発用)
import chromadb
client = chromadb.Client() # メモリのみ、再起動でリセット
Persistent(ローカルファイル)
client = chromadb.PersistentClient(path="./chroma_db") # SQLite保存
Client/Server(本番用)
chroma run --path ./chroma_db # サーバー起動
client = chromadb.HttpClient(host="localhost", port=8000)
基本操作
import chromadb
client = chromadb.PersistentClient(path="./mydb")
collection = client.create_collection("glossary")
# ドキュメント追加(自動埋め込み)
collection.add(
documents=["Qdrantは高性能なベクトルDB"],
ids=["doc1"],
metadatas=[{"category": "ai"}]
)
# クエリ
results = collection.query(
query_texts=["ベクトル検索のデータベース"],
n_results=2,
where={"category": "ai"}
)
documentsにテキストを渡せば組み込みEmbedding(デフォルトはall-MiniLM-L6-v2)が自動で呼ばれる。外部Embeddingを使う場合はembeddingsパラメータで直接ベクトルを渡す。
LangChainとの統合
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
vectorstore = Chroma(
collection_name="glossary",
embedding_function=OpenAIEmbeddings(),
persist_directory="./chroma_db"
)
retriever = vectorstore.as_retriever(search_kwargs={"k": 5})
制限と注意点
Chromaはプロトタイプに最適化されているため、本番大規模用途では以下の制限がある:
- フィルタ精度: post-filteringのため大量除外時にrecallが低下
- スケール上限: 数百万件程度まで(数千万件以上は不安定)
- マネージドサービス: なし(セルフホストのみ)
- 分散: ネイティブ分散未対応
競合との位置づけ
| 製品 | 用途 | 学習コスト | スケール |
|---|---|---|---|
| Chroma | プロトタイプ | 最低 | 〜数百万件 |
| Qdrant | プロト〜本番 | 低 | 〜数億件 |
| Weaviate | 中〜大規模 | 中 | 〜数億件 |
| Milvus | 大規模本番 | 高 | 数十億件〜 |
| Pinecone | マネージド本番 | 低 | 無制限 |
「まずRAGを動かしたい」というユースケースではChromaが最速の選択肢。