- 公開日
- 最終更新日
【Bedrock AgentCore】Configuration Bundleでシステムプロンプトをコード外管理
この記事を共有する
目次
はじめに
皆さんこんにちは!パーソル&サーバーワークスの小泉です。
今回は Amazon Bedrock AgentCore(以下AgentCore) の Configuration Bundle を使って、AIエージェントのシステムプロンプトをコードの外で管理する方法を検証しました。
なぜこれをやったのか
AIエージェントを運用していると、こんな場面に遭遇します。
- プロンプトを少し変えたいだけなのに、コード変更→PR→レビュー→デプロイのサイクルを回す必要がある
- ドメイン知識を持っている人(CS部門のリーダーや教育担当者)がプロンプトを直接改善できない
- プロンプト変更の影響を安全に確認する仕組みがない
これだと「ちょっとプロンプト変えたいだけなのにデプロイが必要」「プロンプト改善のたびにエンジニアに依頼が必要」という状態になります。
ドメイン知識を持っている人(例えば教育担当者やCS部門のリーダー)が、コードを触らずにプロンプトを直接書き換えられる仕組みがあれば、「改善サイクルがもっと速く回るはず」と思っていた矢先にAgentCoreの機能(Configuration Bundle)がすでに組み込まれていたので実際に試してみました。
※ 本記事では、エージェントの振る舞い(プロンプトやルール)を管理する人を「Ops」、コードやインフラを管理する人を「Dev」と呼びます。Opsはドメイン知識を持つ人(教育担当者、CS部門リーダーなど)を想定しています。
Configuration Bundle とは
一言で言うと、エージェントの振る舞い(システムプロンプト、モデルID、temperature等)をコード外で管理するバージョン管理付き設定ストアです。
| 特徴 | 説明 |
|---|---|
| key-value形式 | system_prompt, model_id, temperature などを格納 |
| イミュータブルバージョン | 更新するたびに新バージョンが作られる |
| コード変更不要 | エージェントは毎回最新の設定を取得する |
公式ドキュメント: Configuration Bundles
今回使うAgentCoreの機能
| 機能 | 役割 |
|---|---|
| Runtime | エージェントのホスティング基盤 |
| Configuration Bundle | プロンプトの外部管理 |
構成図

手順
1. プロジェクト作成
AgentCore CLIでプロジェクトを作成します。
npm install -g @aws/agentcore agentcore create \ --project-name myAgent \ --language Python \ --framework Strands \ --model-provider Bedrock \ --memory none \ --defaults
これで agentcore/agentcore.json を含むプロジェクト一式が生成されます。
2. エージェントコードにConfiguration Bundleフックを実装
app/myAgent/main.py を以下のように書きます。
ポイントは BeforeModelCallEvent フックで毎回Configuration Bundleから最新のsystem_promptを取得します。
from strands import Agent
from strands.models.bedrock import BedrockModel
from strands.hooks.events import BeforeModelCallEvent
from bedrock_agentcore.runtime import BedrockAgentCoreApp, BedrockAgentCoreContext
app = BedrockAgentCoreApp()
DEFAULT_SYSTEM_PROMPT = "You are a helpful assistant."
def dynamic_config_hook(event: BeforeModelCallEvent):
"""モデル呼び出し前にConfig Bundleから最新のsystem promptを取得"""
try:
config_bundle = BedrockAgentCoreContext.get_config_bundle()
if config_bundle:
new_prompt = config_bundle.get("system_prompt")
if new_prompt:
event.agent.system_prompt = new_prompt
except Exception:
pass # Config Bundle未設定時はデフォルトを使用
agent = Agent(
model=BedrockModel(model_id="global.anthropic.claude-sonnet-4-5-20250929-v1:0"),
system_prompt=DEFAULT_SYSTEM_PROMPT,
)
agent.hooks.add_callback(BeforeModelCallEvent, dynamic_config_hook)
@app.entrypoint
def invoke(payload, context):
result = agent(payload.get("prompt", "Hello"))
return {"response": str(result)}
if __name__ == "__main__":
app.run()
3. Configuration Bundleを追加
agentcore add config-bundle \
--name "agentConfig" \
--components '{"{{runtime:myAgent}}": {"configuration": {"system_prompt": "あなたはAWSの専門家です。日本語で回答してください。質問には簡潔かつ正確に答えてください。", "model_id": "global.anthropic.claude-sonnet-4-5-20250929-v1:0", "temperature": 0.7}}}'
--commit-message "初期設定: AWS専門家プロンプト"
4. デプロイ
agentcore deploy --yes
5. 動作確認(初期プロンプト: AWS専門家)
初期設定では「あなたはAWSの専門家です。日本語で回答してください。」というプロンプトが入っています。
agentcore invoke "S3のストレージクラスについて教えてください"
結果: S3のストレージクラス(Standard、IA、Glacier等)について専門的に回答が返ってきます。
ここまでがDevの仕事と、あとの改善はOpsに担当してもらいます
6. マネコンからプロンプトを変更する(コード変更なし)
ここからがOpsの仕事です。マネジメントコンソールからConfiguration Bundleを編集します。
- AgentCore コンソール → Gateway → Configuration bundles タブを開く
- Configuration Bundleを選択してJSON定義画面を開く
- system_prompt の値を書き換える

例えば以下のように変更します:
{
"temperature": 0.5,
"model_id": "global.anthropic.claude-sonnet-4-5-20250929-v1:0",
"system_prompt": "あなたは料理の専門家です。日本語で回答してください。AWSやITの質問には「私は料理の専門家なので、お料理の質問にお答えします」と答えてください。"
}
「Create as new version」ボタンをクリックするだけで新バージョンが作成されます。 Pythonのコードは一切触っていません。
CLIからやる場合も同様に agentcore.json の値を書き換えて agentcore deploy するだけです。
7. 動作確認(変更後: 料理の専門家)
同じ質問をもう一度してみます。
agentcore invoke "S3のストレージクラスについて教えてください"
結果: 「私は料理の専門家なので、お料理の質問にお答えします。」
同じコード、同じエージェントなのに、プロンプトを変えただけで応答が完全に変わりました。
マネジメントコンソールで確認
Configuration Bundle バージョン履歴
gitのログのようにバージョンが積み上がっていきます。 各バージョンにはDescriptionが付いています。

Dev/Opsの観点
| 担当 | やること | 頻度 |
|---|---|---|
| Dev | BeforeModelCallEvent フックの実装 | 初回のみ |
| Ops | agentcore.json の system_prompt 変更 → deploy | 何度でも |
所感
当初はAWS AppConfigでプロンプトを管理するつもりでしたが、AgentCoreにConfiguration Bundleが組み込まれていたのでそちらを検証してみました。
Configuration Bundleを使うメリットとしては、AgentCoreの最適化(Recommendation、A/Bテスト)と連携できる点が大きいです。単なる設定管理ではなく、品質改善のサイクルに組み込まれる前提で設計されています。
この記事は私が書きました
小泉 和貴
記事一覧全国を旅行することを目標に、仕事を頑張っています。