Contents
1. Amazon Bedrock の概要と日本語対応モデル
Amazon Bedrock は、Anthropic・Meta・Mistral・Amazon 自社など複数ベンダーが提供する大規模言語モデル(LLM)を 単一の API で呼び出せるフルマネージドサービスです。日本語処理に特化したモデルも多数用意されており、以下のような特徴があります。
| モデル | ベンダー | アーキテクチャ | 日本語対応レベル | 主な利用シーン |
|---|---|---|---|---|
| Claude 3 Haiku | Anthropic | Transformer + RLHF | トークン化が最適化され、敬体・常体の切替が自然 | カスタマーサポート、要約 |
| Titan Text G1 | Amazon | Mixture‑of‑Experts (MoE) | 大規模日本語コーパスで事前学習済み。トークン効率が高い | ビジネスレポート生成、コード補完 |
| Llama 3 8B(日本語チューニング版) | Meta | LLaMA‑2 系列 | 日本語データでファインチューン済み。低遅延かつ省コスト | チャットボット、教育コンテンツ |
ポイント
- モデル選択は「応答速度」「推論コスト」「精度」のトレードオフを基に決定する。
- 各モデルの日本語トークン上限や料金は公式ドキュメントで随時確認してください。
2. Prompt Engineering の基本概念と実装例
2.1 三層構造 ― 指示・コンテキスト・例示
公式ガイド(Prompt Engineering Guide – Amazon Bedrock)では、プロンプトを 3 つの役割ベース要素 に分離すると出力が安定しやすいとされています。
| 要素 | 内容 | 設計上の留意点 |
|---|---|---|
| 指示 (Instruction) | 「何をさせたいか」を一文で明確化。日本語では常体がトークン数削減に有利。 | 30 字以内に収め、曖昧表現は避ける。 |
| コンテキスト (Context) | 背景情報・制約条件を箇条書きで提供。長すぎるとトークン上限に達するので要点だけ。 | 必要最低限の項目に絞り、JSON の metadata でも付与可。 |
| 例示 (Examples / Few‑shot) | 入出力ペアを 1〜3 件提示し、期待フォーマットを学習させる。 | 例は実際のタスクと同質であることが重要。 |
2.2 日本語プロンプトテンプレート(コード例)
|
1 2 3 4 5 6 |
[指示] 次の文章を要約してください。 [コンテキスト] ・文字数は150文字以内に収める。・敬体で出力すること。 [例示] 入力: 「本日は晴天です…」 出力: 「晴れた日でした。」 |
- 実装上のヒント
- Python の
json.dumps(..., ensure_ascii=False)を使用すると、UTF‑8 の日本語がエスケープされずに送信できます。 - Bedrock SDK は文字列そのままでも受け付けます(Base64 エンコードは必須ではありません)。
3. 現在提供中の機能と今後のロードマップ ― Prompt Optimization
2024 年 10 月現在、Prompt Optimization(プロンプト自動最適化)機能は ベータプレビュー段階 にあり、正式リリース日は未定です。公式発表(Bedrock Roadmap – Amazon Web Services)によると、2025 年下半期に GA 予定とされています。
3.1 現行ベータで利用できる主なパラメータ
| パラメータ | 説明 | 推奨範囲 |
|---|---|---|
maxCandidates |
生成する最適化候補数(最大 10) | 3〜5 がコストと品質のバランスが良好 |
temperature |
出力多様性制御 | 0.1 ~ 0.4(要約系タスクは低め) |
topP |
トークン確率上位何%を採択するか | 0.8 ~ 0.95 推奨 |
注意
- ベータ版ではリクエストボディに Base64 エンコードは不要。JSON をそのままinvoke_modelに渡すだけで動作します(公式サンプル参照)。
- 将来 GA になる際にエンコーディング要件が変わる可能性があるため、実装は 設定ファイル化 して柔軟に切り替えられるよう設計してください。
3.2 ベータ利用手順(Python / boto3)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import boto3, json client = boto3.client("bedrock-runtime", region_name="ap-northeast-1") payload = { "prompt": "以下の文章を敬体で120文字以内に要約してください。", "maxTokens": 200, "temperature": 0.2, "topP": 0.9, "candidateCount": 5 # ベータ版ではこのキー名が使用されます } response = client.invoke_model( modelId="anthropic.claude-3-haiku", body=json.dumps(payload, ensure_ascii=False).encode("utf-8"), contentType="application/json", accept="application/json" ) result = json.loads(response["body"].read()) print(result.get("completion")) |
実装上のベストプラクティス
1.ensure_ascii=Falseによる UTF‑8 出力を必ず行う。
2.candidateCount(または将来のmaxCandidates)は環境変数で管理し、リリース時に差し替え可能にしておく。
4. エンコードと文字化け回避策
4.1 UTF‑8 のみを使用することが原則
- Python:
str.encode("utf-8") - Node.js:
Buffer.from(str, "utf8")
JSON にシリアライズするときは、必ず ensure_ascii=False(Python)または { encoding: 'utf8' }(Node.js)を指定し、日本語がエスケープされない形で送信します。
4.2 Base64 エンコードは「任意」
| ケース | 推奨エンコーディング |
|---|---|
| 通常のテキストプロンプト | 不要(そのまま JSON) |
| バイナリデータや特殊文字が混在する場合 | Base64 エンコードを検討(API では application/octet-stream が受け付けられる) |
誤解しやすい点
Bedrock の公式サンプルは、エスケープ問題回避のために Base64 を示していますが、実際には UTF‑8 JSON が推奨 です。過剰なエンコードはデバッグコストを増大させます。
5. ユースケース別プロンプトテンプレートと高度テクニック
| ユースケース | テンプレート例(日本語) | 補足ポイント |
|---|---|---|
| 要約 | 「以下の文章を120文字以内で敬体に要約してください。」\n入力: {本文} |
温度 0.2、maxTokens を 150 程度に設定 |
| 質問応答 | 「次の文書を読んで質問に答えてください。回答は箇条書きで」\n文書: {テキスト}\n質問: {Q} |
Few‑shot で 2 件例示すると精度向上 |
| コード生成 | 「Python で CSV を読み込む関数を書いてください。」 |
temperature 0.0 に設定し決定的出力を確保 |
| エージェント指示 | 「顧客情報を取得し、次の手順でレポートを作成してください。① データ抽出 ② 集計 ③ グラフ化」 |
Chain‑of‑Thought(CoT)指示: 「ステップバイステップで考えてください」 |
5.1 Few‑shot と CoT の併用例
|
1 2 3 4 5 6 7 8 9 |
指示: 次の数式問題を解く際に、思考過程をすべて書き出してください。 例示: 入力: 「A社の売上は前年の1.2倍です。前年は5,000万円でした。」 出力: 1) 前年の売上 = 5,000 万円 2) 現在の売上 = 5,000 × 1.2 = 6,000 万円 3) 結果: 6,000 万円 入力: {問題文} |
- 温度は 0.1 ~ 0.3 に抑えると、論理的なステップが乱れにくい。
6. デバッグ・品質評価・セキュリティ対策
6.1 ログ取得とトークン使用量の可視化
| 手順 | 設定項目 |
|---|---|
| CloudWatch Logs | InvokeModel イベントをログストリームに送信。フィルターで modelId と promptLength を抽出。 |
| メトリクス | 名前空間 AWS/Bedrock の PromptTokensUsed、ResponseTokensGenerated をダッシュボード化。 |
| アラーム | 1 時間あたりのトークン使用量が閾値(例: 1 M トークン)を超えたら SNS 通知。 |
6.2 出力品質の定量評価
- BLEU:機械翻訳・要約の文字列一致度(Python
sacrebleu)。 - ROUGE‑L:長文要約で LCS を測る指標(
rouge_scoreライブラリ)。
|
1 2 3 4 5 |
from rouge_score import rouge_scorer scorer = rouge_scorer.RougeScorer(['rougeL'], use_stemmer=True) scores = scorer.score(reference, generated) print("ROUGE-L:", scores['rougeL'].fmeasure) |
6.3 PII 保護と暗号化
- 入力データのサニタイズ
-
正規表現や AWS Comprehend の PII 検出機能で個人情報をマスク。
-
通信の暗号化
-
Bedrock API は TLS 1.2 以上で自動暗号化。SDK の
verify=Trueがデフォルトです。 -
保存データの暗号化
-
S3 に結果を格納する際は SSE‑KMS を必ず有効化し、キー管理は AWS KMS で統一。
-
IAM 最小権限
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["bedrock:InvokeModel"],
"Resource": "*"
}
]
} - 必要なリソース以外へのアクセス権は付与しない。
7. まとめ(各章の要点)
| セクション | キーアクション |
|---|---|
| 1 概要 | モデル選定は「速度・コスト・精度」の3軸で比較。日本語対応レベルは公式ドキュメントで随時確認。 |
| 2 Prompt Engineering | 3層構造(指示・コンテキスト・例示)を徹底し、ensure_ascii=False で UTF‑8 JSON を送信。 |
| 3 Prompt Optimization | 現在はベータ版で利用可。Base64 エンコードは不要。設定は環境変数化して将来のリリースに備える。 |
| 4 エンコード | UTF‑8 が唯一推奨。Base64 は特殊ケースのみ使用。 |
| 5 テンプレート | ユースケース別テンプレート+Few‑shot・CoT の併用で品質向上。温度はタスクに合わせて調整。 |
| 6 デバッグ・セキュリティ | CloudWatch でトークン消費を監視、BLEU/ROUGE で出力評価、TLS+SSE‑KMS+最小権限で情報漏洩防止。 |
8. 参考情報(公式リンク)
| 内容 | URL |
|---|---|
| Amazon Bedrock 製品ページ | https://aws.amazon.com/jp/bedrock/ |
| Bedrock ユーザーガイド – Prompt Engineering | https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/prompt-engineering.html |
| Bedrock API リファレンス(invokeModel) | https://docs.aws.amazon.com/ja_jp/bedrock/latest/APIReference/API_runtime_InvokeModel.html |
| Prompt Optimization ベータ情報 | https://aws.amazon.com/jp/blogs/aws/amazon-bedrock-prompt-optimization-beta/ |
| Bedrock ロードマップ | https://aws.amazon.com/jp/bedrock/roadmap/ |
| AWS SDK for Python (boto3) – Bedrock Runtime | https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock-runtime.html |
| BLEU 計算ツール(sacreBLEU) | https://github.com/mjpost/sacrebleu |
| ROUGE‑L 実装(rouge_score) | https://github.com/google-research/google-research/tree/master/rouge |
本稿は 2024 年 10 月時点の公式情報に基づいて作成しています。サービス仕様や料金は変更される可能性があるため、導入前に最新ドキュメントを必ず確認してください。