Vector Databases
概要
ベクトルデータベースは、テキスト、画像、その他のデータの意味を表す高次元ベクトル(埋め込み)を格納し、クエリベクトルに最も類似した項目を見つけます。完全一致のキーワードを照合する代わりに、コサイン類似度のような距離メトリクスを使って意味的な近さで結果をランク付けします。AI アプリ向けのセマンティック検索、レコメンデーション、検索拡張生成(RAG)を支えています。
強み
- ANN インデックスを介した、数百万の埋め込みに対する高速な類似度検索。
- キーワードだけでなく意味を理解するセマンティック検索と RAG を可能にする。
- 多くの選択肢: pgvector、Pinecone、Qdrant、Weaviate、Milvus、Chroma。
- メタデータフィルタリングが、セマンティック検索と構造化された制約を組み合わせる。
- 近似最近傍アルゴリズムによって、大規模なコーパスにスケールする。
トレードオフ
- 結果は近似であり、チューニングは再現率と速度をトレードオフする。
- 埋め込みの品質は、ベクトルを生成したモデルに完全に依存する。
- モデルを変更すると、コーパス全体の再埋め込みが必要になる。
- ストレージとメモリは、次元数とデータセットの大きさに伴って増える。
使いどころ
セマンティック検索、ドキュメント Q&A、レコメンデーション、重複排除、そして関連するコンテキストを LLM に供給する RAG パイプラインにはベクトルデータベースを使いましょう。控えめな規模であれば、pgvector 拡張によって PostgreSQL のリレーショナルデータの隣にベクトルを保持できます。
バイブコーディングとの相性
AI を誘導する際は、3つのことを明示しましょう。どの埋め込みモデルを使うか(ベクトルの次元数がインデックスと一致するように)、距離メトリクス(テキストではコサインが一般的)、そして埋め込み前にソースドキュメントをどうチャンク分割するか、です。各ベクトルの隣に有用なメタデータを格納させて(たとえば user_id や doc_type で)フィルタできるようにし、埋め込みとクエリのコードが同じモデルを使い続けるよう AI に求めましょう。良いヒント: top-k のチャンクとそのソース id を返す RAG の検索ステップを AI に構築させれば、回答の追跡可能性が保たれ、モデルが実際にどのコンテキストを使ったかを検証できます。
-- PostgreSQL with the pgvector extension
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE documents (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
content TEXT NOT NULL,
doc_type TEXT,
embedding VECTOR(1536) -- must match your embedding model
);
-- Approximate-nearest-neighbor index for cosine distance
CREATE INDEX ON documents
USING hnsw (embedding vector_cosine_ops);
-- Top-5 most similar chunks to a query embedding ($1)
SELECT id, content
FROM documents
WHERE doc_type = 'manual'
ORDER BY embedding <=> $1
LIMIT 5;