Amazon Bedrock で「生成AIのチャット、画像生成」をブラウザから試す

## はじめに

AWS は様々な AI サービスを提供しています

そして、それらのサービスはブラウザから簡単に試せるようになっています

https://aws.amazon.com/jp/free/machine-learning/

| サービス    | 機能                     | お試し記事     | Elixir 実装例 |
|:------------|:-------------------------|:----------------| :-----|
| Transcribe  |音声の文字起こし（音声認識）| [参照](https://qiita.com/RyoWakabayashi/private/396e2047d377e258950f)  | [参照](https://qiita.com/RyoWakabayashi/items/1fc64587c9fa352935c6) |
| Polly       |文書の読み上げ（音声合成）  | [参照](https://qiita.com/RyoWakabayashi/private/2aad1952f63b4e76b652) | [参照](https://qiita.com/RyoWakabayashi/items/93adae047ccb4fee8d78) |
| Lex         |チャットボット             | [参照](https://qiita.com/RyoWakabayashi/private/6c7e7a248e192f3a8afc) | Coming Soon... |
| Translate   |翻訳                      | [参照](https://qiita.com/RyoWakabayashi/private/688418e52cde44871c1e) | [参照](https://qiita.com/RyoWakabayashi/items/5f262ba0d1e11219edec) |
| Rekognition |画像認識<br/>顔認識        | [参照](https://qiita.com/RyoWakabayashi/private/d8c7f57a71e83d9140d5)<br/>[参照](https://qiita.com/RyoWakabayashi/private/10f93c3417041b005c31)  | [参照](https://qiita.com/RyoWakabayashi/items/2219e84642ff2d05481c) |
| Textract    |画像からの表データ読込     | [参照](https://qiita.com/RyoWakabayashi/private/b7bd7079d20326d9e4be) | [参照](https://qiita.com/RyoWakabayashi/items/7c26d0dda7d566adc694) |
| Bedrock     |生成AIによるチャット、画像生成| [参照](https://qiita.com/RyoWakabayashi/private/5680a4bac246a1a0c532) | [参照](https://qiita.com/RyoWakabayashi/private/bb85dd2286420205e2da) |

本記事では AWS の生成AIサービス Bedrock をブラウザから試してみます

## Amazon Bedrock とは

Amazon Bedrock　は 各種 AI 企業が構築した生成 AI モデル（FM = Foundation Model = 基盤モデル）をカスタマイズしたり、アプリケーションから簡単に呼び出せるようにしたサービスです

https://aws.amazon.com/jp/bedrock/

### Amazon Bedrock の使い途（ユースケース）

Amazon Bedrock は 2023年12月現在、以下の基盤モデルを選択可能になっています

|プロバイダー<br/>（基盤モデルの提供元）| 基盤モデル      |   用途  | 東京リージョン |
|:-------------| :------------------------------| :----: | :--: |
| AI21 Labs    | Jurassic-2 Ultra               |  テキスト | - |
| AI21 Labs    | Jurassic-2 Mid                 |  テキスト | - |
| Amazon       | Titan Embeddings G1 - Text     | ベクトル化 | OK |
| Amazon       | Titan Text G1 - Lite           |  テキスト | - |
| Amazon       | Titan Text G1 - Express        |  テキスト | OK |
| Amazon       | Titan Image Generator G1       |   画像   | - |
| Amazon       | Titan Multimodal Embeddings G1 | ベクトル化 | - |
| Anthropic    | Claude                         |  テキスト | - |
| Anthropic    | Claude Instant                 |  テキスト | OK |
| Cohere       | Command                        |  テキスト | - |
| Cohere       | Command Light                  |  テキスト | - |
| Cohere       | Embed English                  | ベクトル化 | - |
| Cohere       | Embed Multilingual             | ベクトル化 | - |
| Meta         | Llama 2 Chat 13B               |  テキスト | - |
| Meta         | Llama 2 Chat 70B               |  テキスト | - |
| Meta         | Llama 2 13B                    |  テキスト | - |
| Meta         | Llama 2 70B                    |  テキスト | - |
| Stability AI | SDXL 0.8                       |   画像   | - |
| Stability AI | SDXL 1.0                       |   画像   | - |

東京リージョン列が「OK」になっているもののみ、東京リージョンから使用可能です

もし「海外のデータセンターを使ってはならない」というような要件がある場合には注意しましょう

また、プロバイダー毎に契約内容に違いがある点も注意しましょう

他の生成 AI サービスと違って、多くのプロバイダー、モデルを選択できることが強みですね

また、当然 AWS 上でシステムを組んでいる場合、他サービスよりも連携しやすいことも魅力です

Amazon Bedrock は以下のような用途に使用可能です

- 生成 AI とのチャット
- 生成 AI による画像生成
- 生成 AI による全文検索

同じチャットであっても、ユーザーから一律同じ項目の回答が欲しい場合には Lex を使いましょう

### Amazon Bedrock の料金

https://aws.amazon.com/jp/bedrock/pricing/

AWS の料金は基本的に従量課金制です

Bedrock ではプロバイダー、モデル毎に料金が変わります

テキストのモデルでは入出力のトークン数（単語単位）、画像モデルでは生成した画像のサイズ、枚数、品質で課金されます

Amazon Titan バージニア北部リージョンの場合

- Titan Text – Lite
  - $0.0003 / 1,000 入力トークン
  - $0.0004 / 1,000 出力トークン
- Titan Text – Express
  - $0.0008 / 1,000 入力トークン
  - $0.0016 / 1,000 出力トークン
- Titan Image Generator (標準品質)
  - 512 * 512: $0.008 / 枚
  - 1024 * 1024: $0.01 / 枚
- Titan Image Generator (高品質)
  - 512 * 512: $0.01 / 枚
  - 1024 * 1024: $0.012 / 枚

後で紹介する Anthropic の Claude の場合は以下のようになっています

- Claude Instant
  - $0.00163 / 1,000 入力トークン
  - $0.00551 / 1,000 出力トークン
- Claude
  - $0.00800 / 1,000 入力トークン
  - $0.02400 / 1,000 出力トークン

Amazon Titan より高額にはなりますが、日本語にも対応しているのが強力です

また、 Bedrock では上記のような「オンデマンド」（使った分だけ）の課金方法以外に、「プロビジョンド」（一定の性能で使った時間分）の課金が可能になっています（一部の基盤モデルが対応）

「プロビジョンド」の場合、1時間、1モデルユニット（1分あたりの入出力トークン数制限）あたり以下のような金額になります

| モデル名 | 期間を定めない | 1ヶ月契約 | 6ヶ月契約 |
| :----- | --------------: | ------: | ------: |
| Titan Text Lite       | $7.10  | $6.40  | $5.10  |
| Titan Text Express    | $20.50 | $18.40 | $14.80 |
| Titan Image Generator | 非対応  | $16.20 | $13.00 |
| Claude Instant        | 非対応  | $39.60 | $22.00 |
| Claude                | 非対応  | $63.00 | $35.00 |

当然、使用期間を長く契約した方がお得です

¥150/$ で30日間24時間使用した場合、日本円では以下のような金額になります

| モデル名 | 期間を定めない | 1ヶ月契約 | 6ヶ月契約 |
| :----- | --------------: | ------: | ------: |
| Titan Text Lite       | ¥766,800 | ¥691,200 | ¥550,800 |
| Titan Text Express    | ¥2,214,000 | ¥1,987,200 | ¥1,598,400 |
| Titan Image Generator | 非対応  | ¥1,749,600 | ¥1,404,000 |
| Claude Instant        | 非対応  | ¥4,276,800 | ¥2,376,000 |
| Claude                | 非対応  | ¥6,804,000 | ¥3,780,000 |

1ヶ月で数十万円、数百万円になるため、契約時には注意しましょう
利用者、利用頻度が多い場合は「プロビジョンド」を選択した方が安くなるかもしれません

また、この記事では扱いませんが、モデルを自前データでカスタマイズすることも可能です

残念ながら、 Bedrock には無料利用枠が存在しません

注意しながら使いましょう

## アカウント作成

Amazon Bedrock を使うためには、 AWS のアカウント作成が必要です

以下の公式手順に従って、アカウントを作成してください

:::note warn
クレジットカードと電話番号が必要になります

予めご用意ください
:::

https://aws.amazon.com/jp/register-flow/

## ブラウザからの文書分析

### Amazon Bedrock への移動

AWS のマネジメントコンソールにログインすると、以下のような画面が表示されます

https://ap-northeast-1.console.aws.amazon.com/console/home?region=ap-northeast-1#

![スクリーンショット 2023-11-26 9.59.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/ccb18a17-4e2e-e5e6-098f-e779c8f69eef.png)

この画面から最近使ったサービスなどにアクセスできるようになっています

上メニューにある検索ボックスに `bed` と入力してみましょう

![スクリーンショット 2023-12-02 14.52.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/96493513-3b79-7667-daad-4ebaecd8b6c7.png)

サービスの候補として Amazon Bedrock が表示されます

Amazon Bedrock をクリックしましょう
以下のような画面が表示されます

https://ap-northeast-1.console.aws.amazon.com/bedrock/home?region=ap-northeast-1#/

![スクリーンショット 2023-12-02 14.54.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/ec0ca493-b021-5903-32b5-cff559591a09.png)

## リージョンの変更

左メニューから Model access を開いたとき、東京リージョンでは3種類しか基盤モデルが存在しません

![スクリーンショット 2023-12-02 14.56.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/aeb9c514-691e-e53b-7436-a95e26a931d9.png)

画像生成なども実行したいので、バージニア北部リージョンに変更しましょう

右上の「東京」をクリックして出てくるドロップダウンから「バージニア北部」を選択します

![スクリーンショット 2023-12-02 14.58.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/a0c152a7-a834-f15b-b351-bc40c8b37d87.png)

バージニア北部では全てのモデルが選択可能です

![スクリーンショット 2023-12-02 14.59.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/184d0f8c-9443-3761-866e-3e82344835b1.png)

## モデルアクセスの要求

最初の状態ではどのモデルも使えない状態です

モデルアクセスを要求し、使えるようにします

本記事では Amazon 提供のモデルについてアクセスを要求します

Base Models 一覧の右上にある Manage model access をクリックします

![スクリーンショット 2023-12-02 15.03.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/f3f0ae66-95ba-56b8-e0f7-24dc5798762b.png)

各モデルの右端にある「EULA」は「End-User License Agreement = 使用許諾契約」です

クリックすると、個別の契約内容が確認できます

Amazon 提供のモデル場合、以下のような文言が表示されます

```
Your use of this Service is governed by the terms of the AWS Customer Agreement
(h9ps://aws.amazon.com/agreement) or other agreement with AWS governing your use of AWS
services, including specific terms that apply to this Service set forth in Service Terms
(h9p://aws.amazon.com/serviceterms).
```

AWS の規約に準じている、というような事が書かれています

契約内容を確認してから、使用したいモデルにチェックを付けます

![スクリーンショット 2023-12-02 15.02.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/1b861902-3765-f488-2b1b-5bea678aa6de.png)

:::note warn
画像では `Titan Text G1 - Lite` を選択していますが、 Lite だとチャットができなかったので `Titan Text G1 - Express` を選択しまししょう
:::

:::note warn
モデルによっては詳細な利用目的の入力を要求されます
:::

最下部 Request model access をクリックします

![スクリーンショット 2023-12-02 15.03.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/2e9e5d72-7ca7-158e-bea8-20b69da5bb9f.png)

Amazon 提供モデルの場合、すぐに使用できるようになります

![スクリーンショット 2023-12-02 15.48.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/6a9f5730-36d5-87ce-eb7f-48744bba6da1.png)

## 生成 AI をプレイグラウンドから試す

### 画像生成

左メニュー「Playgrounds」の「Image」をクリックします

画像生成のプレイグラウンド（遊び場 = 試しに使って結果を見る事ができる場所）が表示されます

![スクリーンショット 2023-12-02 15.09.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/a73d42fb-8ac3-788e-3928-7c573984866b.png)

左上「Select model」をクリックし、使用するモデルを選択します

![スクリーンショット 2023-12-02 15.10.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/4d4b2750-8c9b-fe2b-b059-4ec94b16f8f0.png)

Titan Image generator による画像生成の準備ができました

![スクリーンショット 2023-12-02 15.11.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/f4621641-718f-ef87-3f2d-d76cad41b3e6.png)

「Generate」（生成）モードで左下にテキストを入力し「Run」をクリックすると、数分で画像が生成されます

以下の例は「Greetings Bumble Bee」=「挨拶する熊ん蜂」です

:::note info
残念ながら日本語は正しく認識してくれません

日本語から画像生成したい場合は Translate と組み合わせましょう
:::

![スクリーンショット 2023-12-02 15.19.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/fe5b9d68-0840-2ccb-1224-6b58da406da2.png)

「Edit」（編集）モードで画像の一部を編集してみます

適当な画像をアップロードし、編集したい部分を紫色の枠で指定します

編集の内容を入力して「Run」をクリックすると、結果が表示されます

私の顔を女性にしてみました

Negative Prompt に「Glasses」と入力して、メガネはかけないようにします

編集前
![スクリーンショット 2023-12-02 15.39.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/32ba56b0-ba9a-597a-2faa-6627a3a4d156.png)

編集後
![スクリーンショット 2023-12-02 15.39.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/3cccbed9-08e6-0be2-e0e8-b03ea765c367.png)

### テキスト

生成 AI によるテキスト生成を試します

左メニュー「Playgrounds」の「Text」をクリックします

![スクリーンショット 2023-12-03 9.13.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/0b5de702-26ff-59f0-30f8-96132442500a.png)

「Select model」をクリックします

「Amazon」|>「Titan Text G1 - Express v1」|>「On-demand」と選択し、「Apply」をクリックします

![スクリーンショット 2023-12-03 9.14.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/9e23b7fc-f0af-2e59-fe21-7c37151cb008.png)

残念ながら Titan は日本語に対応していないので、英語で語りかけてみましょう

:::note info
日本語を使いたい場合、後述する Anthropic の Claude を使います
:::

下のテキスト入力に言葉を入れて「Run」をクリックすると、答えてくれます

![スクリーンショット 2023-12-03 9.20.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/40016fee-1418-250e-512b-c336869fd525.png)

Elixir でのナップサック問題の解法を教えてくれました

### チャット

生成 AI とのチャットを試します

左メニュー「Playgrounds」の「Chat」をクリックします

![スクリーンショット 2023-12-02 15.43.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/8e9f5d3f-487c-4da5-92ff-be9b23c3541d.png)

「Select model」をクリックします

「Amazon」|>「Titan Text G1 - Express v1」|>「On-demand」と選択し、「Apply」をクリックします

![スクリーンショット 2023-12-02 15.46.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/74a5d463-505a-96c6-c90b-f2653069d7f0.png)

下のテキスト入力に質問を入れて「Run」をクリックすると、答えてくれます

![スクリーンショット 2023-12-03 9.11.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/a4b71e0a-9125-1489-e33d-583ef12b099f.png)

りんごの美味しい食べ方を教えてくれました

### 日本語チャット

日本語を使いたい場合、 Anthropic の Claude を使用します

左メニューから「Model access」を開き、「Manage model access」をクリックしましょう

![スクリーンショット 2023-12-03 9.26.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/d0469515-0631-9ee5-2171-d3f9f0708982.png)

デフォルトでは左側のチェックボックスが押せないようになっています

「Submit use case details」=「用途の詳細を提出する」をクリックすると以下のような入力フォームが表示されるので、自分の会社名、Webサイト、業種、対象ユーザー、利用目的を入力して「Submit」をクリックします

![スクリーンショット 2023-12-03 9.26.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/ad30e5fd-0ace-1332-8227-fab88fb0b921.png)

すると、チェックボックスが入力可能になるのでチェックして最下部の「Save changes」をクリックします

![スクリーンショット 2023-12-03 9.32.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/2575013c-2a28-1dc5-3e26-c4f8b4b2ef96.png)

選択したモデルが「In Progress」の状態に変化します

![スクリーンショット 2023-12-03 9.32.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/11fb2461-879b-f420-6f50-8a0c5d7d5613.png)

しばらくすると、「Access granted」の状態になり、使用可能になります

![スクリーンショット 2023-12-03 9.38.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/377e5a7e-aa49-3f41-1c91-ab0cfac56798.png)

左メニューから「Playgrounds」の「Chat」を開きましょう

「Select model」を開いて、「Anthropic」の「Claude 2.1」を選んで「Apply」をクリックします

![スクリーンショット 2023-12-03 10.17.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/deb09377-9254-fc3c-ec16-3a34f390e91c.png)

ちゃんと「銀河鉄道の夜」について日本語で受け答えしてくれました

![スクリーンショット 2023-12-03 10.20.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/cd9b0ab8-bc07-5ff4-d271-e0e7e985c705.png)

## Elixir による実装

以下の記事で Elixir というプログラミング言語から Bedrock を呼び出し、 チャットや画像生成を実行しています

https://qiita.com/RyoWakabayashi/private/bb85dd2286420205e2da

API の呼び出し方は共通なので、多言語での実装にも参考になると思います
是非、見てください
（そしてあわよくば Elixir の世界へ）

## まとめ

Amazon Bedrock を使って生成 AI による画像生成やチャットを試す事ができました

今後もプロバイダーやモデルが増えていくと思われるので、楽しみですね