Bedrock Prompt Managementでキャラクターのシステムプロンプトをバージョン管理してみた
こんにちは、ゲームソリューション部のsoraです。
今回は、Bedrock Prompt Managementでキャラクターのシステムプロンプトをバージョン付きで管理し、Lambda(Go)から呼び出すところまでを試してみました。
Bedrock Prompt Managementとは
Bedrockコンソール上でプロンプトを作成・バージョン管理できるマネージド機能です。
プロンプト本文・モデル・推論パラメータをまとめて1つのリソースとして扱い、バージョン番号付きのARNでアプリから利用します。
アプリのコードを変えずにプロンプトを差し替えられるのが特徴で、プロンプトのデプロイをコード本体と切り離せます。
検証構成
今回作るアプリの構成は以下です。

Flutterで作ったチャット画面から、API Gateway → Lambda(Go)経由でBedrockに問い合わせる構成です。
キャラクター(ミケとポチ)ごとにシステムプロンプトをPrompt Managementで管理し、LambdaにはキャラID→プロンプトARNのマップを環境変数で渡します。
AWSリソースはBedrock周り以外をTerraformで構築しましたが、そちらの説明は割愛します。
Prompt Managementでキャラクター用プロンプトを作る
プロンプト作成
AWSコンソールにて、Bedrock → プロンプト管理 → プロンプトを作成 で作成画面に進みます。

プロンプトの名前や説明などを入力します。
KMSによる暗号化を有効にすると、Lambda側にてKMS周りの権限が必要になります。
検証のためデフォルトのままとしました。

システム命令の設定
作成を押すとプロンプトビルダーに遷移します。

システム命令にキャラクターの設定を入力します。
ユーザーメッセージを変数にしておくと、テストウィンドウから値を差し込んで動作確認できます。


設定 - オプションにて、生成AIのリソースとしてモデルを選択し、推論パラメータを設定することもできます。
バージョン発行とARNの取得
設定が終わったら、ドラフトを保存 → バージョンを作成 でバージョンを発行します。
発行後の詳細画面に表示されるプロンプトバージョンARNをコピーします。
末尾の:xがバージョン番号です。
LambdaからConverse APIで呼び出す
ここからはアプリ側です。
Converse APIは、Bedrockの各種基盤モデルを統一的なリクエスト・レスポンス形式で呼び出せるAPIです。
従来のInvokeModelがモデルごとに異なるJSON構造を要求するのに対し、Converse APIは会話履歴・システムプロンプト・ツール利用などを共通インターフェースで扱えます。
backend/internal/bedrock/client.goでConverse APIを叩いており、ModelIdにバージョン番号付きのプロンプトARNを渡しています。
out, err := c.api.Converse(ctx, &bedrockruntime.ConverseInput{
ModelId: aws.String(promptARN),
Messages: messages,
})
プロンプト本体・モデル・推論パラメータはすべてPrompt Management側で定義済みのため、Lambda側からはsystem・inferenceConfig・toolConfig・additionalModelRequestFieldsを渡しません。
プロンプトARN指定時の制約
公式ドキュメントの記載どおり、modelIdにプロンプトARNを指定する場合はsystem・inferenceConfig・toolConfig・additionalModelRequestFieldsをリクエストに含めることができません。
これらはすべてPrompt Management側で定義する形になります。
動作確認
Flutterアプリを起動して、ミケとポチそれぞれに話しかけてみます。
選択画面

ミケ

ポチ

両キャラともキャラ設定どおりの口調・性格で返答がきました。
バージョン更新の動作確認
Prompt Managementの真価はバージョン管理なので、システム命令を変更してみます。
以下のように変更してバージョン発行をします。

Lambdaの環境変数にてどのプロンプトのバージョンを使用するかを指定しているため、環境変数の更新は必要ですが、Lambdaのコード本体の変更は不要です。
変更後に再度アプリから確認してみると、返答が変わっていることが確認できました。

最後に
今回は、Bedrock Prompt Managementでキャラクターのシステムプロンプトをバージョン付きで管理し、Lambda(Go)からConverse APIで呼び出すところまでを試してみました。
この記事がどなたかの参考になれば幸いです。








