プロダクト開発におけるベクトルDB選定の基準
背景
現在、社内でAIチャットボットの開発を進めており、RAG(Retrieval Augmented Generation)検索の仕組みの中でベクトルデータベースの導入を検討しています。試作段階ではQdrantを使用していますが、正式採用に向けて、プロダクトに最適なベクトルDBの選定基準を整理しました。
ベクトルDB選定の主な評価項目
以下は、我々のチームがベクトルDBを選定する際に重視している機能です。優先順位の高い項目から順に紹介します。
1. 多種の埋め込みモデルへの対応
異なる埋め込みモデルに対応していることで、将来的にモデルを変更してもDBの再構築が不要となり、柔軟性が高まります。特に、OSSや商用の多様なモデルに対応しているかは重要な評価ポイントです。
| ベクトルDB | 埋め込みモデル/プロバイダー |
|---|---|
| Chroma | - デフォルトの埋め込み (Chroma) - Cloudflare Workers AI - Cohere - Gemini (Google) - HuggingFace - Jina AI - Mistral AI - Nomic AI - Ollama - OpenAI (e.g., text-embedding-3-small) - Together AI - Voyage AI |
| Milvus | - bge-m3 - Cohere - Gemini (Google) - Instructor - Jina AI - mGTE - Mistral AI - Model2Vec - Nomic AI - OpenAI - Sentence Transformer - Splade - Voyage AI |
| Qdrant | - Aleph Alpha - Bedrock (AWS) - Cohere - Gemini (Google) - Jina AI - Mistral AI - MixedBread - Mixpeek - Nomic AI - NVIDIA NeMo - Ollama - OpenAI - Prem AI - Snowflake - Twelve Labs - Upstage - Voyage AI |
参照:
2. 最大次元数の許容範囲
埋め込みベクトルの次元数が高い場合でも対応できるかどうかは、精度やモデル選定の自由度に影響します。
| ベクトルDB | 最大次元 |
|---|---|
| Chroma | - |
| Milvus | 32,768 |
| Qdrant | 65,535 |
参照:
※ Chromaの公式サイトには最大次元数の記載がありませんが、Stackoverflowの質疑応答では、Chromaがサポートする最大次元数は2,147,483,647であるとの記述が見られました。
3. マルチベクトル対応
Qdrant DBでは、1つのデータエントリーに対して複数のベクトルを保持できるマルチベクトル機能があります。例えば、今度のプロジェクトで1つのセクションに複数の見出しと本文が含まれていますので、それぞれのベクトルをまとめて管理できるため、見出しだけに一致する検索や、本文の一部にだけ関連する検索が可能になり、検索精度の向上が期待できます。
※ Milvusでは、マルチベクトル機能が今後サポートされる予定で、バージョン3.0から対応予定であることがGitHubの議論に記載されています。

4. メタデータ更新のみへの対応
ベクトルの更新には埋め込みモデルの再実行が必要となりコストがかかります。しかし、ベクトルデータを変更せずに、作成日時や更新日時などのメタデータのみを更新したい場合もあります。そのため、メタデータのみを更新できる機能があると、運用面での効率が向上します。
Chromaでメタデータのみ更新のPythonサンプルコード
collection.upsert(
ids=["id1", "id2", "id3", ...],
metadatas=[{"chapter": 3, "verse": 16}, {"chapter": 3, "verse": 5}, {"chapter": 29, "verse": 11}, ...],
)
Qdrantでメタデータのみ更新のPythonサンプルコード
client.set_payload(
collection_name="{collection_name}",
payload={
"property1": "string",
"property2": "string",
},
points=models.Filter(
must=[
models.FieldCondition(
key="color",
match=models.MatchValue(value="red"),
),
],
),
)
※ Qdrantでは、メタデータのことを「ペイロード」と呼びます。
参照:
※ Milvusでは、ベクトル以外のデータ更新への対応も、バージョン3.0から対応予定であることがGitHubの議論に記載されています。

ベクトルDB機能比較表
| DB | 多種の埋込モデル対応 | 最大次元数 | マルチベクトル対応 | メタデータ更新のみへの対応 |
|---|---|---|---|---|
| Chroma | ◎ | △ | ✕ | ◎ |
| Milvus | ◎ | ◎ | ◯ | ◯ |
| Qdrant | ◎ | ◎ | ◎ | ◎ |
- ◎ ⇒ 公式ドキュメンテーションあり
- ◯ ⇒ 対応予定あり
- △ ⇒ 公式ドキュメンテーションなし
- ✕ ⇒ 非対応
結論
現時点での評価では、Qdrantが最も要件を満たしており、埋め込みモデルの対応範囲、最大次元数、マルチベクトル機能、メタデータ更新の柔軟性など、RAG構成における実用性が高いと判断されます。特に、今後のプロジェクトで求められる検索ニーズに対して、Qdrantのマルチベクトル機能は大きな強みとなります。
今後の展望
今後は、実運用に向けてパフォーマンスやスケーラビリティ、セキュリティ面も含めた評価を進めていく予定です。RAG仕組みを支えるベクトルDBはプロダクトの品質に直結しますので、継続的な検証と情報収集を通じて、最適な選択を目指します。
参考リンク
- Chromaがサポートする埋込モデル
- Stackoverflowの質疑応答によるChromaがサポートできる最大次元数
- Chromaのデータ更新
- Chroma_メタデータのみの更新
- Milvusがサポートする埋込モデル
- Milvusでサポートされる最大ベクトル次元
- Milvus_マルチベクトル対応_github_議論
- Milvus_スカラーデータのみの更新_github_議論
- Qdrantのドキュメンテーション
- Qdrantがサポートする埋込モデル
- Qdrant でサポートされる最大ベクトル次元
- Qdrantのマルチベクトル
- Qdrant_ペイロードのみの更新
Discussion