[新機能]Amazon Bedrock Knowledge Basesが自動生成クエリフィルターを提供開始しました #AWSreInvent
こんにちは、@TakaakiKakei です。
2024年12月2日~12月6日(米国太平洋標準時)に開催されるAWS re:Invent 2024に関連して、以下のアップデートについてご紹介します。
- Amazon Bedrock Knowledge Basesが自動生成クエリフィルターを提供開始
Amazon Bedrock Knowledge Bases now provides auto-generated query filters for improved retrieval
3行まとめ
- Amazon Bedrock Knowledge Basesが自動生成クエリフィルターを提供開始し、検索精度を向上
- この機能により、複雑なフィルター式を手動で構築せずに検索結果を絞り込むことが可能に
- 東京リージョンを含む複数のリージョンで利用可能
何が嬉しいか
このアップデートにより、Amazon Bedrock Knowledge Basesユーザーの検索体験が大幅に向上します。自動生成クエリフィルターの導入で、複雑なフィルター式の手動作成が不要となり、時間と労力を節約できます。システムがクエリの文脈を自動理解し、適切なフィルターを生成するため、より関連性の高い検索結果を迅速に得られるようになることが期待できます。
以下、調査です。
AWS公式ドキュメント
Implicit metadata filtering が該当すると見受けられます。ユーザーのクエリとメターデータをベースに、Anthropic Claude 3.5 Sonnetで自動検索フィルターを生成するようです。
試してみる
S3にデータソースを配置
検証に利用するKnowledge Basesのデータソースに、適当なファイルを配置します。
s3://xxxxx/data/ダミー有給申請.pdf
s3://xxxxx/data/ダミー経費申請.pdf
メタデータも同時に配置します。各ファイル名に.metadata.json
を付与して、下記のような指定のJSONフォーマットでメタデータを配置します。
s3://xxxxx/data/ダミー有休精算.pdf.metadata.json
{
"metadataAttributes": {
"created_by": "John",
"updated_at": "2023-12-03",
"request_type": "有休申請"
}
}
s3://xxxxx/data/ダミー経費精算.pdf.metadata.json
{
"metadataAttributes": {
"created_by": "Takaaki Kakei",
"updated_at": "2024-12-03",
"request_type": "経費申請"
}
}
Knowledge Basesを準備
検証に利用するKnowledge Basesを準備します。以下の公式ガイドを参考にしてください。
今回は以下のようなKnowledge Basesを作成します。
- S3のデータソースとして
s3://xxxxx/data/
を指定 - 適当に作成した「ダミー有給申請.pdf」と「ダミー経費申請.pdf」と関連のメタデータが読み込まれる想定
IAMロールの更新
Anthropic Claude 3.5 Sonnetで自動検索フィルターを生成するめ、検証に利用するKnowledge BasesのIAMロールの追加が必要です。下図のようにClaude 3.5 SonnetのモデルARN(例:arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-3-5-sonnet-20240620-v1:0
)を追加しておきます。
AWS CLIでのテスト
はじめに、必要に応じてお手元のAWS CLIのバージョンをアップデートしておいてください。
今回はJohnが作成した申請ファイル内容を教えて
というプロンプトで検索を行います。Johnの情報はファイル内には含まれておらず、メタデータにのみ存在します。
The implicitFilterConfiguration is specified in the vectorSearchConfiguration of the Retrieve request body. Include the following fields
AWS CLIで、メタデータの指定なしでRetrive APIを利用する場合は、以下のようなコマンドです。
aws bedrock-agent-runtime retrieve \
--knowledge-base-id '<Knowledge BasesのID>' \
--retrieval-query '{"text": "Johnが作成した申請ファイル内容を教えて"}'
ファイルの内容にはファイル作成者の情報がないため、Takaaki Kakei
が作成したファイルも検索結果に含まれています。想定通りの挙動です。
{
"retrievalResults": [
{
"content": {
"text": ...snip...,
"type": "TEXT"
},
"location": {
"s3Location": {
"uri": "s3://...snip.../data/ダミー有休申請.pdf"
},
"type": "S3"
},
"metadata": {
"x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー有休申請.pdf",
"updated_at": "2023-12-03",
"request_type": "有休申請",
"created_by": "John",
...snip...
},
"score": 0.53992206
},
{
...snip...
"metadata": {
"x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー有休申請.pdf",
"updated_at": "2023-12-03",
"request_type": "有休申請",
"created_by": "John",
...snip...
},
"score": 0.5146175
},
{
...snip...
"metadata": {
"x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー経費精算.pdf",
"updated_at": "2024-12-03",
"request_type": "経費申請",
"created_by": "Takaaki Kakei", # 検索結果に含まれている
...snip...
},
"score": 0.5051521
},
...snip...
"metadata": {
"x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー経費精算.pdf",
"updated_at": "2024-12-03",
"request_type": "経費申請",
"created_by": "Takaaki Kakei", # 検索結果に含まれている
...snip...
},
"score": 0.4847678
},
{
...snip...
"metadata": {
"x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー有休申請.pdf",
"updated_at": "2023-12-03",
"request_type": "有休申請",
"created_by": "John",
...snip...
},
"score": 0.47736603
}
...snip...
自動生成クエリフィルターを利用した場合は、以下のようなコマンドになります。implicitFilterConfiguration
でメターデータのスキーマを指定しています。
aws bedrock-agent-runtime retrieve \
--knowledge-base-id '<Knowledge BasesのID>' \
--retrieval-query '{"text": "Johnが作成した申請ファイル内容を教えて"}' \
--retrieval-configuration '{
"vectorSearchConfiguration": {
"implicitFilterConfiguration": {
"metadataAttributes": [
{
"key": "created_by",
"type": "STRING",
"description": "File creator"
},
{
"key": "updated_at",
"type": "STRING",
"description": "Last updated date"
},
{
"key": "request_type",
"type": "STRING",
"description": "Request type"
}
],
"modelArn": "arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-3-5-sonnet-20240620-v1:0"
}
}
}'
作成者がJohn
に絞り込まれた、検索結果のみ取得することができました。メタデータのスキーマ情報を元に、自動生成クエリフィルターが機能していることがわかりました。
{
"retrievalResults": [
{
"content": {
"text": ...snip...,
"type": "TEXT"
},
"location": {
"s3Location": {
"uri": "s3://...snip.../data/ダミー有休申請.pdf"
},
"type": "S3"
},
"metadata": {
"x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー有休申請.pdf",
"updated_at": "2023-12-03",
"request_type": "有休申請",
"created_by": "John",
...snip...
},
"score": 0.53710216
},
{
...snip...
"metadata": {
"x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー有休申請.pdf",
"updated_at": "2023-12-03",
"request_type": "有休申請",
"created_by": "John",
...snip...
},
"score": 0.51281065
},
{
...snip...
"metadata": {
"x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー有休申請.pdf",
"updated_at": "2023-12-03",
"request_type": "有休申請",
"created_by": "John",
...snip...
},
"score": 0.4802953
},
{
...snip...
"metadata": {
"x-amz-bedrock-kb-source-uri": "s3://...snip.../data/ダミー有休申請.pdf",
"updated_at": "2023-12-03",
"request_type": "有休申請",
"created_by": "John",
...snip...
},
"score": 0.45836914
}
],
...snip...
さいごに
今回のアップデートにより、メタデータを充実させることで、より精度の高い検索結果を得やすくなります。もしも、厳密なフィルター条件を指定したい場合は、手動フィルターも組み合わせて対応しましょう。
それではまた!