Contents
1️⃣ Bedrock の概要とプロンプト設計の重要性
AWS Bedrock は、Anthropic Claude、Amazon Titan、Meta LLaMA など複数の基盤モデル(Foundation Model)へ統一的にアクセスできるマネージドサービスです。
- 統合エンドポイント:同一 API (bedrock-runtime) でモデルを切り替えられるため、コードの差分が最小化されます。
- プロンプトエンジニアリング:LLM が期待通りの出力を生成するかは、入力テキスト(=プロンプト)の設計に大きく依存します。
公式ドキュメント: https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html
2️⃣ 効果的なプロンプト設計の基本原則
| 原則 | 内容・ポイント |
|---|---|
| 一貫性 | 同じタスクでは同様の指示構造を保ち、モデルがパターンを学習しやすくします。 |
| 明確さ | 曖昧な表現はノイズになりやすいので、具体的かつ限定的に書きます(例:`「売上合計」ではなく「月別売上合計」)。 |
| 簡潔さ | 必要以上の情報はトークン消費を増やし、生成コスト・レイテンシが上がります。 |
2‑1 推論パラメータの役割と調整例
| パラメータ | 効果 | 推奨設定例(タスク別) |
|---|---|---|
temperature |
出力のランダム性/創造性。0 に近いほど決定的、1 に近いほど多様。 | 要約:0.2 アイデア創出:0.8 |
top_p |
確率上位 p% のトークンに限定し、多様性と品質のバランスを取ります。 | すべてのタスクで 0.9‑1.0 が無難 |
maxTokens(または max_tokens) |
生成できる最大トークン数。コスト管理・応答速度に直結します。 | 要約:150 トークン以内 チャットボット:200 トークン以内 |
※モデルごとにサポートしているパラメータや上限は異なるため、最新情報は Bedrock Model Parameters を参照してください。
3️⃣ ハンズオン:コンソールでプロンプトを試す
手順概要
- サービス選択
Amazon Bedrock → Prompt Studioに移動。 - モデル選択(ドロップダウン)例: Claude‑v2、Titan-text-express-v1。
- プロンプト入力
text
Instruction: 以下の顧客レビューを要約してください。
Context:
「商品Aはデザインが良く、使い勝手も◎。ただし価格がやや高め。」
- パラメータ設定(例)
temperature=0.3, top_p=0.9, maxTokens=120 - 実行 →
Run Promptボタンで結果タブに生成テキストが表示されます。
注意点
| 項目 | ポイント |
|---|---|
| 入力サイズ | Bedrock のモデルは 最大 8,192 トークン(※モデルごとに上限は異なる)までしか受け付けません。公式ページで最新のトークン上限を必ず確認してください。 |
| IAM 権限 | bedrock:InvokeModel が最低限必要です。過剰な権限付与は避け、対象モデル ARN のみ許可します(下記例参照)。 |
4️⃣ Boto3 を使った API 呼び出しサンプル
4‑1 リクエスト作成とエンコード
- ポイント:
client.invoke_modelはbodyに バイナリ(bytes)を受け取ります。 - 注意:Boto3 が自動で Base64 エンコードするわけではなく、API が Base64 文字列 を期待します。そのため、必要に応じて手動でエンコードしてください。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import boto3 import json import base64 # 1. クライアント作成(リージョンは使用環境に合わせる) client = boto3.client('bedrock-runtime', region_name='us-east-1') # 2. プロンプト構築 prompt = ( "Instruction: 次の文章を要約してください。\n" "Context: 「新製品の販売開始に伴い、初月は売上が30%増加しました。」" ) payload = { "prompt": prompt, "temperature": 0.3, "topP": 0.9, "maxTokens": 120, "stopSequences": [] } # 3. JSON → bytes → Base64 エンコード json_bytes = json.dumps(payload).encode('utf-8') body_base64 = base64.b64encode(json_bytes) # API が要求する形式 # 4. モデル呼び出し response = client.invoke_model( body=body_base64, modelId='anthropic.claude-v2', contentType='application/json' ) |
4‑2 レスポンス取得とエラーハンドリング
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import botocore.exceptions try: # 5. バイナリ結果をデコード → JSON に変換 result_bytes = response['body'].read() result_str = base64.b64decode(result_bytes).decode('utf-8') result_json = json.loads(result_str) generated_text = result_json.get('completion') print("生成結果:", generated_text) except client.exceptions.ThrottlingException as e: print("[リトライ推奨] スロットリングが発生しました:", e) except client.exceptions.ResourceNotFoundException as e: print("モデル ID が見つかりません:", e) except botocore.exceptions.ClientError as e: print("API 呼び出しエラー:", e.response['Error']['Message']) except Exception as e: print("予期しない例外:", e) |
ポイント:
invoke_modelの戻り値は Base64 エンコードされたバイナリです。必ずデコードしてから JSON を解析してください。
5️⃣ モデル別プロンプトフォーマットと高度テクニック
5‑1 主なモデルの推奨フォーマット
| モデル | 推奨フォーマット例 |
|---|---|
| Claude (Anthropic) | Human: <指示>\nAssistant:(対話形式) |
| Titan (Amazon) | { "prompt": "<指示>", "temperature": 0.2 }(単一テキスト) |
| LLaMA (Meta) | <s>[INST] <指示> [/INST](システム+ユーザーの二段階構造) |
各モデルの公式プロンプト仕様は Bedrock Model Prompt Guide に詳述されています。
5‑2 Few‑shot と Chain‑of‑Thought(CoT)の実装例
Few‑shot(Claude 用)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Human: 次の数学問題を解いてください。 Problem: 12 × 15 = ? Answer: Human: 問題と答えのペアです。 Problem: 7 + 5 = ? Answer: 12 Problem: 9 × 3 = ? Answer: 27 Problem: 12 × 15 = ? Answer: |
Chain‑of‑Thought(Titan 用)
|
1 2 3 4 5 6 |
{ "prompt": "問題: 125 ÷ 5 を解く。ステップバイステップで考えてください。\nStep 1:", "temperature": 0.4, "maxTokens": 200 } |
ポイント:Few‑shot は「入力例+出力例」を数件示すだけでパターン学習を促し、CoT は途中経過を書かせることで論理的正確性が向上します。実装時はトークン消費に注意してください。
6️⃣ テスト・チューニング、セキュリティ、コスト最適化
6‑1 プロンプト評価指標
| 指標 | 測定方法 |
|---|---|
| 正確性 | 人手で作成した期待回答と比較(BLEU・ROUGE・Exact Match) |
| レイテンシ | invoke_model の往復時間をミリ秒単位で計測 |
| トークン消費 / コスト | 実際に使用された入力+出力トークン数 × 料金表(USD/1M トークン) |
評価サンプル
| バリエーション | BLEU | 平均レイテンシ (ms) | 1,000 リクエスト当たりの費用 (USD) |
|---|---|---|---|
| 基本プロンプト | 0.68 | 210 | 0.42 |
| Few‑shot | 0.78 | 260 | 0.48 |
| CoT | 0.81 | 300 | 0.55 |
結論:正確性が向上するほどトークン数・レイテンシは増えるため、ビジネス要件に合わせたバランス調整が必須です。
6‑2 最小権限 IAM ポリシー例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["bedrock:InvokeModel"], "Resource": [ "arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-v2", "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-express-v1" ] } ] } |
- ポイント
bedrock:maxTokensのような IAM 条件キーは現時点では存在しないため、ポリシーでトークン上限を制御することはできません。代わりにアプリケーション側でmaxTokensパラメータを適切に設定してください。- 不要なモデル ARN を除外すれば、誤った呼び出しや予期せぬコスト発生を防げます。
6‑3 コスト削減のベストプラクティス
maxTokensのタスク最小化:実際に必要なトークン数だけ上限を設定(例: 要約は 150、質問応答は 200)。- モデル選択の見直し:同等品質であれば、料金が低めのモデル(例: Titan‑text‑express)へ切り替える。
- キャッシュ活用:頻繁に同じプロンプトを送信するケースは結果を保存し、再利用できるようにする。
7️⃣ まとめ
- Bedrock はマルチモデル環境へのシームレスなアクセス基盤であり、プロンプト設計が成果の鍵です。
- 一貫・明確・簡潔 の原則とパラメータ調整(
temperature,top_p,maxTokens)を組み合わせて、タスクごとの最適化を図ります。 - コンソールでも Boto3 でも 正しいエンコード手順 と 最小権限 IAM を守れば、安全かつコスト効率の高い運用が可能です。
詳細な API リファレンスは公式ドキュメント https://docs.aws.amazon.com/bedrock/latest/APIReference/ を参照してください。
本稿は 2026 年 4 月時点の情報に基づき作成しています。AWS のサービス内容や料金は予告なく変更されることがありますので、最新情報をご確認ください。