はじめに
Amazon Bedrock の Knowledge Bases(以下、Bedrock KB)は、検索精度を向上させるためにメタデータ(Metadata)を活用できます。しかし、公式ドキュメントには明記されていない 制約や注意点 があり、試してみると予想外のエラーに遭遇することがあります。
本記事では、実際に検証した Bedrock KB のメタデータ関連の制約や、検索時にメタデータを適切に活用する方法について解説します。
1. メタデータの定義と制約
Bedrock KB では、ソースデータと同じ名前の .metadata.json
を作成し、メタデータを追加できます。例えば、公式ブログ記事では以下のように記述されています。
各ゲームのメタデータには、
.metadata.json
というサフィックス (例:s3://$bucket_name/video_game/$game_id.csv.metadata.json
) が付き、以下のスキーマを持っています。{ "metadataAttributes": { "id": number, "genres": string, "year": number, "publisher": string, "score": number } }
しかし、実際に試すと id
は使用できない ことが判明しました。
許可されていないメタデータキー
id
を含む .metadata.json
をアップロードすると、次のエラーが発生します。
Encountered error: Ignored x files due to invalid metadata attribute key. Check that the attribute keys does not contains any unavailable key name. Then retry your request.
このように、公式記事のサンプルとは異なり、id
というキーを使用するとエラーになります。代わりに、documentID
などのフィールド名を活用する必要があります。
メタデータのサイズ制限とデータ型
公式ドキュメントでは明確に記載されていませんが、実際の動作検証や Repost AWS での調査により、次のような制約がある可能性があります。
- メタデータ JSON のサイズは 10KB 未満にする必要がある
-
許可されるデータ型は以下の 4 種類のみ
-
boolean
(真偽値) -
string
(文字列) -
double
(浮動小数点数) -
integer
(整数) -
null
値は許可されない
-
2. メタデータを検索時に活用するには?
デフォルトではメタデータは検索に影響しない
Bedrock KB にメタデータを追加しても、デフォルトではメタデータを考慮せずに検索が行われる ため、意図した結果を取得できないことがあります。
例えば、以下のように subCategory = "機能について" というメタデータを付与していても、検索時にこの条件を適用しなければ結果には反映されません。
{
"metadataAttributes": {
"subCategory": "機能について"
}
}
実際に、subCategory = "機能について"
で検索した際に取得されたチャンクは その他のお知らせ
に関連するものであり、意図した 機能について
のデータではありませんでした。これは、検索時にメタデータが自動的に考慮されないことを示しています。
そのため、検索時にメタデータを活用するためには、明示的にフィルタを設定する必要があります。
メタデータを検索に適用する方法
AWS SDK を使用する場合
import boto3
bedrock = boto3.client("bedrock")
response = bedrock.retrieve_and_generate(
knowledgeBaseId="your-knowledge-base-id",
retrievalConfiguration={
"retrievalFilter": {
"subCategory": "機能について"
}
},
query="ECの秘密を教えて"
)
print(response)
このように retrievalFilter
に subCategory
を指定 することで、指定したメタデータを持つコンテンツのみを検索対象にできます。
まとめ
Amazon Bedrock Knowledge Bases のメタデータには 公式に明記されていない制約が存在 するため、適切に活用するには注意が必要です。
-
metadataAttributes
の中でid
は許可されていない - メタデータ JSON のサイズは 10KB 未満にする必要がある
boolean
、string
、double
、integer
のみが許可されるデータ型- デフォルトではメタデータフィルタリングは適用されない
- 検索フィルタを設定しない場合、条件を原文に含めるのが有効
- 検索時に
retrievalFilter
を設定することでメタデータを活用可能
Bedrock KB を活用する際は、これらのポイントを意識して設定を行いましょう!