Amazon Nova lite で PDFの内容を分析する - Google Colab ガイド

このノートブックでは、Amazon Bedrock の Nova モデルを使用してPDFドキュメントの内容を分析する方法を説明します。Nova は Amazon の新世代基盤モデルで、高度な理解能力と業界をリードする価格性能比を提供します。

<blockquote class="twitter-tweet" data-media-max-width="800"><p lang="ja" dir="ltr">Amazon nova liteで PDFの解析をbotoでやってみた！<br>普通によさそう <a href="https://t.co/vlAo3sQUSH">https://t.co/vlAo3sQUSH</a> <a href="https://t.co/7iIkkP6XvZ">pic.twitter.com/7iIkkP6XvZ</a></p>&mdash; Maki@Sunwood AI Labs. (@hAru_mAki_ch) <a href="https://twitter.com/hAru_mAki_ch/status/1864307941337387504?ref_src=twsrc%5Etfw">December 4, 2024</a></blockquote> 

## Nova モデルの概要

Amazon Nova には以下の3つの理解モデルがあります：

- **Nova Pro**: 高性能なマルチモーダルモデル
- **Nova Lite**: 低コストで高速なマルチモーダルモデル（今回使用）
- **Nova Micro**: テキストのみの最低レイテンシーモデル

今回は Nova Lite を使用します。主な特徴：
- モデルID: `amazon.nova-lite-v1:0`
- 推論プロファイルID: `us.amazon.nova-lite-v1:0`
- 入力: テキスト、画像、動画をサポート
- 出力: テキスト
- コンテキストウィンドウ: 300k
- 最大出力トークン: 5k
- 対応ドキュメント: PDF, CSV, DOC, DOCX, XLS, XLSX, HTML, TXT, MD

## 環境設定

まず、必要なライブラリをインストールします。

```python
!pip install boto3 requests
```

次に、必要なライブラリをインポートします。

```python
import base64
import json
import boto3
import requests
import os
```

## AWS認証情報の設定

AWS Bedrock を使用するための認証情報を設定します。
**注意**: 実際の認証情報は環境変数やAWS Secrets Managerなどで安全に管理してください。

```python
# AWS認証情報の設定
aws_access_key_id = "YOUR_ACCESS_KEY_ID"
aws_secret_access_key = "YOUR_SECRET_ACCESS_KEY"
```

## サンプルPDFのダウンロード

分析対象のPDFをダウンロードします。この例では、arXivから論文をダウンロードします。

```python
# サンプルPDFのダウンロード（例としてArXivの論文をダウンロード）
pdf_url = "https://arxiv.org/pdf/2201.00001.pdf"
pdf_path = "my_document.pdf"

response = requests.get(pdf_url)
with open(pdf_path, 'wb') as f:
    f.write(response.content)
```

## Nova Lite クライアントの初期化

Nova Lite クライアントを初期化します。リージョンは現在 us-east-1 のみサポートされています。

```python
# Nova Liteクライアントの初期化
client = boto3.client(
    "bedrock-runtime",
    region_name="us-east-1",  # Nova は現在 us-east-1 のみサポート
    aws_access_key_id=aws_access_key_id,
    aws_secret_access_key=aws_secret_access_key
)

MODEL_ID = "us.amazon.nova-lite-v1:0"  # Nova Lite の推論プロファイルID
```

## PDFの読み込みとリクエストの準備

PDFファイルを読み込み、APIリクエストを準備します。Nova は PDF を直接処理できます。

```python
# PDFの読み込み
with open('my_document.pdf', "rb") as file:
    doc_bytes = file.read()

messages = [
    {
        "role": "user",
        "content": [
            {
                "document": {
                    "format": "pdf",
                    "name": "DocumentPDFmessages",
                    "source": {
                        "bytes": doc_bytes
                    }
                }
            },
            {
                "text": """How many qubits of growth is projected by 2026 by the industry, and how does the actual trajectory differ?"""
            }
        ]
    }
]

# Nova の推論パラメータ設定
inf_params = {
    "maxTokens": 300,  # 最大出力トークン数
    "topP": 0.1,      # 出力の多様性制御
    "temperature": 0.3 # 出力のランダム性制御
}
```

## モデルの実行と結果の表示

Nova モデルを実行し、結果を表示します。Nova は Converse API をサポートしており、より自然な対話が可能です。

```python
try:
    model_response = client.converse(
        modelId=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'])

except Exception as e:
    print(f"Error occurred: {str(e)}")

# クリーンアップ
os.remove(pdf_path)  # PDFファイルの削除
```

## Nova の高度な機能

Nova には以下のような高度な機能もあります：

- **ストリーミング**: リアルタイムでの応答生成
- **バッチ推論**: 大量のデータの一括処理
- **ファインチューニング**: モデルのカスタマイズ
- **Bedrock Knowledge Bases**: 知識ベースとの統合
- **Bedrock Agents**: AIエージェントの構築
- **Bedrock Guardrails**: 安全性制御（テキストのみ）
- **Bedrock Studio**: 開発環境との統合

## 注意事項

### セキュリティ
- AWS認証情報は公開しないように注意してください
- 本番環境では認証情報を環境変数やAWS Secrets Managerなどで適切に管理してください
- ダウンロードするPDFは著作権に注意してください

### クォータと料金
- Nova の利用には料金が発生します
- 現在は us-east-1 リージョンのみの提供です
- API使用量の制限に注意してください

## トラブルシューティング

エラーが発生した場合は、以下を確認してください：
- AWS認証情報が正しく設定されているか
- リージョンが us-east-1 に設定されているか
- PDFファイルが正常にダウンロードできているか
- インターネット接続が安定しているか
- API使用量の制限に達していないか


## &#x1f4d2;ノートブック

https://colab.research.google.com/drive/15uEnaID2F_8XZ5yiFPVkZDnSpz0DtlAs?usp=sharing

<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>