AI Agents & Chat for Amazon Bedrock:本サイトで使っている WordPress 用チャット・MCP プラグイン

自分の AWS アカウントで Amazon Bedrock へ直結する WordPress プラグイン。チャット、エージェント、MCP、モデル採点に頼らない回帰チェックを備えます。

「AI Agents & Chat for Amazon Bedrock」は、wordpress.org で公開されているオープンソースの WordPress プラグインで、本サイトもこのプラグインで動いています。サイト運営者自身の AWS アカウントから Amazon Bedrock を直接呼び出し、ストリーミング対応のチャットと、ツールを呼び出すエージェントをサイト上で提供します。あわせてサイト自体を MCP サーバーとして公開し、ルールベースの回答回帰チェックも内蔵しています。デフォルト設定はどれも保守的です。訪問者向けチャットは初期状態で無効、ツールが行える唯一の書き込み操作は下書きの作成で、認証情報をデータベースに一切保存しない構成も取れます。

接続方式と認証情報

モデルへのリクエストは、WordPress サーバーから設定した Bedrock リージョンのエンドポイントへ直接送られます。プラグイン作者は中継サービスを運営しておらず、プラグインが作者に利用状況のテレメトリを送ることもありません。対応モデルは、利用者のアカウントでそのリージョンで利用できるテキストモデルで、Anthropic Claude、Amazon Nova、Amazon Titan、Meta Llama、Mistral、DeepSeek のほか、OpenAI gpt-oss、Qwen3、Kimi などです。Claude、Nova、Titan 以外のモデルは Bedrock Converse API を経由します。新規インストール時のデフォルトは Amazon Nova Lite です。

AWS の公式製品ではありません。readme には、Amazon とは関係のない独立したオープンソース・プラグインであると明記されています。ライセンスは GPL-2.0-or-later で、WordPress 6.4 以降と PHP 7.4 以降が必要です。現在のバージョンは 1.47.6 です。

署名に使う認証情報は、次の順序で解決されます。wp-config.php の定数、暗号化して保存された設定、環境変数、ECS/EKS のタスクロール、IMDSv2 で取得する EC2 インスタンスロールです。AWS 上にデプロイしたサイトなら、長期的なキーを WordPress に一切保存せずに済みます。AWS 以外で動かすサイトでいちばん手早いのは、Bedrock コンソールで API キーを発行して設定ページに貼り付ける方法です。キーは暗号化して保存され、保存後は再表示されません。AI_CHAT_BEDROCK_API_KEY 定数として定義することも、AWS SDK 共通の AWS_BEARER_TOKEN_BEDROCK 環境変数を使うこともできます。API キーはチャット、ストリーミング出力、モデル一覧、embedding に使えます。一方、Knowledge Bases、Prompt Management、AgentCore Gateway は API キーを受け付けないため、これらには引き続き IAM ロールかアクセスキーが必要です。

Diagnostics ページでは、実際のリクエストを 1 件送って疎通を確認し、現在有効な認証情報のソースがどれかを表示します(キー自体は表示しません)。さらに、サイトで実際に有効にしている機能に合わせて最小権限の IAM ポリシーを生成するので、権限の広いマネージドポリシーをアタッチせずに済みます。

チャットとエージェント:「公開チャットは悪用される」前提の設計

  • 訪問者のアクセスはデフォルトで無効です。チャットが実際に回答できる状態になるまで、訪問者には表示されません。リクエストは訪問者単位と profile 単位でレート制限され、ロールごとに別の上限を設けることも、サイト全体の 1 日あたりの上限を設けることもできます。
  • ストリーミング出力は、認証付きの POST 1 回と Server-Sent Events で行います。会話内容が URL に含まれることはなく、1 メッセージにつき Bedrock の呼び出しは 1 回だけです。訪問者が途中で停止すると、サーバー側の Bedrock リクエストも停止します。cURL がない場合やプロキシがストリームをバッファリングする場合は、非ストリーミングの単発リクエストに自動で切り替わります。
  • ツールはサーバー上で実行されるため、ブラウザがツールの結果を偽造することはできません。ツールの出力は常に信頼できないデータとしてモデルに渡されます。ツールの利用にはデフォルトで edit_posts 権限が必要です。外部 MCP ツールのうちデータを変更するとみられるものは、管理者が許可するまですべてブロックされ、許可後も管理者しか使えません。各ラウンドの呼び出しは最大 5 回、ラウンド数は 1〜5 の範囲で設定でき、最終ラウンドではツールを提供しないので、会話は必ず終わります。呼び出しのたびに監査ログを記録しますが、記録するのはツール名、ラウンド、結果、所要時間、引数のキー名だけで、引数の値や出力内容は記録しません。
  • 検索用のインデックスに入るのは、公開済みでパスワード保護されていないコンテンツだけです。embedding モデルを選ぶと意味の類似度で照合し、サイトが扱っていない質問には空のコンテキストを返したうえで、Conversations ページに「コンテンツの不足」として一覧表示します。
  • Bedrock Prompt Management で管理するプロンプト、レート制限時や利用不可時に切り替えるフォールバックモデル、最大 10 個の会話 profile、フローティングの起動ボタン、Claude のプロンプトキャッシュ(管理画面にキャッシュ読み取りのトークン数を表示)に対応しています。

MCP:サーバーでもあり、クライアントでもある

サーバーとしては、/wp-json/ai-chat-bedrock/v1/mcp で Streamable HTTP による JSON-RPC 2.0 を提供します。プロトコルバージョンは 2026-07-28 で、2025-11-25 と 2025-06-18 の 2 つのバージョンのクライアントとも互換性があります。デフォルトでは読み取り専用のコンテンツツールを 5 つ提供し、返すのは公開済みのコンテンツだけです。サイトの abilities を有効にすると、SEO の提案、WooCommerce の商品照会、下書きの作成が加わります。認証には WordPress の Application Password か OAuth 2.1(動的クライアント登録、PKCE S256 必須、アクセストークンの有効期限 1 時間、リフレッシュトークンのローテーション、トークンはハッシュ値のみ保存)を使えます。匿名アクセスと OAuth はどちらもデフォルトで無効です。

クライアントとしては、外部の MCP サーバーや Amazon Bedrock AgentCore Gateway を呼び出せます。認証方式は、認証なし、暗号化して保存した bearer token、SigV4 から選べます。エンドポイントはパブリックな HTTPS アドレスでなければならず、プライベートアドレス、ループバックアドレス、リンクローカルアドレス、認証情報を含む URL はすべて拒否されます。リダイレクトは無効化され、レスポンスサイズにも上限があります。WordPress 7.0 以降では、プラグインが Bedrock をコアの AI Client にも登録するため、他のプラグインが wp_ai_client_prompt() を呼び出した場合にも、このプラグインの利用上限と使用量の集計が適用されます。

回答チェック:モデルにモデルを採点させない

正解がわかっている質問のセットを書き、wp ai-chat-bedrock eval を実行します。各質問はチャットが実際に使うのと同じ処理経路を通り、結果はカテゴリ別に報告されます。カテゴリは grounding、一致の強さ、引用、必ず含むべきテキストまたは含んではいけないテキスト、ツール呼び出し、トークン予算です。チェックに通らなければコマンドは非ゼロの終了コードで終わるので、そのままデプロイのゲートとして使えます。--compare を付けると、変更前後のカテゴリごとの差分を表示します。どのチェックもプログラムによる判定で、文体や語調は評価せず、あるモデルに別のモデルを評価させることもしません。プログラムで確認できない項目は「未チェック」として報告し、合格には数えません。WP-CLI には index、index-status、diagnose、usage などのサブコマンドもあります。

インストールと注意事項

  1. まず選んだ AWS リージョンで対象モデルへのアクセスを有効にし、必要なモデルだけを呼び出せる IAM アイデンティティを用意します。WordPress サイトに管理者レベルの AWS 権限を与えないでください。
  2. プラグインディレクトリで検索してインストールし、有効化します。AI Chat Bedrock > Settings を開いてリージョンを選び、API キーかアクセスキーを入力します(どちらも空欄にして、サーバーの IAM ロールを使うこともできます)。続いてモデルを選びます。
  3. 保存したら Diagnostics を実行し、ページに

    フィジカルAIラボ · AIアシスタント

    こんにちは!フィジカルAIラボのAIアシスタントです。ロボット、身体性AI、講座の内容について何でも聞いてください。
    ショートコードかチャットブロックを挿入します。
  4. 訪問者向けチャットを公開する前に、モデルの料金とレート制限の設定を確認してください。

制約と注意点

  • 管理画面に表示されるトークン数は Bedrock が返したカウントで、費用の見積もりではありません。レート制限で想定外の利用は減らせますが、請求額の上限は保証されません。チャットを公開する前に、AWS 側で Budgets を設定しておくべきです。
  • 会話ログはデフォルトで無効です。有効にすると直近 200 往復までの質問と回答を WordPress の option に保存し、WordPress 標準の個人データのエクスポートと消去に対応します。訪問者への開示や同意の取得が必要かどうかは、サイト運営者が自分の法域に照らして判断します。
  • 短期の Bedrock API キーは最長 12 時間で失効するため、テストには向きますが本番サイトには向きません。一部のモデルにはクロスリージョン推論プロファイル(ID が us.、eu.、global. で始まるもの)と、それに対応する IAM 権限が必要です。

リンク