[アップデート] Amazon Bedrock Knowledge bases で Amazon Bedrock Data Automation が使えるようになりました(プレビュー) #AWSreInvent
こんにちは!AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。
Amazon Bedrock Knowledge bases で Amazon Bedrock Data Automation が使えるようになりました!
アップデート紹介
今までも Amazon Bedrock Knowledge bases では「高度な解析オプション
」として、PDF、画像に記載された表テーブルやグラフなどを基礎モデルで認識し、テキストに変換するオプションがありました。
高度な解析オプションは基礎モデルにデフォルトで次のプロンプトを与え、必要に応じてプロンプトをカスタマイズする必要がありました。
Transcribe the text content from an image page and output in Markdown syntax (not code blocks). Follow these steps:
1. Examine the provided page carefully.
2. Identify all elements present in the page, including headers, body text, footnotes, tables, visualizations, captions, and page numbers, etc.
3. Use markdown syntax to format your output:
- Headings: # for main, ## for sections, ### for subsections, etc.
- Lists: * or - for bulleted, 1. 2. 3. for numbered
- Do not repeat yourself
4. If the element is a visualization
- Provide a detailed description in natural language
- Do not transcribe text in the visualization after providing the description
5. If the element is a table
- Create a markdown table, ensuring every row has the same number of columns
- Maintain cell alignment as closely as possible
- Do not split a table into multiple tables
- If a merged cell spans multiple rows or columns, place the text in the top-left cell and output ' ' for other
- Use | for column separators, |-|-| for header row separators
- If a cell has multiple items, list them in separate rows
- If the table contains sub-headers, separate the sub-headers from the headers in another row
6. If the element is a paragraph
- Transcribe each text element precisely as it appears
7. If the element is a header, footer, footnote, page number
- Transcribe each text element precisely as it appears
Output Example:
A bar chart showing annual sales figures, with the y-axis labeled "Sales ($Million)" and the x-axis labeled "Year". The chart has bars for 2018 ($12M), 2019 ($18M), 2020 ($8M), and 2021 ($22M).
Figure 3: This chart shows annual sales in millions. The year 2020 was significantly down due to the COVID-19 pandemic.
# Annual Report
## Financial Highlights
* Revenue: $40M
* Profit: $12M
* EPS: $1.25
| | Year Ended December 31, | |
| | 2021 | 2022 |
|-|-|-|
| Cash provided by (used in): | | |
| Operating activities | $ 46,327 | $ 46,752 |
| Investing activities | (58,154) | (37,601) |
| Financing activities | 6,291 | 9,718 |
Here is the image.
今回のアップデートでは、高度な解析オプション
に加え、Amazon Bedrock Data Automation(プレビュー)を利用した解析オプションが追加されました。
Amazon Bedrock Data Automation を利用することで 高度な解析オプション
で必要だった、プロンプトのカスタマイズがマネージド化されたアップデートになります。
各解析オプションの比較ドキュメントも追加され、次のような表現がされています。
When selecting how to parse your data, consider the following:
- Whether your data is purely textual or if it contains multimodal data, such as images, graphs, and charts, that you want the knowledge base to be able to query.
- Whether you want the option to customize the prompt that is used to instruct the model on how to parse your data.
- The cost of the parser. For more information, see Amazon Bedrock Pricing.
Parsing options for your data source - Amazon Bedrock
高度な解析オプション
、 Amazon Bedrock Data Automation のどちらを選べばいいのかは、まずはプロンプトのカスタマイズ可否と言ってもいいのではないかと思います。
また、ファイルサイズの制限も選定基準になりそうです。
- 高度な解析オプション
- PDF:50MB
- JPEG/PNG:3.75MB
- Amazon Bedrock Data Automation
- PDF:500MB
- JPEG/PNG:5MB
やってみる
それでは Amazon Bedrock Data Automation を利用したマルチモーダル RAG を作ってみようと思います。
ナレッジベース以外の部分は、 Terraform で作ってしまいます。
ナレッジベースの作成
ナレッジベースの作成に移ります。
Parsing strategy に新しく Amazon Bedrock Data Automation as parser - Preview
が追加されていますね。
合わせて、 Multimodal storage destination という設定値が増えていますね。
実はデータソース用の S3 バケットに加えて、Amazon Bedrock Data Automation で処理した成果物を保管する S3 バケットが必要です。
同じ S3 バケットに保管するよう設定した場合、次のようなエラーが発生しデータソースの作成が失敗します。
The multimodal data storage bucket cannot be the same as the data source bucket.
また、Amazon Bedrock Data Automation で処理した成果物を保管する S3 バケットにはナレッジベースが書き込み/読み込みできるよう設定する必要があります。
An error occurred while validating write access to the provided supplemental data storage bucket. Please ensure that the provided role has read and write permissions on the bucket.
Amazon Bedrock Data Automation で理由する InvokeDataAutomationAsync, GetDataAutomationStatus の割り当ても忘れずに行いましょう。
今回は次のような IAM ポリシーをナレッジベースに割り当てました。
{
"Statement": [
{
"Action": ["bedrock:ListFoundationModels", "bedrock:ListCustomModels"],
"Effect": "Allow",
"Resource": "*",
"Sid": "FoundationModelStatementID"
},
{
"Action": ["bedrock:InvokeModel"],
"Effect": "Allow",
"Resource": ["*"],
"Sid": "ModelStatementID"
},
{
"Action": ["s3:GetObject", "s3:ListBucket"],
"Condition": {
"StringEquals": {
"aws:PrincipalAccount": "アカウント"
}
},
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::kb-bda-us-west-2-kb-datasource-アカウントID",
"arn:aws:s3:::kb-bda-us-west-2-kb-datasource-アカウントID/*"
],
"Sid": "S3StatementIDInput"
},
{
"Action": ["s3:*Object", "s3:ListBucket"],
"Condition": {
"StringEquals": {
"aws:PrincipalAccount": "アカウントID"
}
},
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::kb-bda-us-west-2-bda-kb-datasource-アカウントID",
"arn:aws:s3:::kb-bda-us-west-2-bda-kb-datasource-アカウントID/*"
],
"Sid": "S3StatementIDOutput"
},
{
"Action": [
"bedrock:InvokeDataAutomationAsync",
"bedrock:GetDataAutomationStatus"
],
"Effect": "Allow",
"Resource": ["*"],
"Sid": "BDAStatemanet"
},
{
"Action": ["secretsmanager:GetSecretValue"],
"Effect": "Allow",
"Resource": [
"arn:aws:secretsmanager:us-west-2:アカウントID:secret:kb-bda-vctrdb-secret-アカウントID-us-west-2-N0H4eU"
],
"Sid": "SecretsManagerStatementID"
},
{
"Action": ["bedrock:AssociateThirdPartyKnowledgeBase"],
"Condition": {
"StringEquals": {
"bedrock:ThirdPartyKnowledgeBaseCredentialsSecretArn": "arn:aws:secretsmanager:us-west-2:アカウントID:secret:kb-bda-vctrdb-secret-アカウントID-us-west-2-N0H4eU"
}
},
"Effect": "Allow",
"Resource": "*",
"Sid": "AssociateThirdPartyKnowledgeBase"
}
],
"Version": "2012-10-17"
}
Amazon S3 バケットオブジェクトへの読み書きアクセスを付与する - AWS Identity and Access Management
変換処理
同期処理を押してみましょう。
2 分ほど経過し成功しました。
Amazon Bedrock Data Automation の成果物が保管されている S3 バケットを見てみます。オブジェクト数が 19 で PNG フォーマットで保管されています。
やっていることは PDF ファイルの各スライドを PNG に変換しているようでした。
検索
最後に検索をしてみます。
FY2022 の 20 代の人数はおおよそ何名ですか?
正確な答えを出さないものの、ソースチャンクにはなんと画像が使われています。
また、x-amz-bedrock-kb-description
, x-amz-bedrock-kb-byte-content-source
キーが追加され、引用元とチャンクで利用しているデータの情報を保持していることがわかります。
ちなみにですが高度な解析オプションは次のようなソースチャンクから解答を生成していました。
Amazon Bedrock Knowledge bases の高度な解析オプションを試してみる | DevelopersIOから引用
まとめ
以上、「Amazon Bedrock Knowledge bases で Amazon Bedrock Data Automation が使えるようになりました!」でした。
ソースチャンクを文字ではなく、画像で認識している部分すごいですよね。正直感動しています。
このブログがどなたかの参考になれば幸いです。AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!