この記事は、Wano Group Advent Calendar 2025 の23日目の記事です。
なぜ今、ベクトルデータベースが注目されているのか?
近年、大規模言語モデル(LLM)の急速な発展に伴い、ベクトルデータベースへの注目が非常に高まっています。その背景には、LLMの制約を克服し、より効率的なデータ処理を実現するための手法が確立されたことがあります。
多くの開発者は、大量のドキュメント、ニュース、文献などのデータを埋め込み(Embedding)という技術を用いてベクトルデータに変換し、ベクトルデータベースに格納しています。
このアプローチは、ユーザーがLLMに質問を投げかける際、以下のようなプロセスで非常に有効に働きます。
-
クエリの変換: ユーザーの質問を即座にベクトルへ変換します。
-
類似性検索: そのベクトルを用いてデータベース内を検索し、質問内容に最も関連性の高い情報を抽出します。
-
回答生成: 抽出した情報をLLMへの入力に付加し、それに基づいた精度の高い回答を生成させます。
この仕組みはLLMの計算負荷の軽減やレスポンスの高速化、コスト削減につながるだけでなく、LLMのトークン数制限を回避し、より大規模な外部知識に基づいた回答を可能にします。
Chromaとは?
Chromaは、特にLLMアプリケーションの開発に特化したオープンソースのベクトルデータベースです。開発者にとって多くの利点を提供します。
セットアップと使用が簡単
Chromaの最大の特徴は、その使いやすさにあります。Pythonライブラリとして提供されており、pip install だけで導入可能です。複雑なサーバー設定やデプロイ作業を必要とせず、すぐにベクトル検索の実装を開始できます。
軽量で組み込み可能
非常に軽量な設計で、アプリケーション内に直接組み込んで動作させることができます。外部データベースサービスを立てることなく、ローカル環境や単一のプロジェクト内で完結してベクトルデータを管理できるため、プロトタイピングや小規模なプロジェクトに最適です。
LLMとの高い親和性
LangChainやLlamaIndexといった主要なLLMオーケストレーションツールとシームレスに連携できます。これにより、外部知識をLLMに提供するRAGシステムを効率的に構築することが可能です。
Chromaのインストールとトラブルシューティング
macOS環境でChromaをインストールしようとすると、以下のエラーに直面することがあります。
> pip install chromadb
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try brew install
xyz, where xyz is the package you are trying to
install.
これは、macOSやHomebrewが管理するシステムPython環境を保護するための仕様です。システム側のパッケージ構成を壊さないよう、直接的なインストールが制限されています。
この問題を解決する推奨される方法は、仮想環境を利用することです。
仮想環境の作成と有効化
まず、プロジェクトディレクトリに移動し、以下のコマンドで仮想環境を作成します。
python3 -m venv myworkspace
次に、作成した仮想環境を有効化します。成功すると、ターミナルのプロンプトの先頭に (myworkspace) と表示されます。
source myworkspace/bin/activate
※ 仮想環境を終了する場合は deactivate と入力します。
パッケージのインストール
仮想環境が有効な状態で、ChromaDBのインストールを行います。
サンプルコードの実行
インストールが完了したら、簡単なサンプルコードで動作を確認してみましょう。データベースの構築から、データの追加、類似性検索までを行います。
import chromadb
client = chromadb.Client()
collection = client.create_collection("my_collection")
# テキストを追加
collection.add(
documents=["犬は食肉目イヌ科イヌ属に分類される哺乳類の一種である", "猫は食肉目ネコ科ネコ属に分類される", "トラは、哺乳綱食肉目ネコ科ヒョウ属に分類される食肉類。同属のライオン、ヒョウなどともに猛獣に数えられる動物である"],
ids=["id1", "id2", "id3"]
)
# 意味が似ているものを検索
results = collection.query(
query_texts=["犬について教えて"],
n_results=1
)
print(results)
実行結果
python demo.py
{
'ids': [['id1']],
'embeddings': None,
'documents': [['犬は食肉目イヌ科イヌ属に分類される哺乳類の一種である']],
'uris': None,
'included': ['metadatas', 'documents', 'distances'],
'data': None,
'metadatas': [[None]],
'distances': [[0.6796860098838806]]}
}
「犬について教えて」というクエリに対し、最も近い「犬は食肉目イヌ科イヌ属に分類される哺乳類の一種である」が正しく抽出されました。
実際に利用した際の所感
クラウド上では多様なマネージド・ベクトルデータベースが提供されていますが、ローカル環境での試行やスモールスタートであれば、Chromaがおすすめです。ドキュメントが充実しており、導入のハードルも低いため、まずは手元でベクトル検索の可能性を体感してみてください。

