以下に AWS Bedrock における ナレッジベース構築と、メタデータフィルタの設定に関するメモをまとめます。構成や制約を理解しておくと設計がスムーズです。
🔧 前提
- AWS Bedrock Knowledge Bases は、既存のドキュメント (S3 等) をベースに RAG(Retrieval-Augmented Generation)構成を簡単に構築できるマネージドサービス。
- 検索エンジンは現在、Amazon OpenSearch または Amazon Kendra に対応。
- メタデータフィルタは、ドキュメントに紐づく「属性」で検索時の絞り込みに使える。
🧱 ナレッジベース構築の流れ(概要)
-
ドキュメント配置
- S3 バケットに
.pdf,.txt,.mdなどのドキュメントを配置。
- S3 バケットに
-
データソースの設定
- Bedrock で S3 をデータソースとして指定。
- 定期的 or 手動で同期。
-
ベクターストア設定
- OpenSearch または Kendra をベクターストアとして接続。
- OpenSearch では、専用の index を作成し、フィールド定義を設計。
-
ナレッジベース作成
- データソース + ベクターストアを指定し、ナレッジベース作成。
- Foundation Model (Claude, Titan, etc.) を選択。
🧷 メタデータフィルタの設計メモ
📌 メタデータとは?
- 各ドキュメントやそのチャンクに付与できる「属性情報」。
- 例:
department: HR,doc_type: policy,created_at: 2023-01-01など。
📁 付与方法
- メタデータはドキュメント同期時に Bedrock が自動で付与することはほぼない(例外:Kendra は一部自動抽出あり)。
- 明示的に制御したい場合、ドキュメント名やパス、S3 メタデータ、または JSON メタ情報を使って構成。
方法例 1:S3 オブジェクトメタデータを使う
aws s3 cp sample.pdf s3://your-bucket/docs/sample.pdf \
--metadata department=HR,doc_type=policy
方法例 2:メタデータ付き JSON ファイル形式(OpenSearch 使用時)
{
"text": "この文章は会社の規則について述べています。",
"metadata": {
"department": "HR",
"doc_type": "policy",
"created_at": "2023-01-01"
}
}
- JSON ファイルで S3 にアップロードし、事前に適切なベクターストアと連携。
🕵️♂️ フィルタの使い方(検索時)
ナレッジベースを使った検索 API 呼び出し時に、filter パラメータを指定可能。
例:Bedrock の API 経由での検索
{
"knowledgeBaseId": "kb-xxxx",
"input": "会社の休暇ポリシーを教えてください",
"retrievalConfiguration": {
"vectorSearchConfiguration": {
"filter": {
"doc_type": "policy",
"department": "HR"
}
}
}
}
🎯 注意: メタデータキー・値は、ベクターストアで定義した形式に合致している必要があります。
💡 Tips
| ポイント | 説明 |
|---|---|
| フィルタ精度 | 検索対象がチャンク単位なので、チャンクごとに正しいメタデータをつける設計が重要。 |
| Kendra の場合 | ドキュメントタイプや作成日など、Kendra が自動抽出してメタデータとして付ける項目もある。 |
| クエリデバッグ | Bedrock のコンソールではフィルタを試す UI は限定的なので、API/CLI/SDK で確認が確実。 |
🧪 検証事項チェックリスト
| 項目 | 済 |
|---|---|
| ドキュメントに必要なメタデータが付与されているか | ☐ |
| ベクターストア(OpenSearch/Kendra)でフィールドが認識されているか | ☐ |
| 検索 API に filter を入れて結果がフィルタされるか | ☐ |
| JSON フォーマットの整合性 | ☐ |
| S3 → ベクターストア同期後、filter 適用できるか | ☐ |