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が最速の選択肢。

この記事について
カテゴリーAI・機械学習
難易度初級
作成日2026/6/4