なんか知らんけど Amazon Bedrock でドキュメントが読めたので 18 モデルで比較してみた

いつの間にかアップデートが走ってました。
https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html


## やってみる
適当に PDF を用意します。
私は、[Anthropic Claude Messages API](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-anthropic-claude-messages.html)を test.pdf として保存しました。

そして以下のようにコードを記述しました。

```python
import boto3
import os

brt = boto3.client(service_name='bedrock-runtime')

ANTHROPIC_VERSION = 'bedrock-2023-05-31'

AVAILABLE_MODEL_IDS = [
    'anthropic.claude-instant-v1', # v1
    'anthropic.claude-v2:1','anthropic.claude-v2', # v2
    'anthropic.claude-3-haiku-20240307-v1:0','anthropic.claude-3-sonnet-20240229-v1:0', # v3
]
model_id = AVAILABLE_MODEL_IDS[-1] # claude-3-sonnet

file_path = './test.pdf'
full_path = os.path.join(os.path.dirname(__file__),f'{file_path}')

response = brt.converse(
    # system=[{
    #     'text':system_prompt
    # }],
    modelId = model_id,
    messages = [
        {
            'role':'user',
            'content': [
                {
                    'document': {
                        'name': 'test', 'format': 'pdf',
                        'source': { 
                            'bytes': open(full_path, 'rb').read() 
                        } 
                    }
                },
                { 'text': 'ドキュメントを日本語で説明して' }
            ]
        }
    ],
    inferenceConfig={
        'maxTokens':4096,
        'temperature':0,
        # 'stopSequences':['</output>']
    }
)
print(response['output']['message']['content'][0]['text'])
```

そして忘れずに `pip install boto3 -U` します。(1.34.122で動かしました。)

すると…

```shell
python claude/converse_pdf.py
このドキュメントは、AWS Bedrock サービスの Anthropic Claude Messages API の使用方法について説明しています。主な内容は以下の通りです。

- Anthropic Claude Messages APIの概要と、メッセージングAPIを使ってチャットボットやバーチャルアシスタントアプリケーションを作成する方法が説明されています。

- サポートされているAnthropicのClaudeモデルのバージョンが列挙されています。

- リクエストとレスポンスの構造、必須パラメータと任意パラメータについて詳しく説明されています。

- システムプロンプト、マルチモーダルプロンプト(画像とテキストの組み合わせ)、ツール使用(関数呼び出し)などの高度な機能についても解説があります。

- Python言語を使ったコード例が複数示されており、単一のユーザーメッセージ、複数のメッセージ、マルチモーダルプロンプト、ストリーミングレスポンスなどの使用例が含まれています。

総じて、このドキュメントはAWS BerockでAnthropicのClaude言語モデルを活用する開発者向けの技術的な内容になっています。
```

なにーーー！Claude が PDF を読んでるよパトラッシュ…。

ちなみに `format=abc` など適当なフォーマットにするとエラーが発生して、使えるフォーマット一覧を表示してくれる。

```
botocore.errorfactory.ValidationException: An error occurred (ValidationException) when calling the Converse operation: 1 validation error detected: Value 'abc' at 'messages.1.member.content.1.member.document.format' failed to satisfy constraint: Member must satisfy enum value set: [docx, csv, html, txt, pdf, md, doc, xlsx, xls]
```

結構いけますね。

## 対応モデル
こんなに対応してなのか…。もっとアピールしてよAWSさん。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/504112/61951024-e0e3-56b7-2d2e-a99e1953aac2.png)

せっかくなのでループでそれぞれのモデルを試してみるのである。

コードを以下のように書き換えた

```python
import boto3
import os

brt = boto3.client(service_name='bedrock-runtime')

ANTHROPIC_VERSION = 'bedrock-2023-05-31'

MODEL_IDS = [
    'amazon.titan-text-express-v1',
    'amazon.titan-text-lite-v1',
    'anthropic.claude-instant-v1',
    'anthropic.claude-v2',
    'anthropic.claude-v2:1',
    'anthropic.claude-3-haiku-20240307-v1:0',
    'anthropic.claude-3-sonnet-20240229-v1:0',
    'cohere.command-text-v14',
    'cohere.command-light-text-v14',
    'cohere.command-r-v1:0',
    'cohere.command-r-plus-v1:0',
    'meta.llama2-13b-chat-v1',
    'meta.llama2-70b-chat-v1',
    'meta.llama3-8b-instruct-v1:0',
    'meta.llama3-70b-instruct-v1:0',
    'mistral.mistral-7b-instruct-v0:2',
    'mistral.mixtral-8x7b-instruct-v0:1',
    'mistral.mistral-large-2402-v1:0',
]


file_path = './test.pdf'
full_path = os.path.join(os.path.dirname(__file__),f'{file_path}')

for model_id in MODEL_IDS:
    print(f'---{model_id}---')
    try:
        response = brt.converse(
            modelId = model_id,
            messages = [
                {
                    'role':'user',
                    'content': [
                        {
                            'document': {
                                'name': 'test', 'format': 'pdf',
                                'source': { 
                                    'bytes': open(full_path, 'rb').read() 
                                } 
                            }
                        },
                        { 'text': 'ドキュメントを日本語で説明して' }
                    ]
                }
            ],
            inferenceConfig={
                'maxTokens':2048,
                'temperature':0,
            }
        )
        print(response['output']['message']['content'][0]['text'])
    except Exception as e:
        print(e)
    print('-------\n\n\n')
```

実行してみた。

```plain
python claude/converse_pdf.py
---amazon.titan-text-express-v1---
An error occurred (ValidationException) when calling the Converse operation: The model returned the following errors: 400 Bad Request: Too many input tokens. Max input tokens: 8192, request input token count: 10697 
-------



---amazon.titan-text-lite-v1---
An error occurred (ValidationException) when calling the Converse operation: The model returned the following errors: 400 Bad Request: Too many input tokens. Max input tokens: 4096, request input token count: 10445 
-------



---anthropic.claude-instant-v1---
はい、そのドキュメントはAnthropic ClaudeメッセージAPIの使用方法についての説明です。

主なポイントは以下のとおりです:

- メッセージAPIを使用して、ユーザとAIアシスタントとの会話を実装できるようになります。

- メッセージパラメータには、ロールとコンテンツを指定します。ロールはユーザまたはアシスタント、コンテンツはテキストや画像などです。

- 複数のやり取りを指定でき、最後のメッセージがアシスタントの場合はそこから応答を続けられます。

- 画像データはbase64エンコードされます。

- モデルはAnthropic Claudeです。

- ツールの定義と使用方法も説明されています。

- コード例も示されており、実際のAPI呼び出し方法が分かります。

以上が、このドキュメントの主な内容の日本語説明です。メッセージAPIの仕様やパラメータ、使用方法が詳しく説明されています。
-------



---anthropic.claude-v2---
このドキュメントは、Amazon BedrockのAnthropic Claude Messages APIについて説明しています。

要点:

- Anthropic Claude Messages APIを使用すると、チャットボットや仮想アシスタントアプリケーションを作成できます。このAPIは、ユーザーとAnthropic Claudeモデル(アシスタント)間の会話のやり取りを管理します。

- 入力メッセージは、roleとcontentのオブジェクトで構成されます。roleはuserまたはassistantのいずれかです。contentはテキストまたは画像データです。

- メッセージはInvokeModelまたはInvokeModelWithResponseStream APIでBedrockに送信します。

- サポートされるAnthropic Claudeモデルは、Claude 2、Claude 3 Sonnet、Claude 3.5 Sonnetなどです。

- パラメータには、max_tokens、temperature、top_p、top_kなどがあります。これらは生成されるテキストの長さやランダム性を制御します。

- マルチモーダルプロンプトでは、画像とテキストの両方を同時に送信できます。

- ツール使用機能を使うと、モデルが定義されたツールを呼び出すことができます。

- コード例では、メッセージの送受信方法やマルチモーダルプロンプトの例が示されています。

このAPIを使うと、自然な会話ができるチャットボットを簡単に構築できます。画像とテキストを組み合わせたインタラクションも可能です。
-------



---anthropic.claude-v2:1---
このドキュメントは、Amazon BedrockのAnthropic Claude Messages APIについて説明しています。

要約すると、

- Anthropic Claude Messages APIを使用すると、チャットボットや仮想アシスタントアプリケーションを作成できます。このAPIは、ユーザーとAnthropic Claudeモデル(アシスタント)間の会話のやり取りを管理します。

- 入力メッセージには、role(userまたはassistant)とcontentが必要です。複数のuserメッセージとassistantメッセージを指定できます。

- contentにはテキストや画像を含めることができます。画像の場合はbase64エンコードされた画像バイトを指定します。

- systemプロンプトを使用すると、モデルにコンテキストと指示を提供できます。

- ツール使用機能を使うと、モデルがメッセージへの応答生成にツールを利用できるようになります。

- 応答には、生成されたテキストのほか、使用トークン数などの使用状況情報が含まれます。

- コード例では、単一のuserメッセージや事前入力されたassistantメッセージのプロンプト、マルチモーダルプロンプトの送信方法が示されています。

以上が、このドキュメントの要約です。Anthropic Claude Messages APIの利用方法が詳しく説明されています。
-------



---anthropic.claude-3-haiku-20240307-v1:0---
このドキュメントは、Amazon Bedrock上のAnthropic Claude APIの使用方法について説明しています。主な内容は以下の通りです:

1. Anthropic Claude Messages APIの概要
   - メッセージベースのチャットボットやバーチャルアシスタントを作成するためのAPIです。
   - ユーザーとアシスタントの会話履歴を管理し、次のメッセージを生成します。

2. サポートされているモデル
   - Anthropic Claude Instant v1.2、Anthropic Claude 2 v2、Anthropic Claude 2 v2.1など、複数のAnthropic Claudeモデルがサポートされています。

3. リクエストとレスポンス
   - リクエストには、メッセージ履歴、システムプロンプト、温度、トップpなどのパラメータを指定します。
   - レスポンスには、生成されたメッセージ、使用トークン数、停止理由などの情報が含まれます。

4. コード例
   - メッセージのみのリクエスト
   - 事前に埋められたアシスタントメッセージを含むリクエスト
   - マルチモーダルなリクエスト(画像とテキストを含む)

全体として、Anthropic Claude Messages APIの使用方法と、様々なユースケースに対応するためのリクエスト例が示されています。
-------



---anthropic.claude-3-sonnet-20240229-v1:0---
このドキュメントは、AWS Bedrock サービスの Anthropic Claude Messages API の使用方法について説明しています。主な内容は以下の通りです。

- Anthropic Claude Messages APIの概要と、メッセージングAPIを使ってチャットボットやバーチャルアシスタントアプリケーションを作成する方法が説明されています。

- サポートされているAnthropicClaudeモデルのリストが示されています。

- リクエストとレスポンスの構造、必須パラメータと任意パラメータについて詳しく説明されています。

- システムプロンプト、マルチモーダルプロンプト、ツール使用(関数呼び出し)などの高度な機能についても解説があります。

- Python言語を使ったコード例が複数示されており、単一のユーザーメッセージ、複数のメッセージ、マルチモーダルプロンプト(画像+テキスト)の送信方法が分かります。

- ストリーミングレスポンスの取得方法についても、コード例が用意されています。

総じて、このドキュメントはAWS BedrocクのAnthropicClaudeモデルを使ってメッセージングアプリケーションを構築する開発者向けのリファレンスとなっています。
-------



---cohere.command-text-v14---
An error occurred (ValidationException) when calling the Converse operation: The model returned the following errors: Input is too long for requested model.
-------



---cohere.command-light-text-v14---
An error occurred (ValidationException) when calling the Converse operation: This model doesn't support documents.
-------



---cohere.command-r-v1:0---
このドキュメントは、アマゾン・ベッドロックのユーザーガイドで、アンソロピック・クロード・メッセージAPIについて説明したものです。API（アプリケーション・プログラミング・インターフェース）とは、開発者がソフトウェアの機能を利用できるようにするインターフェースで、チャットボットやバーチャルアシスタントのアプリケーションを作成するために使用できます。このガイドでは、パラメーター、コード例、使用できるモデルなど、APIの様々な機能について説明しています。
-------



---cohere.command-r-plus-v1:0---
このドキュメントは、Anthropic Claude Messages API を使用してチャットボットやバーチャルアシスタント アプリケーションを作成する方法を説明しています。この API は、ユーザーと Anthropic Claude モデル（アシスタント）との会話のやりとりを管理します。

このドキュメントでは、ベースとなる推論操作を使用して Anthropic Claude Messages API を使用する方法と、推奨される Converse API を使用してメッセージを実装する方法について説明しています。

Anthropic Claude モデルは、交互にユーザーとアシスタントの会話が行われるようにトレーニングされています。新しいメッセージを作成する際は、メッセージ パラメーターを使用して以前の会話のやり取りを指定します。その後、モデルが会話の次のメッセージを生成します。

各入力メッセージには、ロールとコンテンツが必要です。ユーザー ロールのみの 1 つのメッセージ、または複数のユーザーとアシスタントのメッセージを指定できます。最初のメッセージは常にユーザー ロールでなければなりません。

このドキュメントには、さまざまなコード例と、Anthropic Claude モデルで使用できるさまざまなパラメーターとオプションも記載されています。
-------



---meta.llama2-13b-chat-v1---
An error occurred (ValidationException) when calling the Converse operation: The model returned the following errors: This model's maximum context length is 4096 tokens. Please reduce the length of the prompt
-------



---meta.llama2-70b-chat-v1---
An error occurred (ValidationException) when calling the Converse operation: The model returned the following errors: This model's maximum context length is 4096 tokens. Please reduce the length of the prompt
-------



---meta.llama3-8b-instruct-v1:0---
An error occurred (ValidationException) when calling the Converse operation: The model returned the following errors: This model's maximum context length is 8192 tokens. Please reduce the length of the prompt
-------



---meta.llama3-70b-instruct-v1:0---
An error occurred (ValidationException) when calling the Converse operation: The model returned the following errors: This model's maximum context length is 8192 tokens. Please reduce the length of the prompt
-------



---mistral.mistral-7b-instruct-v0:2---
 このドキュメントは、Amazon Bedrockの Anthropic Claude Messages API について説明しています。 Anthropic Claude Messages APIは、チャットボットや仮人アシスタントアプリケーションなどを作成するために使用できます。APIは、ユーザーと Anthropic Claude モデル (アシスタント) の間の会話を管理します。

このドキュメントでは、APIの概要、サポートされるモデル、リクエストとレスポンス、およびコード例について説明しています。 Anthropic Claude Messages APIを使用する方法は、InvokeModel または InvokeModelWithResponseStream APIを使用することを推奨しています。しかし、Converse APIを使用することを強くお勧めしています。

 Anthropic Claudeは、ユーザーとアシスタントの対話の交代を管理します。各入力メッセージは、roleとcontentで構成され、モデルは次のメッセージを生成します。入力メッセージは、ユーザーメッセージの場合は常にuser roleを使用する必要があります。

 Anthropic Claudeは、ユーザーが応答を先に入力しておくことを許可しています。このテクニックを使用すると、Claudeはユーザーの入力から引き続き応答します。最終メッセージがassistant roleを使用する場合、レスポンスコンテンツは、最終メッセージのコンテンツから直接続続きします。これにより、モデルの応答を制限できます。

 このドキュメントでは、例を提供しています。単一のユーザーメッセージと複数の会話回りの例があります。各入力メッセージは、roleとcontentで構成され、最初のメッセージは常にuser roleを使用する必要があります。

 Anthropic Claudeは、Text Completion APIからのプロンプトを移行するためにも使用できます。System promptsも使用でき、ユーザーが提供するコンテキストや指示を Anthropic Claude に提供します。

 Anthropic Claudeは、multimodal promptをサポートし、画像とテキストを組み合わせて1つのプロンプトを作成できます。

 Anthropic Claudeは、 Anthropic Claude Instant v1.2、Anthropic Claude 2 v2、Anthropic Claude 2 v2.1、Anthropic Claude 3 Sonnet、Anthropic Claude 3.5 Sonnet、Anthropic Claude 3 Haiku、Anthropic Claude 3 Opusの6種類のモデルをサポートしています。

 Anthropic Claudeは、InvokeModelまたはInvokeModelWithResponseStream APIを使用してリクエストを送信し、bodyフィールドにリクエストボディを渡します。最大サイズは20MBです。

 Anthropic ClaudeのAPIの詳細は、<https://docs.anthropic.com/claude/reference/messages_post>を参照してください。
-------



---mistral.mixtral-8x7b-instruct-v0:1---
 このドキュメントは、AWS Bedrockユーザーガイドの一部で、Anthropic Claude Messages APIについて説明しています。このAPIを使用すると、チャットボットや仮想アシスタントアプリケーションを作成できます。APIはユーザーとAnthropic Claudeモデル（アシスタント）との会話を管理します。

このドキュメントでは、Anthropic Claude Messages APIの概要、サポートされているモデル、要求と応答、コード例について説明しています。また、Anthropic Claudeモデルを操作するためのシステムプロンプトや、Anthropic Claudeモデルが画像とテキストを組み合わせたプロンプトを処理できるMultimodalプロンプトについても説明しています。

さらに、このドキュメントでは、Anthropic Claudeモデルが使用できるTools（機能）についても説明しています。Toolsは、Anthropic Claudeモデルが応答を生成するために使用できる外部の機能です。Toolsを使用すると、Anthropic Claudeモデルはより複雑なタスクを処理できます。

このドキュメントには、Anthropic Claude Messages APIを使用するためのコード例も含まれています。これらの例では、Pythonを使用して、Anthropic Claude 3 Sonnetモデルにメッセージを送信し、応答を受信する方法を示しています。また、Multimodalプロンプトを使用して、画像とテキストを組み合わせてAnthropic Claude 3 Sonnetモデルにメッセージを送信する方法も示しています。

Anthropic Claude Messages APIを使用するために、Amazon BedrockのAPIリファレンスドキュメントを参照することも重要です。このドキュメントには、Anthropic Claude Messages APIを呼び出すためのAPIメソッドとパラメーターについて説明しています。
-------



---mistral.mistral-large-2402-v1:0---
Read timeout on endpoint URL: "https://bedrock-runtime.us-east-1.amazonaws.com/model/mistral.mistral-large-2402-v1%3A0/converse"
---
```

タイムアウトしたりトークンが長すぎエラーが起きたり、対応していないエラーなども出ましたが（確認したつもり何だがなぁ）初めて正しい Converse API の使い方をした予感です。
簡単にモデルを差し替えて使えますね！