Amazon Bedrockを試してみた

# 背景・目的
前回、[Amazon Bedrockを整理してみた](https://qiita.com/zumax/items/ad61c2ae4cb767aff05f)では、Amazon 生成AIサービスのBendrockについて、どのような特徴があるか整理しました。
今回は、セットアップから簡単に動作させてみたいと思います。

# まとめ
下記に特徴を整理します。

| 特徴 | 説明 |
|:--|:--|
|プレイグランド|・推論をアプリケーションで使用することを決定する前に、様々なモデルや設定で推論を実行するためにコンソールを提供<BR>・下記が用意されている<BR>　・テキスト<BR>　・チャット<BR>　・画像|
|モデルの使用|モデルを使用するためには、最初にモデルアクセスが必要|

# 概要
## プレイグラウンド
[プレイグラウンド](https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/playgrounds.html)を元に整理します。

> Amazon Bedrock プレイグラウンドは、推論をアプリケーションで使用することを決定する前に、さまざまなモデルやさまざまな設定で推論を実行してみるためのコンソール環境を提供します。コンソールで、左側のナビゲーションペインで [プレイグラウンド] を選択します。また、プレイグラウンドに直接移動するには、モデルの詳細ページまたは例ページでモデルを選択します。
> プレイグラウンドには、テキストモデル、チャットモデル、画像モデル用があります。

- 推論をアプリケーションで使用することを決定する前に、様々なモデルや設定で推論を実行するためにコンソールを提供
- プレイグラウンドは、下記がある
    - テキスト
    - チャット
    - 画像

> 各プレイグラウンドでは、プロンプトを入力したり、推論パラメータを試したりできます。プロンプトは通常、モデルのシナリオ、質問、またはタスクをセットアップする 1 つ以上のテキスト文です。プロンプトの作成の詳細については、「 プロンプトエンジニアリングガイドライン」を参照してください。

- プロンプトを入力する
- 推論パラメータを試す

> 推論パラメータは、生成テキストのランダム性など、モデルが生成するレスポンスに影響します。プレイグラウンドにモデルを読み込むと、そのプレイグラウンドはモデルをデフォルトの推論設定で構成します。モデルを試しながら設定を変更したりリセットできます。各モデルには、独自の推論パラメータのセットがあります。詳細については、「基盤モデルの推論パラメータ」を参照してください。
> レスポンスを送信すると、モデルは生成された出力で応答します。
> チャットモデルまたはテキストモデルがストリーミングをサポートしている場合、デフォルトではモデルからレスポンスをストリーミングします。必要に応じてストリーミングをオフにできます。

- 推論パラメータは、生成テキストのランダム性など、モデルが生成するレスポンスに影響する
- プレイグラウンドにモデルを読み込むと、そのプレイグランドはモデルをデフォルトの推論設定で構成する



## モデルアクセス
[モデルアクセス](https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/model-access.html)を元に試します

> Amazon Bedrock ファンデーションモデルへのアクセスはデフォルトでは許可されていません。基盤モデルにアクセスするには、十分な権限を持つ IAM ユーザーがコンソールからそのモデルへのアクセスをリクエストする必要があります。モデルへのアクセス権が付与されると、そのモデルはそのアカウントのすべてのユーザーが利用できるようになります。

- モデルへのアクセスはデフォルトでは許可されてない
- リクエストする必要がある

## サポートされている AWS リージョン
:::note info 
2024/5/6時点の情報です。
最新の情報や、詳細は、[こちら](https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/bedrock-regions.html)をご確認ください。
:::

米国東部 (バージニア北部) および米国西部 (オレゴン) ではすべての機能を使用できるとのこと


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/c7b3a01b-7bd9-52ca-6171-39acf150b02b.png)

※ 出典：サポートされている [AWS リージョン](https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/bedrock-regions.html)

# 実践
## モデルアクセス

1. AWSにサインインし、Bedrockに移動します
1. ナビゲーションペインの「モデルアクセス」をクリックします
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/d235024b-543a-5229-cb1d-f08a6d129957.png" width=200 />

1. モデルの状態がわかります。リクエスト可能、使用不可、Anthropicの場合は、ユースケースの詳細を送信が必要です。画面右上の「モデルアクセスを管理」をクリックします。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/4fe63ae2-eb09-56bd-5bb9-3ebbabae080c.png)

### Llama3 8B Instruct
1. チェックし、「EULA」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/4e868a3a-ab21-846f-5ea7-1b75a6b8603c.png)

1. 別タブでPDFが開きますので、規約を確認します。規約にはAWSカスタマーアグリーメントとAWSサービス条件が含まれています
1. 「モデルアクセスをリクエスト」をクリックします
1. アクセスが付与されました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/5f86187f-18f4-7ed6-3ac8-ba7fcad48bdb.png)


### Amazon のFM
1. チェックし、「EULA」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ec786209-0268-c0a5-4261-dab11d30cddc.png)
1. ※ G1 - Expressも付与します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/5bd0c0eb-581e-8c4e-8aab-03108f764c8b.png)
1. ※ Generator G1も付与します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/32fb58ac-67cf-84fa-e296-00cc9be410f2.png)

1. 「変更を保存」をクリックします
1. アクセスが付与されました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/ccf1f1b5-2d5f-5236-df9e-3f5114d6c97d.png)


## プレイグラウンド
### チャット
1. ナビゲーションペインで、プレイグラウンドの「チャット」をクリックします

#### Llama
:::note info
FMを使用する前に、そのモデルへのアクセスが必要です
:::

1. 「モデルを選択」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/67cf9171-b04e-fb71-8e77-3f306f2cf3d7.png)

1. 上記でアクセスしたモデルを選択し、「適用」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/aad91bbb-4fd0-b972-e753-03f98ecd1b70.png)
1. 設定されました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/f9ece0ac-0c7d-1c50-2808-871c77d49f2c.png)

1. 下記のテキストを入力し、「実行」します
    ```
    日本の首相は
    ```
1. 日本語で応答がありました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/87f4b393-a730-9cdd-e33d-a1ca7e91597e.png)

1. 画面右上の「コピー」ボタンでチャットの内容をコピーできます
1. 「ホウキ」マークをクリックすると、チャットは消えます
1. 画面右の設定により、「ランダム性と多様性」、「応答の長さ」が選択できます（参考：[基盤モデルの推論パラメータ](https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/model-parameters.html)）
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/2bd3bce5-ef1e-3c07-f45a-23f134fa1ce4.png" width=300 />
1. 実行されると、モデルのメトリクスが表示されます
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/6b87b784-7594-62b3-ffae-326e6e7f39f9.png)

#### Titan Text G1
1. 「モデルを選択」をクリックします
1. 上記でアクセスしたモデルを選択し、「適用」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/1e615a64-49fb-8dea-51c2-cc2d9d690180.png)
1. 下記のテキストを入力し、「実行」します
    ```
    日本の首相は
    ```
1. 文字化けされて表示されました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/9381e9d0-17ad-dfac-10c9-073ac6de0b43.png)
1. 英語で質問してみます
    ```
    Who is the current Prime Minister of Japan?
    ```
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/9885a5f4-88ee-9543-8c7b-a76762cbfd46.png)

#### 比較モード
1. 画面右上の「比較モード」をクリックします
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/828de6fa-eb02-d4f3-0343-f5830b93a977.png" width=300 />

1. すでにTitanが選択されています。「モデルを選択」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/5bedcf44-3fe1-5d67-693b-b33a2b63ccd7.png)

1. モデルを選択し、「適用」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/84973775-b584-f350-41c5-fbd2ad88c253.png)

1. 設定されました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b1e9131f-65cc-6eb4-885a-dc12c71a9173.png)

1. 英語で質問してみます
    ```
    Who is the current Prime Minister of Japan?
    ```
1. レスポンスが返ってきました。Llama 3のほうが詳細に解説してくれました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/4c5422b7-730a-82d8-bd38-cce8880ad525.png)

1. モデルメトリクスを確認します。トークン数はLlama3のほうが多いです。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/5216cc76-7563-2f10-b09f-8ee317c5eac3.png)

### テキスト
1. ナビゲーションペインで、プレイグラウンドの「テキスト」をクリックします

#### Titan Text G1 - Express
1. 「モデルの選択」をクリックします
1. モデルを選択し、「適用」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b44beb93-0d7e-4593-d597-68dca5348463.png)

1. 英語で質問してみます
    ```
    Who is the current Prime Minister of Japan?
    ```
1. 表示されました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/9f10edf6-daef-4cdc-4ac7-105c13e05c30.png)

### イメージ
1. ナビゲーションペインで、プレイグラウンドの「イメージ」をクリックします

#### Titan Image Generator G1
1. 「モデルの選択」をクリックします
1. モデルを選択し、「適用」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/26ad9d6d-4d18-673d-a42f-69dafff0364f.png)
1. 下記の内容を入力したところ、画像が表示されました。（リュックサックのサンプルが複数表示されました）
    ```
    Generate an image based on the characteristics below.
    - Adjustable straps
    - Multiple compartments
    - Padded back
    - Durable material
    - Water-resistant
    - Secure closures
    - External pockets
    - Internal frame
    - Reflective elements
    - Ventilation system
    ```

# 考察
今回、Bedrock上で、チャット、イメージ、テキストの推論を試してみました。あまり使用していませんが複数モデルを手軽に試すことが出来て、比較できるのは良いですね。
今後は、バッチ推論やRAGを試してみたいと思います。


# 参考
https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/model-usage.html

https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/setting-up.html

https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/bedrock-regions.html

https://docs.aws.amazon.com/general/latest/gr/bedrock.html#bedrock_region

https://aws.amazon.com/jp/blogs/news/anthropics-claude-3-haiku-model-is-now-available-in-amazon-bedrock/

https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/playgrounds.html