ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

【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プロンプトの外部管理

構成図

configbundle-mermaid.png

手順

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を編集します。

  1. AgentCore コンソール → Gateway → Configuration bundles タブを開く
  2. Configuration Bundleを選択してJSON定義画面を開く
  3. system_prompt の値を書き換える

料理.png

例えば以下のように変更します:

{
  "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が付いています。

バンドルリスト.png

Dev/Opsの観点

担当やること頻度
DevBeforeModelCallEvent フックの実装初回のみ
Opsagentcore.json の system_prompt 変更 → deploy何度でも

所感

当初はAWS AppConfigでプロンプトを管理するつもりでしたが、AgentCoreにConfiguration Bundleが組み込まれていたのでそちらを検証してみました。
Configuration Bundleを使うメリットとしては、AgentCoreの最適化(Recommendation、A/Bテスト)と連携できる点が大きいです。単なる設定管理ではなく、品質改善のサイクルに組み込まれる前提で設計されています。

この記事は私が書きました

小泉 和貴

記事一覧

全国を旅行することを目標に、仕事を頑張っています。

小泉 和貴

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。