

# Amazon Nova のマルチモーダルサポート
<a name="modalities"></a>

**注記**  
このドキュメントは Amazon Nova バージョン 1 を対象としています。Amazon Nova 2 マルチモーダルドキュメントについては、「[マルチモーダル理解](https://docs.aws.amazon.com/nova/latest/nova2-userguide/using-multimodal-models.html)」を参照してください。

Amazon Nova 理解モデルはマルチモーダル理解モデルです。つまり、画像、動画、ドキュメントなどのマルチモーダル入力をサポートし、提供されたコンテンツに基づいて質問を推測して回答します。Amazon Nova モデルは、画像、ドキュメント、動画を理解して分析できる新しいビジョン機能が搭載されているため、マルチモーダル理解のユースケースを実現します。

次のセクションでは、Amazon Nova で画像、ドキュメント、動画を操作するためのガイドラインの概要を説明します。これには、採用された前処理戦略、コード例、および考慮すべき関連する制限が含まれます。

**Topics**
+ [モダリティでサポートされているコンテンツタイプ](#modalities-content)
+ [画像理解](modalities-image.md)
+ [動画理解](modalities-video.md)
+ [ドキュメント理解](modalities-document.md)
+ [エラー処理](text-error-handing.md)

## モダリティでサポートされているコンテンツタイプ
<a name="modalities-content"></a>

次の情報では、メディアファイルでサポートされているファイル形式と、受け入れられる入力方法について詳しく説明します。


| メディアファイルタイプ | サポートされるファイル形式 | **入力方法** | 解析戦略 | 
| --- |--- |--- |--- |
| Image | PNG、JPG、JPEG、GIF、WebP | Base64 Amazon S3 URI | 画像ビジョン理解 | 
| テキストドキュメント *(Converse API のみ)* | CSV、XLS、XLSX、HTML、TXT、MD、DOC | バイト Amazon S3 URI | ドキュメントからのテキスト理解のみ。 | 
| メディアドキュメント *(Converse API のみ)* | PDF、DOCX | バイト Amazon S3 URI | インターリーブされた画像理解を含むテキスト | 
| 動画 | MP4、MOV、MKV、WebM、FLV、MPEG、MPG、WMV、3GP | Base64 Amazon S3 URI | 動画ビジョン理解 | 

**注記**  
コンピュータから最大 5 個のファイル、または Amazon S3 から最大 1000 個のファイルを含めることができます。Amazon S3 からアップロードする場合、各ファイルは 1 GB 以下にする必要があります。アップロードされたファイルの合計サイズは、コンピュータからアップロードする場合は 25 MB、Amazon S3 からアップロードする場合は 2 GB を超えることはできません。

全体のペイロード制限は 25 MB であるため、必ず base64 のオーバーヘッドを考慮してください。作業中は、ライブラリとフレームワークがメモリを占有することや、渡されたメディアコンテンツがすぐに増えてしまう可能性があることに注意してください。動画を使用する場合、`s3Location` を指定すると、多くのストレージの問題が軽減されます。

**注記**  
大きな動画やドキュメントは、入力方法に関係なく処理に時間がかかります。Amazon Bedrock からのレスポンス待機中に boto3 SDK がタイムアウトする場合は、適切な [read\$1timeout](https://botocore.amazonaws.com/v1/documentation/api/latest/reference/config.html) 値が設定され、boto3 がバージョン 1.38 以降にアップグレードされていることを確認してください。

# 画像理解
<a name="modalities-image"></a>

**注記**  
このドキュメントは Amazon Nova バージョン 1 を対象としています。Amazon Nova 2 画像理解ガイドについては、「[画像理解](https://docs.aws.amazon.com/nova/latest/nova2-userguide/using-multimodal-models.html#image-understanding)」を参照してください。

Amazon Nova モデルでは、複数の画像をペイロードに含めることができ、合計ペイロードサイズが 25 MB を超えないように制限されます。ただし、イメージを理解するためのイメージを含む Amazon S3 URI を指定できます。このアプローチにより、25 MB のペイロード制限に制約されることなく、より大きなイメージやより多くのイメージにモデルを活用できます。Amazon Nova モデルは、指定された指示に基づいて渡された画像を分析して質問に回答、画像の分類、画像の要約ができます。

## 画像サイズ情報
<a name="modalities-image-resolution"></a>

最良の結果を提供するため、Amazon Nova は入力画像のアスペクト比および元の解像度に応じて、入力画像を自動的にスケールアップまたはスケールダウンします。画像ごとに、Amazon Nova はまず 1:1、1:2、1:3、1:4、1:5、1:6、1:7、1:8、1:9、2:3、2:4 およびそれぞれの転置から最も近いアスペクト比を識別します。その後、最も近いアスペクト比を維持しながら、画像の 1 つの辺が少なくとも 896 ピクセルを超えるか、元の画像の短い辺の長さを超えるように画像が再スケーリングされます。最大解像度は 8,000 x 8,000 ピクセルです

## 境界ボックスの検出
<a name="modalities-image-bounding"></a>

Amazon Nova Lite および Amazon Nova Pro モデルは、画像内の境界ボックスを正確に検出するようにトレーニングされています。この機能は、目的が特定の対象オブジェクトの座標を取得することである場合は有益です。Amazon Nova モデルの境界ボックス検出機能により、画像グラウンディングタスクに適した候補になり、スクリーンショットの理解を強化できます。Amazon Nova モデルは境界ボックスを [0, 1000] のスケールで出力し、これらの座標を取得した後に、処理後のステップとして画像ディメンションに基づいてサイズ変更できます。

## 画像からトークンへの変換
<a name="modalities-image-tokens"></a>

前述のように、アスペクト比を維持しながら、画像のサイズは変更されて情報抽出を最大化します。次の内容には、サンプル画像のディメンションおよびおおよそのトークン計算の例を一部示しています。


| image\$1resolution (HxW または WxH) | 900 x 450 | 900 x 900 | 1400 x 900 | 1.8K x 900 | 1.3K x 1.3K | 
| --- |--- |--- |--- |--- |--- |
| 推定トークン数 | 〜 800 | 〜 1300 | 〜 1800 | 〜 2400 | 〜 2600 | 

例えば、サイズが 800 x 400 の画像の例を挙げて、この画像のトークン数を計算します。ディメンションに基づき、1:2 のアスペクト比を維持するには、最も近い解像度は 900 x 450 です。したがって、この画像のおおよそのトークン数は約 800 トークンです。

# 画像理解の制限
<a name="modalities-image-limitations"></a>

Amazon Nova の次の制限事項について説明します。
+ **多言語画像理解:** モデルは多言語画像および動画フレームに対する理解が限られており、同様のタスクで苦戦したりハルシネーションしたりする可能性があります。
+ **人物識別**: Amazon Nova モデルでは、画像、ドキュメント、動画に含まれる個人を識別または名前を付ける機能がサポートされていません。モデルはそのようなタスクの実行を拒否します。
+ **空間推論**: Amazon Nova モデルには、空間推論機能が限られています。正確な位置特定やレイアウト分析を必要とするタスクに手こずる可能性があります。
+ **画像/動画内の小さなテキスト**: 画像または動画のテキストが小さすぎる場合、必要なコンテキストを維持しながら関連するセクションにトリミングして、画像内のテキストの相対サイズを増やすことを検討してください。
+ **カウント**: Amazon Nova モデルは、画像内のオブジェクトの概算数を提示できますが、特に多数の小さなオブジェクトを扱う場合、常に正確とは限りません。
+ **不適切なコンテンツ**: Amazon Nova モデルは、適正利用規約に違反する不適切または露骨な画像を処理しません。
+ **ヘルスケア用途**: これらのアーティファクトは機密性が高いため、Amazon Nova モデルはヘルスケアの画像や動画の一般的な分析を行うことができますが、複雑な診断スキャンを解釈することはお勧めしません。Amazon Nova のレスポンスは、専門家による医療アドバイスに代わるものとして扱ってはなりません。

# 画像理解の例
<a name="modalities-image-examples"></a>

次の例では、[InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) を使用して画像プロンプトを Amazon Nova に送信する方法が示されています。

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
import base64
import boto3
import json
# Create a Bedrock Runtime client in the AWS Region of your choice.
client = boto3.client(
    "bedrock-runtime",
    region_name="us-east-1",
)

MODEL_ID = "us.amazon.nova-lite-v1:0"
# Open the image you'd like to use and encode it as a Base64 string.
with open("media/sunset.png", "rb") as image_file:
    binary_data = image_file.read()
    base_64_encoded_data = base64.b64encode(binary_data)
    base64_string = base_64_encoded_data.decode("utf-8")
# Define your system prompt(s).
system_list = [    {
        "text": "You are an expert artist. When the user provides you with an image, provide 3 potential art titles"
    }
]
# Define a "user" message including both the image and a text prompt.
message_list = [
    {
        "role": "user",
        "content": [
            {
                "image": {
                    "format": "png",
                    "source": {
                        "bytes": image // Binary array (Converse API) or Base64-encoded string (Invoke API)
                    },
                }
            },
            {
                "text": "Provide art titles for this image."
            }
        ],
    }
]
# Configure the inference parameters.
inf_params = {"maxTokens": 300, "topP": 0.1, "topK": 20, "temperature": 0.3}

native_request = {
    "schemaVersion": "messages-v1",
    "messages": message_list,
    "system": system_list,
    "inferenceConfig": inf_params,
}
# Invoke the model and extract the response body.
response = client.invoke_model(modelId=MODEL_ID, body=json.dumps(native_request))
model_response = json.loads(response["body"].read())
# Pretty print the response JSON.
print("[Full Response]")
print(json.dumps(model_response, indent=2))
# Print the text content for easy readability.
content_text = model_response["output"]["message"]["content"][0]["text"]
print("\n[Response Content Text]")
print(content_text)
```

全体のペイロードが 25 MB を超える大きな画像ファイルまたは複数の画像ファイルを指定する場合は、Amazon S3 を使用できます。次の例は、Amazon S3 を使用して Amazon Nova に画像をアップロードする方法を示しています。

```
import boto3
import json
import base64
# Create a Bedrock Runtime client
client = boto3.client("bedrock-runtime", 
                      region_name="us-east-1", 
                     )
PRO_MODEL_ID = "us.amazon.nova-pro-v1:0"
LITE_MODEL_ID = "us.amazon.nova-lite-v1:0"
MICRO_MODEL_ID = "us.amazon.nova-micro-v1:0"
PREMIER_MODEL_ID = "us.amazon.nova-premier-v1:0"
messages = [
    {
        "role": "user",
        "content": [
            {
                "image": {
                    "format": "png",
                    "source": {
                        "s3Location": {
                            #Replace the s3 bucket URI 
                            "uri": "s3://demo-bucket/cat.png"
                            "bucketOwner" : "123456789012"
                        }
                    },
                }
            },
            {"text": "Describe the following image"},
        ],
    }
]
inf_params = {"maxTokens": 300, "topP": 0.1, "temperature": 0.3}
model_response = client.converse(
    modelId=LITE_MODEL_ID, messages=messages, inferenceConfig=inf_params
)
print("\n[Full Response]")
print(json.dumps(model_response, indent=2))
print("\n[Response Content Text]")
print(model_response["output"]["message"]["content"][0]["text"])
```

# 動画理解
<a name="modalities-video"></a>

**注記**  
このドキュメントは Amazon Nova バージョン 1 を対象としています。Amazon Nova 2 動画理解ガイドについては、「[動画の理解](https://docs.aws.amazon.com/nova/latest/nova2-userguide/using-multimodal-models.html#video-understanding)」を参照してください。

Amazon Nova モデルでは、ペイロードに 1 つの動画を含めることができます。base64 形式または Amazon S3 URI を介して提供できます。base64 方法を使用する際、全体的なペイロードサイズは 25 MB 以内である必要があります。ただし、動画理解には Amazon S3 URI を指定できます。ペイロード全体のサイズ制限に制約されることなく、この手法は長い動画 (最大 1 GB のサイズ) にモデルを活用できるようにします。Amazon Nova モデルは、提供された指示に基づいて渡された動画を分析して質問の回答、動画の分類、動画内の情報の要約ができます。


| メディアファイルタイプ | サポートされるファイル形式 | **入力方法** | 
| --- |--- |--- |
| 動画 | MP4、MOV、MKV、WebM、FLV、MPEG、MPG、WMV、3GP | Base64 *25 MB 未満のペイロードサイズに推奨* | 
|  |  | Amazon S3 URI *最大 2 GB の 25 MB を超えるペイロードに推奨 個々のファイルは 1 GB 以下である必要があります。* | 

動画が base-64 (サイズ制約に適合する限り) として渡されるか、Amazon S3 ロケーションを介して渡されるかを問わず、動画入力トークン数に違いはありません。

3GP ファイル形式の場合、API リクエストで渡される「format」フィールドは「three\$1gp」の形式である必要があることに注意してください。

Amazon S3 を使用する際、「コンテンツタイプ」メタデータが動画の正しい MIME タイプに設定されていることを確認してください。

## 動画サイズの情報
<a name="modalities-video-size"></a>

Amazon Nova の動画理解機能は、マルチアスペクト比をサポートしています。すべての動画は、モデルにフィードする前にゆがみ (入力に基づいて上下方向) がある **672 x 672 平方**のディメンションにサイズ調整されます。モデルは、動画の長さに基づいて動的サンプリング戦略を使用します。Amazon Nova Lite と Amazon Nova Pro の場合、再生時間が 16 分以下の動画には、1 秒あたり 1 フレーム (FPS) のサンプリングレートが適用されます。ただし、長さが 16 分を超える動画の場合、サンプリングされたフレームを一貫して 960 フレームに維持するためにサンプリングレートが低下し、それに応じてフレームサンプリングレートが異なります。この手法は、長い動画コンテンツと比較して短い動画において、より正確なシーンレベルの動画理解を実現するために開発されています。動画の長さは、低モーションの場合は 1 時間未満、高モーションの場合は 16 分未満にすることをお勧めします。Amazon Nova Premier では、1 FPS サンプリングレートが最大 3,200 フレームまで適用されます。

動画の 4K バージョンおよびフル HD バージョンを分析する際に違いはありません。同様に、サンプリングレートは最大 1 FPS であるため、60 FPS 動画も 30 FPS 動画も結果に違いはありません。動画サイズに 1 GB の制限があるため、必要以上の解像度および FPS を使用することは有益ではなく、そのサイズ制限に収まる動画の長さに制限されます。1 GB を超える動画は、事前処理することをお勧めします。

# 動画理解の制限事項
<a name="modalities-video-limitations"></a>

Amazon Nova の次の制限事項について説明します。
+ **多言語画像理解:** モデルは多言語画像および動画フレームに対する理解が限られており、同様のタスクで苦戦したりハルシネーションしたりする可能性があります。
+ **人物識別**: Amazon Nova モデルでは、画像、ドキュメント、動画に含まれる個人を識別または名前を付ける機能がサポートされていません。モデルはそのようなタスクの実行を拒否します。
+ **空間推論**: Amazon Nova モデルには、空間推論機能が限られています。正確な位置特定やレイアウト分析を必要とするタスクに手こずる可能性があります。
+ **画像/動画内の小さなテキスト**: 画像または動画のテキストが小さすぎる場合、必要なコンテキストを維持しながら関連するセクションにトリミングして、画像内のテキストの相対サイズを増やすことを検討してください。
+ **カウント**: Amazon Nova モデルは、画像内のオブジェクトの概算数を提示できますが、特に多数の小さなオブジェクトを扱う場合、常に正確とは限りません。
+ **不適切なコンテンツ**: Amazon Nova モデルは、適正利用規約に違反する不適切または露骨な画像を処理しません。
+ **ヘルスケア用途**: これらのアーティファクトは機密性が高いため、Amazon Nova モデルはヘルスケアの画像や動画の一般的な分析を行うことができますが、複雑な診断スキャンを解釈することはお勧めしません。Amazon Nova のレスポンスは、専門家による医療アドバイスに代わるものとして扱ってはなりません。

## 動画トークン
<a name="modalities-video-tokens"></a>

動画の長さは生成されるトークン数に影響する主な要因です。おおよそのコストを計算するには、動画トークンの概算数に、使用されている特定モデルのトークンあたりの価格を掛けてください。

次の表は、Amazon Nova Pro、Lite、Micro の動画の長さあたりのフレームサンプリングとトークン使用率の概算を示します。


| video\$1duration | 10 秒 | 30 秒 | 16 分 | 20 分 | 30 分 | 45 分 | 1 時間 | 1.5 時間 | 
| --- |--- |--- |--- |--- |--- |--- |--- |--- |
| frames\$1to\$1sample | 10 | 30 | 960 | 960 | 960 | 960 | 960 | 960 | 
| sample\$1rate\$1fps | 1 | 1 | 1 | 0.755 | 0.5 | 0.35556 | 0.14 | 0.096 | 
| 推定トークン数 | 2,880 | 8,640 | 276,480 | 276,480 | 276,480 | 276,480 | 276,480 | 276,480 | 

次の表は、Amazon Nova Premier の動画の長さあたりのフレームサンプリングとトークン使用率の概算を示します。


| video\$1duration | 10 秒 | 30 秒 | 16 分 | 20 分 | 30 分 | 45 分 | 1 時間 | 1.5 時間 | 
| --- |--- |--- |--- |--- |--- |--- |--- |--- |
| frames\$1to\$1sample | 10 | 30 | 960 | 1200 | 1800 | 2700 |  |  | 
| sample\$1rate\$1fps | 1 | 1 | 1 | 1 | 1 | 1 |  |  | 
| 推定トークン数 | 2,880 | 8,640 | 276,480 | 345,600 | 518,400 | 777,600 |  |  | 

次の表は、Amazon Nova Lite 1.5 の動画の長さあたりのフレームサンプリングとトークン使用率の概算を示します。


| video\$1duration | 10 秒 | 30 秒 | 16 分 | 20 分 | 30 分 | 45 分 | 1 時間 | 1.5 時間 | 
| --- |--- |--- |--- |--- |--- |--- |--- |--- |
| frames\$1to\$1sample | 10 | 30 | 960 | 1200 | 1800 | 2700 |  |  | 
| sample\$1rate\$1fps | 1 | 1 | 1 | 1 | 1 | 1 |  |  | 
| 推定トークン数 | 2,880 | 8,640 | 276,480 | 345,600 | 518,400 | 777,600 |  |  | 

# 動画理解の制限事項
<a name="prompting-vision-limitations"></a>

以下は、モデルの精度とパフォーマンスが保証されない主なモデル制限です。
+ **リクエストごとに 1 つの動画:** 現在、モデルはリクエストごとに 1 つの動画のみをサポートしています。一部のフレームワークとライブラリは、メモリを使用して以前のインタラクションを追跡します。前のコンテキストで追加された動画がある可能性があります。
+ **オーディオはサポートされない:** モデルは現在、動画内のビジュアル情報のみに基づいて動画コンテンツを処理および理解するようにトレーニングされています。動画に含まれる音声成分を分析したり理解したりする機能はありません。
+ **一時的な因果関係:** モデルでは、動画の進行全体におけるイベントの因果関係についての理解が限られています。時点的な質問にはうまく答えますが、一連の出来事の理解に依存する回答に対してはあまり適していません。
+ **多言語イメージの理解:** モデルでは、多言語のイメージや動画フレームの理解に限界があります。そのようなタスクでは手こずったり、ハルシネーションしたりする可能性があります。
+ **人物識別**: Amazon Nova モデルは、イメージ、ドキュメント、または動画内の個人を識別または名前を付ける機能はサポートされていません。モデルはそのようなタスクの実行を拒否します。
+ **空間推論**: Amazon Nova モデルには、空間推論機能が限られています。正確な位置特定やレイアウト分析を必要とするタスクに手こずる可能性があります。
+ **イメージまたは動画内の小さなテキスト**: イメージまたは動画内のテキストが小さすぎる場合は、必要なコンテンツを維持しながら、関連するセクションにトリミングして、イメージ内のテキストの相対サイズを増やすことを検討してください。
+ **カウント**: Amazon Nova モデルは、イメージ内のオブジェクトの概数を提供できますが、特に多数の小さなオブジェクトを扱う場合、必ずしも正確であるとは限りません。
+ **不適切なコンテンツ**: Amazon Nova モデルは、適正利用規約に違反する不適切または露骨なイメージを処理しません。
+ **ヘルスケア用途**: これらのアーティファクトは機密性が高いため、Amazon Nova モデルはヘルスケアの画像や動画の一般的な分析を行うことができますが、複雑な診断スキャンを解釈することはお勧めしません。Amazon Nova のレスポンスは、専門家による医療アドバイスに代わるものとして扱ってはなりません。

# 動画理解の例
<a name="modalities-video-examples"></a>

次の例では、[InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) を使用して Amazon Nova モデルに動画プロンプトを送信する方法が示されています。

```
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
import base64
import boto3
import json
# Create a Bedrock Runtime client in the AWS Region of your choice.
client = boto3.client(
    "bedrock-runtime",
    region_name="us-east-1",
)

MODEL_ID = "us.amazon.nova-lite-v1:0"
# Open the image you'd like to use and encode it as a Base64 string.
with open("media/cooking-quesadilla.mp4", "rb") as video_file:
    binary_data = video_file.read()
    base_64_encoded_data = base64.b64encode(binary_data)
    base64_string = base_64_encoded_data.decode("utf-8")
# Define your system prompt(s).
system_list= [
    {
        "text": "You are an expert media analyst. When the user provides you with a video, provide 3 potential video titles"
    }
]
# Define a "user" message including both the image and a text prompt.
message_list = [
    {
        "role": "user",
        "content": [
            {
                "video": {
                    "format": "mp4",
                    "source": {
                        "bytes": video // Binary array (Converse API) or Base64-encoded string (Invoke API)
                    },
                }
            },
            {
                "text": "Provide video titles for this clip."
            },
        ],
    }
]
# Configure the inference parameters.
inf_params = {"maxTokens": 300, "topP": 0.1, "topK": 20, "temperature": 0.3}

native_request = {
    "schemaVersion": "messages-v1",
    "messages": message_list,
    "system": system_list,
    "inferenceConfig": inf_params,
}
# Invoke the model and extract the response body.
response = client.invoke_model(modelId=MODEL_ID, body=json.dumps(native_request))
model_response = json.loads(response["body"].read())
# Pretty print the response JSON.
print("[Full Response]")
print(json.dumps(model_response, indent=2))
# Print the text content for easy readability.
content_text = model_response["output"]["message"]["content"][0]["text"]
print("\n[Response Content Text]")
print(content_text)
```

次の例では、Amazon S3 の場所を使用して [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) で Amazon Nova に動画を送信する方法が示されています。

```
import base64
import boto3
import json
# Create a Bedrock Runtime client in the AWS Region of your choice.
client = boto3.client(
    "bedrock-runtime",
    region_name="us-east-1",
)

MODEL_ID = "us.amazon.nova-lite-v1:0"
# Define your system prompt(s).
system_list = [
    {
        "text": "You are an expert media analyst. When the user provides you with a video, provide 3 potential video titles"
    }
]
# Define a "user" message including both the image and a text prompt.
message_list = [
    {
        "role": "user",
        "content": [
            {
                "video": {
                    "format": "mp4",
                    "source": {
                        "s3Location": {
                            "uri": "s3://my_bucket/my_video.mp4", 
                            "bucketOwner": "111122223333"
                        }
                    }
                }
            },
            {
                "text": "Provide video titles for this clip."
            }
        ]
    }
]
# Configure the inference parameters.
inf_params = {"maxTokens": 300, "topP": 0.1, "topK": 20, "temperature": 0.3}

native_request = {
    "schemaVersion": "messages-v1",
    "messages": message_list,
    "system": system_list,
    "inferenceConfig": inf_params,
}
# Invoke the model and extract the response body.
response = client.invoke_model(modelId=MODEL_ID, body=json.dumps(native_request))
model_response = json.loads(response["body"].read())
# Pretty print the response JSON.
print("[Full Response]")
print(json.dumps(model_response, indent=2))
# Print the text content for easy readability.
content_text = model_response["output"]["message"]["content"][0]["text"]
print("\n[Response Content Text]")
print(content_text)
```

# ドキュメント理解
<a name="modalities-document"></a>

**注記**  
このドキュメントは Amazon Nova バージョン 1 を対象としています。Amazon Nova 2 ドキュメント理解ガイドについては、「[ドキュメントの理解](https://docs.aws.amazon.com/nova/latest/nova2-userguide/using-multimodal-models.html#document-understanding)」を参照してください。

Amazon Nova のドキュメント理解機能を使用すると、プロンプトにドキュメント全体 (PDF、Word ファイル、スプレッドシートなど) を含め、そのコンテンツに関する質問やリクエストを行うことができます。Nova のマルチモーダル理解モデル (Lite、Pro、Premier) は、これらのドキュメント内のテキスト要素とビジュアル要素 (グラフやテーブルなど) の両方を解釈できます。これにより、質問応答、要約、長いレポートやスキャンされたドキュメントの分析などのユースケースに対応できるようになります。主な機能には、長いドキュメント用の非常に大きなコンテキストウィンドウ (1～200 万トークン) や、1 つのクエリで複数のドキュメントを処理する機能などがあります。

Amazon Nova は、次の 2 種類のドキュメント入力を区別します。
+ **テキストベースのドキュメントタイプ** (TXT、CSV、Markdown、HTML、DOC など): これらは主にテキストコンテンツに対して処理されます。Nova は、これらのドキュメントのテキストからの情報の理解と抽出に焦点を当てます。
+ **メディアベースのドキュメントタイプ** (PDF、DOCX など): これらのファイルには、複雑なレイアウト、画像、グラフ、または埋め込みグラフィックが含まれている場合があります。メディアベースのドキュメントの場合、Nova はビジュアル要素とテキスト要素の両方を処理します。Nova は、ビジョンベースの理解を使用して、グラフ、テーブル、図、スクリーンショットなどのビジュアルコンテンツをドキュメントのテキストとともに解釈します。

  JPEG2000 および JBIG2 は、Amazon Nova の PDF ファイルではサポートされていません。

サポートされているファイル形式には、プレーンテキストファイルと構造化テキストファイル (CSV、TXT)、スプレッドシート (XLS/XLSX)、HTML/Markdown、Word ドキュメント (DOC/DOCX)、PDF ファイルなどの一般的なドキュメントタイプがあります。ドキュメント内の画像については、標準画像形式 (PNG、JPG、GIF、WebP) は処理されますが、特定の画像エンコーディング (CYMK、SVG) を含む PDF はサポートされていません。


**ドキュメントサイズの制限と使用ガイドライン**  

| 制約 | 制限 | 
| --- | --- | 
|  ドキュメントの最大数  |  リクエストごとに最大 5 つのドキュメント (直接アップロードと Amazon S3 の両方に適用)  | 
|  テキストベースのドキュメントサイズ  |  各テキストドキュメント (.txt、.csv、.md、.html、.doc など) は 4.5 MB 以下である必要があります  | 
|  メディアベースのドキュメントサイズ  |  .pdf ファイルと .docx ファイルの場合、個別のファイルサイズ制限はありませんが、以下が適用されます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/nova/latest/userguide/modalities-document.html)  | 
|  サポートされていない PDF コンテンツ  |  CMYK カラープロファイルまたは SVG 画像を含む PDF はサポートされていません  | 

# API による Nova のドキュメント理解の使用
<a name="modalities-document-examples"></a>

ドキュメント QA (質問応答) または分析に Amazon Nova を使用する方法を説明するために、Python の簡略化された例を次に示します。AWS Bedrock API (Boto3 SDK 経由) を使用して、モデルが回答する質問とともに PDF ドキュメントを送信します。

```
            
import base64
import base64
import json
import boto3

# Initialize Bedrock runtime client (adjust region as needed)
client = boto3.client("bedrock-runtime", region_name="us-east-1")

MODEL_ID = "us.amazon.nova-lite-v1:5"  # using Nova Lite model in this example

# Read the document file (PDF) in binary mode
with open("my_document.pdf", "rb") as file:
    doc_bytes = file.read()

# Construct the conversation messages with document + question
messages = [
    {
        "role": "user",
        "content": [
            {
                "document": {
                    "format": "pdf",
                    "name": "Document1",  # neutral name for the document
                    "source": {
                        "bytes": doc_bytes  # embedding the PDF content directly
                    }
                }
            },
            {
                "text": "Here is a question about the document: ... (your question) ... ?"
            }
        ]
    }
]

# Set inference parameters (optional)
inf_params = {"maxTokens": 4000, "topP": 0.1, "temperature": 0.3}

# Invoke the model
response = client.converse(modelId=MODEL_ID, messages=messages, inferenceConfig=inf_params)

# Extract and print the answer
answer_text = response["output"]["message"]["content"][0]["text"]
print(answer_text)
```

入力ファイルが大きい場合 (25 MB の直接アップロード制限を超えている場合）、または多数のファイルがある場合は、Amazon S3 に保存して参照できます。これにより、リクエストに生のバイトが送信されなくなります。S3 を使用する場合は、Bedrock サービスにバケット/オブジェクトへのアクセス許可があることを確認します。たとえば、S3 で PDF を参照する場合、ドキュメントソースは「bytes」の代わりに「s3Location」を使用します。

```
messages = [
    {
        "role": "user",
        "content": [
            {
                "document": {
                    "format": "pdf",
                    "name": "Report2023",
                    "source": {
                        "s3Location": {
                            "uri": "s3://your-bucket/path/to/document1.pdf",
                            "bucketOwner": "123456789012"
                        }
                    }
                }
            },
            {
                "text": "Summarize the key findings from the Q3 2023 report."
            }
        ]
    }
]
```

**注記**  
ドキュメント名には、英数字、ハイフン、括弧、角括弧のみを使用できます。  
モデルが誤って指示として解釈する可能性があるため、`name` フィールドはプロンプトインジェクションに対して脆弱です。したがって、中立的な名前を指定することが推奨されます。

# エラー処理
<a name="text-error-handing"></a>

エラーがクライアントに伝達される方法は、発生するエラーの種類によって異なります。このセクションでは、Amazon Nova モデルに固有のエラー条件のみに焦点を当てます。アプリケーションコードで処理するエラーの 3 つの主なタイプは、**入力検証**エラー、**責任ある AI (RAI) 入力偏向**エラー、**RAI 出力偏向**エラーです。

**入力検証:** 入力パラメータにサポートされていない値を使用すると、入力検証エラーが発生します。例えば、温度の範囲外の値または入力 `image` の正しくない形式などです。すべての入力検証エラーは、問題の原因を説明するメッセージ文字列を含む **ValidationException** として表されます。

**RAI 入力偏向**エラーは、入力テキスト値または画像が AWS の責任ある AI ポリシーに違反していると判断された場合に発生します。これらのエラーは、次のいずれかのメッセージとともに **ValidationException** として表されます。
+ **入力テキスト**検証メッセージ: 「このリクエストはコンテンツフィルターによってブロックされました。テキストプロンプトを調整して、新しいリクエストを送信してください」
+ **入力画像**検証メッセージ: 「このリクエストはコンテンツフィルターによってブロックされました。入力画像を調整して新しいリクエストを送信してください」
+ **入力動画**検証メッセージ: 「このリクエストはコンテンツフィルターによってブロックされました。新しいリクエストを送信するには、入力動画を調整してください」

RAI 出力の偏向エラーは、出力内容が生成されても、AWS の責任ある AI ポリシーに準拠しないと判断された場合に発生します。この場合、例外は使用されません。代わりに、正常なレスポンスが返され、ストラクチャには次のいずれかの値を含む文字列である `error` フィールドが含まれます。
+ **出力テキスト**検証メッセージ:「生成されたテキストはコンテンツフィルターによってブロックされました」