本記事は「2025 Japan AWS Jr. Chanpions 夏のQiitaリレー」の38日目の記事です。
過去の投稿は以下をご覧ください!
はじめに
最近はAIのモデルも増え始めて、どのモデルを選んだらよいか悩んでいる方も多いかと思います。
つい最近だと、OpenAIのオープンウェイトモデルもBedrockやSageMaker AIで使えるようになったりと、今後もさらにモデル選定に困る方が増えそうな予感がしています。
そこで、先日初めてBedrockでのモデル選定を行う機会があったので、その際に行った手順を備忘録として残します。
目次
モデルの比較・選定手順
今回モデルの選定を行った手順としては以下になります。
-
絞り込みフェーズ
- ユースケースの洗い出し
- ユースケースを踏まえて実装における必要な条件の洗い出し
- 上記の条件に沿ったモデルの洗い出し
-
比較フェーズ
- 比較観点の洗い出し
- 比較観点の優先順位決め
- 上記を総合的に判断し、モデル決定
上記の手順を踏まえて、次章では具体例を踏まえてモデル選定をしていきます。
上記手順を利用した具体例
ここからは、本題である、具体例を挙げてモデルの比較・選定をしていきます。
今回は、5つの質問を出してMBTIを当てるアプリケーションのモデル選定をすることとします。
1. 絞り込みフェーズ
1-1. ユースケースの洗い出し
今回の簡易MBTI診断アプリケーションの要件を洗い出していきます。
- チャット形式
- 5問質問した後、簡易MBTIの結果を出す
- 利用者の想定は日本人
1-2. ユースケースを踏まえて実装における必要な条件の洗い出し
次に、ユースケースを踏まえて、実装において必要な条件を洗い出していきます。
- チャット形式のため、Streaming対応をしていること
- 日本語対応しているもの(日本語の違和感がない)
また、以下のような実装面の条件もこちらに加えていきます。
- 画像生成などは不要であるため、TEXTタイプのモデルであること
- ap-northeast-1で利用できるもの
1-3. 上記の条件に沿ったモデルの洗い出し
ここでは、上記で出した条件からモデルを洗い出していきます。
条件を改めてまとめると以下になります。
- チャット形式のため、Streaming対応をしていること
- 日本語対応しているもの(日本語の違和感がない)
- 画像生成などは不要であるため、TEXTタイプのモデルであること
- ap-northeast-1で利用できるもの
まずは、上記の条件(日本語対応は指定できないのでそれ以外)をCloudShellで出していきます。
aws bedrock list-foundation-models \
--region ap-northeast-1 \
--by-output-modality TEXT \
--query "modelSummaries[?responseStreamingSupported].[providerName,modelName,modelId]" \
--output table \
--no-cli-pager
実行すると以下が結果として出てきました。
------------------------------------------------------------------------------------------
| ListFoundationModels |
+-----------+---------------------------+------------------------------------------------+
| Amazon | Titan Text G1 - Express | amazon.titan-text-express-v1:0:8k |
| Amazon | Titan Text G1 - Express | amazon.titan-text-express-v1 |
| Amazon | Nova Pro | amazon.nova-pro-v1:0 |
| Amazon | Nova Lite | amazon.nova-lite-v1:0 |
| Amazon | Nova Micro | amazon.nova-micro-v1:0 |
| Amazon | Nova Sonic | amazon.nova-sonic-v1:0 |
| Anthropic| Claude Instant | anthropic.claude-instant-v1:2:18k |
| Anthropic| Claude Instant | anthropic.claude-instant-v1 |
| Anthropic| Claude | anthropic.claude-v2:1:18k |
| Anthropic| Claude | anthropic.claude-v2:1:200k |
| Anthropic| Claude | anthropic.claude-v2:1 |
| Anthropic| Claude 3 Haiku | anthropic.claude-3-haiku-20240307-v1:0 |
| Anthropic| Claude 3.5 Sonnet | anthropic.claude-3-5-sonnet-20240620-v1:0 |
| Anthropic| Claude 3 Sonnet | anthropic.claude-3-sonnet-20240229-v1:0:28k |
| Anthropic| Claude 3 Sonnet | anthropic.claude-3-sonnet-20240229-v1:0:200k |
| Anthropic| Claude 3 Sonnet | anthropic.claude-3-sonnet-20240229-v1:0 |
| Anthropic| Claude 3.5 Sonnet v2 | anthropic.claude-3-5-sonnet-20241022-v2:0 |
| Anthropic| Claude 3.7 Sonnet | anthropic.claude-3-7-sonnet-20250219-v1:0 |
| Anthropic| Claude Sonnet 4 | anthropic.claude-sonnet-4-20250514-v1:0 |
+-----------+---------------------------+------------------------------------------------+
出てきたモデルから、以下の言語対応表を参考に、日本語対応をしていないものを外していきます。
Titanは日本語がプレビュー版、Claudeはドキュメントに日本語言及がないモデルを除外していきます。またNova Sonicも会話型AIなので除外します。
結果、以下のモデルに絞り込むことができました。
- Amazonモデル
- Nova Pro
- Nova Lite
- Nova Micro
- Anrhopicモデル
- Claude 3.5 Sonnet v2
- Claude 3.7 Sonnet
- Claude Sonnet 4
また、会社のプロジェクトであれば、上記のモデルが自社の会社の規約に反していないかを確認しておきます。
ここでは、問題ないということを前提に進めていきます。
2. 比較フェーズ
2-1. 比較観点の洗い出し
ここからは比較フェーズに入ります。まずは比較観点を洗い出していきます。
- 回答の違和感のなさ
- コスト
- 応答速度
- クォータの上限
2-2. 比較観点の優先順位決め
先ほど洗い出した観点の中から、プロジェクトの方針等を踏まえて優先順位を決めていきます。
今回は、以下のような優先順位とします。
- 回答の違和感のなさ
- コスト
- クォータの上限
- 応答速度
2-3. 上記を総合的に判断し、モデル決定
次に、上記で決めた比較観点で比較をしていきます。
まずは回答の違和感の少なさの検証を、Bedrockのプレイグラウンドから行います。
下記のようなシステムプロンプトを用意し、比較していきます。
(本来は、モデルによってプロンプトを修正し、欲しい回答を得られるよう調整していくのが理想ですが、今回は簡易版のため同じプロンプトで比較しています。)
あなたは、MBTI認定ユーザーの資格保有者です。
あなたに与えられたタスクは、ユーザーにステップバイステップ(問い→回答を5回を行う)で5問質問を出して、その回答からユーザーのMBTIの結果を出すことです。
その際に、根拠も答えるようにしてください。
Nova Proで試してみたところ、ステップバイステップの指定を無視したり、はい・いいえでIとEの傾向が見えたりと、少し微妙な回答が返ってきます。
Nova Microだと、その辺の違和感が消えていそうです。
このように、モデルを一つずつ何度か試していき、結果を表にまとめていきます。
また、今回右側に応答速度も記載されているので、平均結果を表に入れていきます。
Nova Pro | Nova Lite | Nova Micro | Claude 3.5 Sonnet v2 | Claude 3.7 Sonnet | Claude Sonnet 4 | |
---|---|---|---|---|---|---|
回答の違和感のなさ | × | △ | ○ | ○ | ○ | ○ |
クォータ上限 | ||||||
コスト | ||||||
応答速度 | 3437 ms | 2686 ms | 818 ms | 2900 ms | 5155 ms | 5222 ms |
そして同様に、クォータの上限やコストも調べて埋めていき、表が完成しました。
Nova Pro | Nova Lite | Nova Micro | Claude 3.5 Sonnet v2 | Claude 3.7 Sonnet | Claude Sonnet 4 | |
---|---|---|---|---|---|---|
回答の違和感のなさ | × | △ | ○ | ○ | ○ | ○ |
クォータ上限 | オンデマンド 50 RPM 100 k TPM クロスリージョン 100 RPM 200 k TPM |
オンデマンド 100 RPM 100 k TPM クロスリージョン 200 RPM 200 k TPM |
オンデマンド 100 RPM 100 k TPM クロスリージョン 200 RPM 200 k TPM |
クロスリージョン 50 RPM 400 k TPM |
クロスリージョン 50 RPM 50 k TPM |
クロスリージョン 200 RPM 200 kTPM |
コスト | 1,000 入力トークンあたりの料金:USD 0.00096 1,000 入力トークンあたりの料金 (キャッシュ読み取り):USD 0.00024 1,000 出力トークンあたりの料金:USD 0.00384 1,000 入力トークンあたりの料金 (バッチ):USD 0.00048 1,000 出力トークンあたりの料金 (バッチ):USD 0.00192 |
1,000 入力トークンあたりの料金:USD 0.000072 1,000 入力トークンあたりの料金 (キャッシュ読み取り):USD 0.000018 1,000 出力トークンあたりの料金:USD 0.000288 1,000 入力トークンあたりの料金 (バッチ):USD 0.000036 1,000 出力トークンあたりの料金 (バッチ):USD 0.000144 |
1,000 入力トークンあたりの料金:USD 0.000042 1,000 入力トークンあたりの料金 (キャッシュ読み取り):USD 0.0000105 1,000 出力トークンあたりの料金:USD0.000168 1,000 入力トークンあたりの料金 (バッチ):USD0.000021 1,000 出力トークンあたりの料金 (バッチ):USD0.000084 |
入力トークン 1,000 個あたりの価格:0.003 USD 1,000 出力トークンあたりの料金:0.015 USD 1,000 入力トークンあたりの料金 (バッチ):0.0015 USD 1,000 出力トークンあたりの料金 (バッチ):0.0075 USD 1,000 入力トークンあたりの料金 (キャッシュ書き込み):該当なし 1,000 入力トークンあたりの料金 (キャッシュ読み取り):該当なし |
入力トークン 1,000 個あたりの価格:0.003 USD 1,000 出力トークンあたりの料金:0.015 USD 1,000 入力トークンあたりの料金 (バッチ):該当なし 1,000 出力トークンあたりの料金 (バッチ):該当なし 1,000 入力トークンあたりの料金 (キャッシュ書き込み):0.00375 USD 1,000 入力トークンあたりの料金 (キャッシュ読み取り):0.0003 USD |
入力トークン 1,000 個あたりの価格:0.003 USD 1,000 出力トークンあたりの料金:0.015 USD 1,000 入力トークンあたりの料金 (バッチ):該当なし 1,000 出力トークンあたりの料金 (バッチ):該当なし 1,000 入力トークンあたりの料金 (キャッシュ書き込み):0.00375 USD 1,000 入力トークンあたりの料金 (キャッシュ読み取り):0.0003 USD |
応答速度 | 3437 ms | 2686 ms | 818 ms | 2900 ms | 5155 ms | 5222 ms |
上記の表を踏まえて、回答の違和感のなさが○、クォータ上限が高く、コストが低く、応答速度も低い、Nova Microを選定という形になりました。
おわりに
今回は、ファインチューニングや評価テストを細かく行っていない簡易的なものになりますが、モデル選定のヒントとなれば幸いです。
また、筆者はAIのスペシャリティではないため、モデルの選定方法について、こうした決め方もあるよというものがあればコメントいただけますと幸いです。
最後までご覧いただきありがとうございました!