Amazon Bedrockの日本語対応をうたうモデルが増えたので比較します

Amazon BedrockにMistral Large 2が追加されました。

https://aws.amazon.com/jp/blogs/machine-learning/mistral-large-2-is-now-available-in-amazon-bedrock/

前日にLlama 3.1が追加されたというのに、すごいリリース体制ですね。寝てないんでしょうか。

## Bedrockの日本語対応モデル

2024/7/25時点で公式サイト上で、日本語対応が明記されているモデルは以下のモデルです。

* Anthropic : Claude 3.5 Sonnet / Claude 3 Opus / Claude 3 Sonnet / Claude 3 Haiku
* Cohere : Command R+ / Command R
* Mistral AI : Mistral Large 2

Claude 2などは、「英語とその他いろいろな言語」みたいな書き方なので、除外します。

## 検証内容

BedrockがGAした際の記事の全文（英語）を渡して、解説してもらいます。

https://www.aboutamazon.com/news/aws/aws-amazon-bedrock-general-availability-generative-ai-innovations

LangChainのドキュメントに記載のあった[こちら](https://smith.langchain.com/hub/rlm/rag-prompt)のプロンプトを参考にちょっとだけ改変しました。

```text:プロンプトテンプレート
You are an assistant for question-answering tasks. 
Use the following pieces of retrieved context to answer the question. 
If you don't know the answer, just say that you don't know.
回答は日本語でお願いします。

Question: {question} 

Context: {context} 

Answer:
```

これをConverse APIでぶん回します

## コード

ご参考まで。

:::note

<details><summary>Pythonコード</summary>

```python
import json
import boto3

client_useast1 = boto3.client("bedrock-runtime", region_name="us-east-1")
client_uswest2 = boto3.client("bedrock-runtime", region_name="us-west-2")

models = [
    {"client": client_uswest2, "modelId": "mistral.mistral-large-2407-v1:0"},
    {"client": client_useast1, "modelId": "anthropic.claude-3-5-sonnet-20240620-v1:0"},
    {"client": client_useast1, "modelId": "cohere.command-r-plus-v1:0"},
]

with open("./bedrock-ga.txt") as f:
    context = f.read()

question = "Bedrockについて詳しく教えて下さい。"

prompt_template = """
You are an assistant for question-answering tasks. 
Use the following pieces of retrieved context to answer the question. 
If you don't know the answer, just say that you don't know.
回答は日本語でお願いします。

Question: {question} 

Context: {context} 

Answer:
"""

prompt = prompt_template.replace("{context}", context).replace("{question}", question)


for model in models:
    client = model["client"]
    modelid = model["modelId"]

    response = client.converse(
        modelId=modelid,
        messages=[
            {
                "role": "user",
                "content": [{"text": prompt}],
            }
        ],
    )

    print("-----")
    print(modelid)
    print("---")
    print(json.dumps(response, indent=2, ensure_ascii=False))
```

</details>

:::

## 結果

出力結果を比較しましょう。

* Mistral Large 2
    本日新登場のモデルです。
    特に指示してないですが、Markdownで生成されました。一番詳細に回答を得られた印象です。
    
    ```
    Amazon Bedrockは、AWSが提供する全く新しいサービスで、企業や開発者が簡単にジェネラティブAI（生成AI）アプリケーションを構築し、スケールさせることができるように設計されています。以下にその詳細を説明します。
    
    ### Amazon Bedrockの主な機能
    
    1. **ファウンデーションモデル（FMs）の提供**:
       - Amazon Bedrockは、複数のトップクラスのファウンデーションモデル（大規模な事前学習済み機械学習モデル）を提供します。これらのモデルは、検索、コンテンツ生成、薬物発見など、さまざまな用途に適用できます。
    
    2. **簡単なアクセスと統合**:
       - 企業は、高パフォーマンスで最適なファウンデーションモデルを簡単に見つけて、既存のアプリケーションに統合することができます。インフラストラクチャの管理や大規模なコストを心配する必要がありません。
    
    3. **プライバシーとセキュリティ**:
       - Amazon Bedrockは、顧客の貴重な知的財産であるデータを完全に保護し、プライバシーを確保します。データの共有や使用方法についても制御が可能です。
    
    4. **カスタマイズ可能なエージェント**:
       - コードを書かずに、複雑なビジネスタスク（旅行の予約、保険請求の処理、広告キャンペーンの作成、在庫管理など）を実行するエージェントを作成することができます。
    
    ### 他の関連サービス
    
    1. **Amazon Titan Embeddings**:
       - テキストを数値表現に変換する大規模言語モデルで、検索、パーソナライゼーション、リトリーバル補強生成（RAG）などの用途に適しています。
    
    2. **MetaのLlama 2**:
       - Amazon Bedrockは、Metaの次世代大規模言語モデルであるLlama 2を提供します。これにより、ダイアログ用途に最適なモデルが利用可能になります。
    
    3. **Amazon CodeWhisperer**:
       - 開発者が内部コードベースを安全に活用して、より関連性の高いコード提案を受け取ることができる新しい機能が追加されます。
    
    4. **Amazon QuickSight**:
       - 自然言語コマンドを使用して、ビジネスアナリストが簡単にビジュアルを作成し、カスタマイズできる新しいジェネラティブBI作成機能が追加されます。
    
    ### 学習リソース
    
    - AWSは、Amazon Bedrockの利用を開始するための無料のオンデマンド学習コースを提供しています。このコースは、サービスの利点、機能、ユースケース、技術的な概念を紹介します。
    
    ### まとめ
    
    Amazon Bedrockは、企業や開発者がジェネラティブAIの可能性を最大限に引き出すための強力なツールを提供します。セキュリティとプライバシーを確保しながら、簡単に高性能なファウンデーションモデルを利用し、カスタマイズしたアプリケーションを構築することができます。
    ```

* Command R+
    
    RAGに強いとされるCommand R+です。改行もなく、Markdown化もなく、短い文章で回答しようと努力してくれている印象です。
    
    ```
    Amazon Bedrockは、AWSが提供するフルマネージドのサービスで、さまざまなAI企業が提供するファウンデーション・モデル（FM）を単一のAPIを通じて利用できるようにするものです。 FMは、大量のデータで事前トレーニングされた大規模な機械学習モデルであり、検索、コンテンツ作成、創薬など幅広い用途に適用できます。 Amazon Bedrockは、顧客がFMをシームレスにアプリケーションに統合できるようにし、インフラの大規模クラスターを管理したり、大きなコストが発生したりすることを防ぎます。また、Amazon Bedrockはサーバーレスであるため、顧客はインフラを管理する必要がなく、馴染みのあるAWSサービスを利用して、アプリケーションにAI機能を安全に統合して展開することができます。さらに、Amazon Bedrockはセキュリティとプライバシーを考慮して設計されており、顧客が機密データを保護するのを簡単にします。
    ```

* Claude 3.5 Sonnet
    
    なんというか、一番自然な印象です。
    
    ```
    Amazon Bedrockは、AWSが提供する完全マネージド型のサービスで、以下の主な特徴があります:
    
    1. 複数のAI企業が提供する基礎モデル(Foundation Models)に単一のAPIでアクセスできます。
    
    2. サーバーレスで、インフラ管理が不要です。
    
    3. 顧客は様々な基礎モデルを簡単に試すことができ、独自のデータで非公開にカスタマイズすることも可能です。
    
    4. セキュリティとプライバシーを重視して設計されており、機密データの保護が容易です。
    
    5. コードを書かずに複雑なビジネスタスクを実行する管理エージェントを作成できます。
    
    6. 既存のAWSサービスとシームレスに統合できます。
    
    7. 検索、パーソナライゼーション、Retrieval-Augmented Generation (RAG)などのユースケースをサポートします。
    
    8. Meta社のLlama 2モデルなど、複数のAI企業の基礎モデルが利用可能です。
    
    Bedrockは、企業が生成AIアプリケーションを構築・拡張するのを支援し、開発者から分析者まで、あらゆる従業員が生成AIの可能性を活用できるようにすることを目的としています。
    ```

## 消費トークン数とレイテンシ

Converse APIのレスポンスで取得できた値を表にしました。
一回実行しただけなのでなんとも言えませんが、

* Command R+が早くて倹約家
* mistral Large 2はレイテンシーがちょっと許容オーバーかな（長文出力だからの可能性あり）

という印象です。

| 項目 | Mistral Large 2 | Command R+ | Claude 3.5 Sonnet |
| --- | --: | --: | --: |
| inputTokens | 2627 | 2375 | 2565 | 
| outputTokens | 1170 | 195 | 396 | 
| totalTokens | 3797 | 2570 | 2961 |
| latencyMs | 30319 | 6246 | 13208 |