Vector Databases
概要
ベクトルデータベースは、テキスト、画像、その他のデータを、その意味を捉えた長い数値の並びに変換して格納します。この数値の並びを高次元ベクトル(埋め込み)と呼びます。検索すると、意味が最も近い項目を見つけます。たとえまったく違う言葉が使われていても、同じトピックの本を渡してくれる司書を思い浮かべてください。完全一致のキーワードを照合する代わりに、意味がどれだけ近いか(意味的な近さ)で結果をランク付けし、それをコサイン類似度のような距離メトリクスで測ります。AI アプリ向けのセマンティック検索、レコメンデーション、検索拡張生成(retrieval-augmented generation、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;