ひとことで言うと
プロンプト本文・変数・推論パラメータ・呼ぶモデルを1組にして、名前と版を持つ Bedrock リソースにするものです。アプリ側は文字列を持たず、Converse の modelId にプロンプトの ARN を渡して呼びます。
要するに、ストアドプロシージャです。SQL 文をアプリのコードに埋め込むのをやめて、名前付きの手続きとしてサーバ側に置き、呼び出し側は名前とパラメータだけ渡す——あの構図がそのままプロンプトに来ています。プロンプトを直したのにアプリを再デプロイする、という往復が消えるのが本質で、「プロンプトを綺麗に保管する場所」ではありません。
なぜ生まれたか
プロンプトは、動くコードのうち最も頻繁に変わるのに、最もバージョン管理から漏れやすい部分です。文字列としてアプリに埋まっていると、次のことが全部アプリ側の都合になります。
| 埋め込み文字列でやっていたこと | Prompt management に移すと |
|---|---|
| プロンプトを1文字直すたびにアプリを再デプロイ | プロンプトの版を切り、アプリが指す ARN のバージョンを変えるだけ |
| モデルID・temperature・maxTokens がプロンプトと別の場所にある | 同じバリアントの中に同居する(プロンプトと推論設定は一体で初めて再現する) |
| 案A・案Bの比較が「コメントアウトして戻す」 | バリアントを最大3つ並べて同じ変数で走らせる |
| 「先週の出力が良かった」に戻せない | バージョンは作成時点のスナップショットとして残る |
年表の形で示せる公開日付が公式ドキュメント側に無いため、ここでは経緯の構造だけ置きます。ドラフト(DRAFT)は書き換わり続け、バージョンはスナップショットとして固定される——この2層構造が、上の全部を支えている唯一の仕掛けです。
何に使うか
| 用途 | 使い方 | 関連ドメイン |
|---|---|---|
| プロンプトの外部化 | CreatePrompt で作成。応答は DRAFT 版の ID / ARN を返す | D1 |
| 変数によるテンプレート化 | 本文に {{variable}}(二重波括弧)を書き、実行時に promptVariables で埋める | D1 |
| 案の比較 | プロンプトビルダーの Compare variants(最大3つ)で同じ入力を流して見比べる | D1 / D5 |
| 本番への切り出し | 満足した時点で Create version。番号は 1 から採番される | D1 |
| アプリからの呼び出し | Converse / ConverseStream / InvokeModel の modelId にプロンプト ARN(:VERSION 付き)を渡す | D2 |
| ワークフローへの組み込み | Amazon Bedrock Prompt Flows の prompt ノードに promptArn で参照させる | D1 / D2 |
| エージェント向けの下書き | バリアントに genAiResource(agent)を指定して、エージェント用プロンプトとして保持する | D2 |
| 版の差分確認 | Compare versions で、どの版から挙動が変わったかを突き合わせる | D5 |
| 保管時の暗号化統制 | プロンプト単位でカスタマー管理 KMS キーを指定(未指定なら AWS 管理キー) | D3 |
試験でどう問われるか
プロンプトを「アプリの外に出す」要件が書かれたら、まずここです。逆に、プロンプトの中身の書き方(chain-of-thought・出力フォーマット指定)を問う設問では主役になりません。D5 では「どの版から壊れたか」の切り分け手段として出ます。
| 問われ方 | 正解に寄る条件 | 引っかけの選択肢 |
|---|---|---|
| 「プロンプト改善のたびにアプリを再デプロイしていて回らない」 | プロンプトと推論設定をアプリから外し、バージョンを切って ARN で参照する | プロンプトを S3 / DynamoDB / Parameter Store に置いて起動時に読む案(推論設定とセットにならず、テストも比較もできない) |
| 「複数のプロンプト案から1つ選びたい」 | その場で出力を見比べて選ぶ→ Compare variants(最大3つ) | 同じシナリオでも、スコアを付けて定量比較・回帰させたいなら Bedrock Model Evaluations 側が正解。「見比べる」か「採点する」かで割れる |
| 「本番の応答が急に変わった。原因の切り分け」 | 直前に切り替えたプロンプトのバージョンを比較して差分を特定する(D5.2) | CloudWatch のレイテンシメトリクスを見る(品質の変化は見えない) |
| 「プロンプトを一元管理しつつ、ガードレールも効かせたい」 | 呼び出し時に guardrailConfig を付ける。プロンプト全体に効く(guardContent ブロックを指定した場合はその部分だけ) | 「Prompt management に登録しただけでガードレールが適用される」 |
| 「誰がプロンプトを変更したか監査したい」 | プロンプトは Bedrock のリソースなので、IAM と CloudTrail の対象になる(D1.6 / D3.3) | 「プロンプト本文の中に変更履歴コメントを書く」 |
| 「短いプロンプトを対象モデル向けに手早く書き直したい」 | プロンプト最適化(OptimizePrompt)。おおむね 1k トークン以下の単一プロンプト・単一モデル向けの発見的な書き換え | 「最適化が評価データを使って複数モデル横断で改善してくれる」(単純最適化は評価データを使わず、複数モデルにも対応しない) |
| 「エージェントに使うプロンプトを Prompt management で管理して API から実行したい」 | バリアントに agent を指定したプロンプトはコンソールでしかテストできない。API では InvokeAgent の inputText に本文を入れる | 「agent 指定のプロンプト ARN を Converse の modelId に渡す」 |
1問拾える境目: Converse にプロンプト ARN を渡すとき、system / inferenceConfig / toolConfig / additionalModelRequestFields は同時に指定できません。これらは「プロンプト側が持っているもの」だからです。messages だけは指定でき、その場合プロンプトに定義されたメッセージの後ろに追記されます(置き換えではありません)。「呼び出し側で system を上書きする」設計は、この経路では成立しません。
実務でどう使うか
試験ガイドの語と、実装のあいだに溝がある箇所です。公式試験ガイドのスキル 1.6.3 は「Amazon Bedrock Prompt Management to create parameterized templates and approval workflows」——承認フローと明記しています。ところが Bedrock のユーザーガイド側には、承認ワークフローという機能の記述が見当たりません。
したがって、ここは「バージョンを切って動かないものにする」+「IAM で誰が本番エイリアスを差し替えられるかを絞る」+「CloudTrail で変更を追う」の組み合わせを、承認フローと呼んでいると読むのが妥当です。存在しない画面を探さないでください。設問で「承認フロー」と書かれていたら、探すのは版・権限・監査の3点セットです。
{{variable}}は二重波括弧です。 実行時はpromptVariables={"{{variable_name}}": {"text": "値"}}の形で渡します。コンソールのテスト値は保存されません(テスト用の一時値)- テンプレート型は
TEXTとCHATの2つ。CHATは Converse 対応モデル限定で、プロンプトキャッシュを使うならCHATが必須です。キャッシュ範囲はツールのみ/ツール+システム指示/ツール+システム指示+メッセージから選びます(対応はモデルによる) - 比較モードで「Save as draft」を押すと、選ばなかったバリアントは削除されます。 3案並べて1つを採用した瞬間に残り2案が消えるので、捨てたくない案は先にバージョンを切っておきます
- 基本推論パラメータは
maxTokens/stopSequences/temperature/topPの4つだけ。top_kのようなモデル固有パラメータはadditionalModelRequestFieldsに JSON で入れます。ここに基本パラメータを書いてもコンソールで設定した値は上書きされません - バージョンを切っただけでは本番は変わりません。 アプリが参照する ARN のバージョン部分を切り替えて初めて反映されます。ロールバックも同じ操作です
- プロンプト最適化は英語での実行が推奨されています。 日本語プロンプトに掛けたときの品質は公式が保証していません
アプリ側の「切り替えスイッチ」は自分で用意する必要があります。バージョンは不変のスナップショットとして積み上がりますが、どの版を使うかを指す仕組み(設定値・環境変数・AppConfig など)はアプリ側の設計です。ARN をコードに直書きすると、プロンプトを外部化した意味が薄れます——結局、版を上げるたびに再デプロイになるからです。
取り違えやすいもの
| 迷う相手 | 切り分けの一言 |
|---|---|
| Amazon Bedrock Prompt Flows | Prompt Management は部品1個(プロンプト+推論設定)。Flows は部品を繋ぐ配線。Flows の prompt ノードは Prompt Management のプロンプトを参照でき、逆はない |
| Amazon Bedrock Model Evaluations | こちらは「見比べて人が選ぶ」。Model Evaluations は「指標でスコアを付けてジョブとして採点する」。主観の比較か、記録に残る採点か |
| プロンプトキャッシュ | 保存されるものが違う。Prompt Management は設計時の定義、プロンプトキャッシュは推論時の前置きトークン。目的も版管理とコスト削減で別 |
| Amazon Bedrock Guardrails | Guardrails は入出力の内容を検閲する。Prompt Management は指示そのものを管理する。呼び出し時に組み合わせて使う関係 |
| プロンプトルーター | ルーターは「どのモデルに投げるか」を実行時に決める。Prompt Management は「何をどう聞くか」を設計時に固定する |
| AWS AppConfig | AppConfig はコード変更なしで設定値を差し替える一般の仕組み(D1.2 のモデル動的切替)。プロンプト本文とその版は Prompt Management 側が持つ |
想起チェック
Q1. 「3つのプロンプト案を比べたい」。Compare variants と Bedrock Model Evaluations、どちらが正解になりますか。
その場で出力を見て人が1つ選ぶなら Compare variants、指標でスコアを付けて記録・回帰させたいなら Model Evaluations です。設問に「評価指標」「レポート」「継続的な品質ゲート」が出たら後者に寄ります。
Q2. `Converse` にプロンプト ARN を渡すとき、同時に指定できないフィールドは何ですか。
system / inferenceConfig / toolConfig / additionalModelRequestFields です。プロンプト側の定義に含まれているためで、messages だけは指定でき、その場合は既定のメッセージの後ろに追記されます。
Q3. プロンプトのバージョンを新しく作りました。本番の挙動はいつ変わりますか。
アプリが参照する ARN のバージョンを切り替えたときです。バージョンを作るだけでは何も切り替わりません。ドラフトは書き換わり続け、バージョンは不変のスナップショットとして残ります。
Q4. エージェントを指定したプロンプトを API からそのまま実行できますか。
できません。 バリアントに genAiResource(agent)を指定したプロンプトはコンソールでのみテストでき、API ではプロンプト本文を InvokeAgent の inputText に入れる形になります。