4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめてのベクターDB、まずはChromaから触ってみた

Last updated at Posted at 2025-12-22

この記事は、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

スクリーンショット 2025-09-06 16.43.44.png

※ 仮想環境を終了する場合は deactivate と入力します。

パッケージのインストール

仮想環境が有効な状態で、ChromaDBのインストールを行います。

スクリーンショット 2025-09-06 17.00.37.png

サンプルコードの実行

インストールが完了したら、簡単なサンプルコードで動作を確認してみましょう。データベースの構築から、データの追加、類似性検索までを行います。

demo.py
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がおすすめです。ドキュメントが充実しており、導入のハードルも低いため、まずは手元でベクトル検索の可能性を体感してみてください。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?