General

Chroma

Chroma

AI ネイティブアプリケーション向けのオープンソースベクトルデータベース、Chroma について解説します。コアコンセプト、アーキテクチャ、RAG やセマンティック検索などのユースケース、そして代替ソリューションとの比較について学びましょう。

Chroma ベクトルデータベース エンベディング AI ネイティブアプリケーション セマンティック検索
作成日: 2025年12月19日

Chromaとは?

Chromaは、AI-native アプリケーション、特に大規模言語モデル(LLM)マルチモーダルAIを使用するアプリケーション向けに設計されたオープンソースのベクトル(埋め込み)データベースです。従来のデータベースとは異なり、Chromaは高次元ベクトル埋め込み(テキスト、画像、その他の非構造化データの数値表現)の保存、インデックス化、検索に特化しています。

Chromaの中核的な使命は、開発者や組織が最小限のセットアップと最大限の柔軟性で、セマンティック検索、レコメンデーション、RAG、AI-nativeの機能をアプリケーションに追加できるようにすることです。

主な特徴:

  • ドキュメントとメタデータと共に埋め込みを保存・検索するネイティブサポート
  • HNSWインデックスによる高速な近似最近傍(ANN)検索
  • マルチモーダルサポート(テキスト、画像など)
  • ハイブリッドクエリ:セマンティック検索+キーワード検索、メタデータフィルタリング
  • 開発者フレンドリーなAPI(Python、JS)、LangChainやLlamaIndexなどのフレームワークとのネイティブ統合
  • オープンソースApache 2.0ライセンス
  • セルフホスト型とマネージドクラウドの両方のオプション

コアコンセプト

埋め込み

埋め込みは、データのセマンティックな意味をエンコードする密なベクトルです。例えば、文章、画像、音声クリップは、数百または数千の数値のベクトルに変換できます。意味が類似したデータポイントは、元のデータが大きく異なっていても、類似した埋め込み(つまり、ベクトル空間で「近い」)を持ちます。

Chromaは、以下を含む人気のあるモデルで生成された埋め込みをサポートしています:

  • OpenAIのtext-embeddingモデル(例:text-embedding-3-small)
  • HuggingFaceモデル(例:all-MiniLM-L6-v2)
  • Cohere、OpenCLIP、カスタム埋め込み

これは、セマンティック検索、レコメンデーション、検索拡張生成の基礎となります。

コレクション

Chromaのコレクションは、ドキュメント、埋め込み、および関連するメタデータの論理的なグループです。各コレクションには、埋め込み関数/モデル、保存場所(インメモリまたは永続)、パフォーマンスやフィルタリングのためのオプションのカスタム設定を含む独自の構成があります。

これにより、別々のAIアプリケーションやプロジェクトを並行して実行でき、それぞれが特定のニーズに合わせて調整されます。

メタデータとハイブリッド検索

Chromaでは、各ドキュメントまたはベクトルに任意のキー・バリューのメタデータを関連付けることができます。これにより、ハイブリッド検索が可能になります:メタデータ(例:著者、日付、タグ)で結果をフィルタリングし、ベクトル類似度でランク付けします。

サポートされる演算子には、等価・不等価、範囲クエリ($gt$lt)、集合メンバーシップ($in)、論理結合($and$or)が含まれます。

Chromaの仕組み

ベクトルインデックスと類似度検索

Chromaは、高速な近似最近傍(ANN)検索のために階層的ナビゲート可能スモールワールド(HNSW)グラフを使用します。HNSWは、高次元ベクトル類似度検索のための最先端のアルゴリズムで、再現率(精度)と速度のバランスを取り、数百万のベクトルにスケールします。

主な特性:

  • 大規模データセットに対する準線形検索時間
  • 高い再現率/精度(設定可能)
  • 動的な挿入と効率的な削除をサポート

ドキュメントとメタデータの保存

Chromaの各エントリには、生のドキュメント/コンテンツ(テキスト、画像URI等)、ベクトル埋め込み、および関連するメタデータ(任意のキー・バリューJSON)が含まれます。これにより、ハイブリッドクエリと完全なセマンティック検索が可能になります。

Chromaはデータを以下の方法で保存できます:

  • インメモリ(最速、非永続)
  • ディスク上(メタデータ用SQLite、ベクトル用バイナリファイル)
  • Chroma Cloud(完全マネージド)

APIとクライアントライブラリ

Chromaは、4つの主要な操作を持つ最小限で直感的なAPIを提供します:

  • Add: ドキュメントを挿入(オプションで埋め込みとメタデータ付き)
  • Update: 保存されたエントリを変更
  • Delete: エントリを削除
  • Query: ベクトル検索で類似ドキュメントを取得、オプションのメタデータフィルタ付き

Python(chromadb)とJavaScript/TypeScript用のクライアントライブラリが存在します。ChromaはLangChainやLlamaIndexなどのフレームワークとネイティブに統合されます。

アーキテクチャとデプロイメント

オープンソース(セルフホスト)

Chromaは、ローカルまたは独自のインフラストラクチャで3つのモードで実行できます:

インメモリ: 高速、一時的、プロトタイピングやテストに最適
永続: ディスクにデータを保存(SQLite + バイナリベクトルファイル)、ローカル/小規模本番環境に適している
クライアント-サーバー: スタンドアロンサーバーとして実行、HTTP API経由で接続(マルチユーザー、マルチプロセスをサポート)

サーバー起動例:

chroma run --path ./db --port 8000

Pythonクライアント:

import chromadb
client = chromadb.HttpClient(host="localhost", port=8000)

Chroma Cloud(サーバーレス)

Chroma Cloudは完全マネージドのサーバーレスデプロイメントです。弾力的なスケーリング、自動バックアップと高可用性、メンテナンスとモニタリングを処理します。

接続例:

import chromadb
client = chromadb.HttpClient(
    host="api.trychroma.com",
    headers={"Authorization": f"Bearer {CHROMA_API_KEY}"}
)

セットアップと統合

インストール

Python:

pip install chromadb

LangChain統合の場合:

pip install langchain-chroma

基本的な使用例

import chromadb

client = chromadb.Client()
collection = client.create_collection("documents")

collection.add(
    documents=[
        "Artificial intelligence is transforming healthcare diagnostics",
        "Machine learning models predict patient outcomes with increasing accuracy",
        "Neural networks analyze medical imaging faster than radiologists"
    ],
    ids=["doc1", "doc2", "doc3"]
)

results = collection.query(
    query_texts=["AI applications in medicine"],
    n_results=2
)

print(results)

このコードは、コレクションを作成し、ドキュメントを挿入し、セマンティック検索クエリを実行します。

埋め込み関数の設定

Chromaコレクションは異なる埋め込みモデルを使用できます。OpenAI埋め込みを使用するには:

from chromadb.utils.embedding_functions import OpenAIEmbeddingFunction

openai_ef = OpenAIEmbeddingFunction(
    api_key="your-api-key",
    model_name="text-embedding-3-small"
)

collection = client.create_collection(
    name="openai_embeddings",
    embedding_function=openai_ef
)

LangChain統合

LangChainは、RAG、チャットボット、メモリなどの高度なワークフローをサポートする、Chroma用のネイティブラッパーを提供します。

例:

from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
vector_store = Chroma(
    collection_name="example_collection",
    embedding_function=embeddings,
    persist_directory="./chroma_langchain_db",
)

コア機能

オープンソースApache 2.0 - ロックインなし、拡張可能、コミュニティ駆動(GitHub Stars 24k+)
高速ANN検索 - 準線形検索時間のためのHNSWグラフインデックス
ドキュメントとメタデータの保存 - 各埋め込みはドキュメントとユーザー定義のメタデータに関連
ハイブリッド検索 - セマンティック(ベクトル)検索とキーワード検索を組み合わせ
マルチモーダルサポート - テキスト、画像などを保存/検索
バッチ操作 - 効率のための一括挿入とクエリ
シンプルなAPI - 追加、更新、削除、検索
統合 - LangChain、LlamaIndex、OpenAI、HuggingFace、Cohere、OpenCLIPとネイティブ統合
柔軟なデプロイメント - インメモリ、永続、クライアント-サーバー、マネージドクラウド
活発なコミュニティ - Discord、GitHub、ドキュメント

主なユースケース

セマンティック検索

Chromaは、キーワードだけでなく埋め込みを比較することでセマンティック検索を実現します。アプリケーションには、eコマース(「快適な夏の靴」を検索すると、異なる表現でも関連する結果を返す)、ナレッジマネジメント(社内wiki、サポートチケット、コードベース全体を検索)、ヘルスケア(類似のケース、研究、診断画像を検索)が含まれます。

レコメンデーションシステム

埋め込みの類似性により類似したアイテム/ユーザーを見つけます。パーソナライズされた製品/ニュース/記事のレコメンデーション、アイテム間またはユーザー間のマッチングを可能にします。

検索拡張生成(RAG)

RAGにより、LLMはリアルタイムで外部ナレッジベースにアクセスでき、精度が向上し、ハルシネーションが減少します。チャットボットは特定のドキュメントを引用し、アシスタントは最新の企業知識で回答します。

画像、音声、マルチモーダル検索

画像、テキストなどを共有ベクトル空間に埋め込みます。ビジュアル検索(類似画像を検索)、クロスモーダル(テキストで画像を検索、逆も可)、マルチメディアデータセットの整理を可能にします。

チャットボットとAIアプリケーション

ChromaはLLMとチャットボットのための永続的なセマンティックメモリとして機能します。会話履歴や関連する知識スニペットを取得し、コンテキストを考慮した応答を実現します。

データサイエンスと分析

高次元データの探索的データ分析、金融/セキュリティログの異常検知、ナレッジグラフやセマンティックマップの構築をサポートします。

パフォーマンス最適化

Chromaは開発者の速度と効率のために設計されていますが、最適化のヒントには以下が含まれます:

バッチ操作 - オーバーヘッドを減らすために一括で挿入/クエリ
埋め込み次元数 - 低次元ベクトルはメモリ使用量が少なく、検索が高速(精度の犠牲を伴う可能性あり)
インデックス圧縮 - 頻繁な削除/更新後にHNSWインデックスを圧縮
メタデータ事前フィルタリング - 類似度計算前にメタデータでフィルタリングして計算量を削減

例:

collection.add(
    documents=large_document_list,
    ids=id_list,
    metadatas=metadata_list
)

比較と代替

Chroma vs. Pinecone、Faiss、Weaviate、Qdrant、Milvus

機能ChromaPineconeFaissWeaviateQdrantMilvus
オープンソース
セットアップの容易さ非常にシンプルマネージド、簡単複雑中程度中程度中程度
言語サポートPython、JSPython、JS、GoPython、C++Python、JS、GoPython、RESTPython、REST
ベクトルインデックスHNSW複数複数HNSW、その他HNSWIVF、HNSW
ドキュメント保存組み込みなしなし組み込み組み込み組み込み
メタデータフィルタリングありあり制限ありありありあり
ハイブリッド検索ありなしなしありなしなし
クラウド/サーバーレスChroma Cloudありなしありありあり
RBAC/マルチテナンシーなしありなしありありあり
スケールシングルノード分散ローカル、分散分散分散分散
最適用途開発速度、プロトタイピング大規模研究、カスタムMLエンタープライズ検索高パフォーマンス超大規模

エコシステムスナップショット:

  • Chroma: OSS、簡単なセットアップ、ハイブリッド検索、プロトタイピング/開発速度に最適
  • Pinecone: マネージド、分散、エンタープライズグレード、マルチインデックスサポート、高スケール
  • Faiss: OSS、研究/ML重視、C++/Python、データベースではない(ドキュメント/メタデータ保存なし)
  • Weaviate: OSS、分散、ハイブリッド検索、スキーマ、マルチテナント
  • Qdrant: OSS、分散、フィルタリング、REST/gRPC、高パフォーマンス
  • Milvus: OSS、クラウドネイティブ、GPUサポート、超高スケール

参考文献

関連用語

Pinecone

Pineconeは、高性能でスケーラブルなベクトル検索とAIメモリアプリケーションのための、フルマネージド型クラウドネイティブベクトルデータベースです。高次元ベクトル埋め込みのインデックス化と検索を行...

Weaviate

Weaviateは、オブジェクトと高次元埋め込みを保存するオープンソースのクラウドネイティブなベクトルデータベースです。セマンティック検索、ハイブリッド検索、大規模なAI/MLアプリケーションを可能に...

Milvus

Milvusは、非構造化データに対するスケーラブルな類似性検索を実現する、オープンソースのクラウドネイティブなベクトルデータベースです。そのアーキテクチャ、機能、ユースケース、および他のベクトルデータ...

Qdrant

Qdrantは、高次元ベクトルデータ向けのオープンソースベクトル類似検索エンジン兼ベクトルデータベースで、セマンティック検索、RAG、レコメンデーションを可能にします。...

×
お問い合わせ Contact