ベクトルデータベース
埋め込みベクトルを保存し、類似度検索を高速に実行するデータベース
データベースAI
ベクトルデータベースとは
ベクトルデータベース (Vector Database) は、埋め込みベクトル (高次元の数値配列) を保存し、コサイン類似度や L2 距離で類似ベクトルを高速に検索するデータベースである。RAG、セマンティック検索、レコメンデーションの基盤。
なぜ必要か
通常の DB: WHERE name = 'Alice' ← 完全一致
ベクトル DB: 「TypeScript 入門」に意味的に近いドキュメントを検索
→ 「JavaScript の基礎」「フロントエンド開発」がヒット (キーワード一致なし)
主要なベクトル DB
| DB | 特徴 | AWS での利用 |
|---|---|---|
| OpenSearch (k-NN) | 全文検索 + ベクトル検索 | Amazon OpenSearch Service |
| Pinecone | ベクトル検索専用 SaaS | - |
| pgvector | PostgreSQL 拡張 | Aurora PostgreSQL |
| Qdrant | Rust 製、高速 | セルフホスト |
| Weaviate | GraphQL API | セルフホスト |
OpenSearch でのベクトル検索
// インデックスの作成
PUT /documents
{
"mappings": {
"properties": {
"title": { "type": "text" },
"embedding": { "type": "knn_vector", "dimension": 1024 }
}
}
}
// ベクトル検索
POST /documents/_search
{
"query": {
"knn": {
"embedding": {
"vector": [0.12, -0.34, ...],
"k": 10
}
}
}
}
RAG パイプライン
1. ドキュメントを埋め込みベクトルに変換 (Bedrock Titan Embed)
2. ベクトル DB に保存 (OpenSearch)
3. ユーザーの質問を埋め込みベクトルに変換
4. ベクトル DB で類似ドキュメントを検索 (k-NN)
5. 検索結果 + 質問を LLM に渡す (Bedrock Nova)
6. LLM が回答を生成
近似最近傍探索 (ANN)
全ベクトルとの距離を計算すると O(n) で遅い。ANN アルゴリズムで近似的に高速検索する。
| アルゴリズム | 特徴 |
|---|---|
| HNSW | 高精度、メモリ消費大 |
| IVF | メモリ効率が良い |
| PQ (Product Quantization) | ベクトルを圧縮 |
DynamoDB でのシンプルなベクトル検索
小規模 (数千件) なら DynamoDB にベクトルを保存し、Lambda で全件スキャン + コサイン類似度計算も可能。大規模になったら OpenSearch に移行する。
基礎から学ぶなら関連書籍が手がかりになる。