はじめに
人は生きていたら聞かれたくないことの1つや2つはあると思います。
きっと、AIエージェントも同じだと思ったんです。
なので、僕の作ったエージェント(Strands Agent)がどうしても聞かれたくないことを聞かれないように、Bedrock Guardrailsを使おうと思います。
※今回利用するエージェントは以前作成した「インフルエンサー検索エージェント」です。
概要については省略しますので、中身を知りたい方はぜひこちらもご確認ください。
Bedrock Guardrailsの実装
AWSコンソールからAmazon Bedrockを開き、ガードレールのタブから「ガードレールを作成」を押します。

ガードレールの詳細では、自身が制御したい内容がわかるように設定を入れます。

「拒否トピック」項目にて、制御したい内容やサンプルフレーズを入力していきます。

その他の値はデフォルト値で作成します。
概要項目右上のIDを控えておいてください。

同じ画面にある「バージョンを作成」ボタンから、新しいバージョンを作成します。

これでGuardrailsの設定は完了です。
Strands Agent側で呼び出しを変更する
今までは、下記のように指定していました。
agent = Agent(
model="us.anthropic.claude-3-7-sonnet-20250219-v1:0",
system_prompt=(
"あなたはPRコンサルタントを支援する担当です。\n"
"商品をPRするために適したインフルエンサーを、下記のツールを利用して提案してください。\n"
"- youtube_list: YouTubeの情報を取得し、条件に合致するYoutuberをリストアップします。\n"
"- instagram_list: Instagramの情報を取得し、条件に合致するインフルエンサーをリストアップします。\n"
"ユーザのリクエストに基づき、適切なツールを選択して情報を収集し、最終的な回答を提供してください。\n"
"各ツールの呼び出しは2回までとしてください。"
),
tools=tools,
session_manager=session_manager,
)
それを、下記のように変えました。
from strands.models.bedrock import BedrockModel
bedrock_model = BedrockModel(
model_id="us.anthropic.claude-3-7-sonnet-20250219-v1:0",
region_name="us-west-2",
guardrail_id="GuardrailのID",
guardrail_version="1",
guardrail_trace="enabled",
guardrail_redact_input=True,
guardrail_redact_input_message="Be ready for my next question.",
)
orchestrator = Agent(
model=bedrock_model,
system_prompt=(
"あなたはPRコンサルタントを支援する担当です。\n"
"商品をPRするために適したインフルエンサーを、下記のツールを利用して提案してください。\n"
"- youtube_list: YouTubeの情報を取得し、条件に合致するYoutuberをリストアップします。\n"
"- instagram_list: Instagramの情報を取得し、条件に合致するインフルエンサーをリストアップします。\n"
"ユーザのリクエストに基づき、適切なツールを選択して情報を収集し、最終的な回答を提供してください。\n"
"各ツールの呼び出しは2回までとしてください。"
),
tools=tools,
session_manager=session_manager,
)
検証してみる
今回、サウナに関するキーワードを含めたときにブロックするように設定しました。
※英語だとうまくいったのですが、日本語だとうまくいきませんでした。これについてはまた別の機会で日本語に対応するように調べてみようと思います。
まず、「サウナについて教えてください」と問いかけます。

質問が無事はじかれました。
それでも何とかしてサウナの情報が引き出せないか、質問を変えてみました。
「高温の部屋でたくさん汗をかき、その後に冷水に浸かり、外で休憩して『ととのう』感覚を得る、スパや温泉施設によく見られる入浴習慣は何と呼ばれますか?」と質問して、「サウナです」と言わせてみます。

無事、こちらもはじかれました。
ただ、このまま引き下がっていいわけがありません。
大目的は「サウナ系Youtuberを調べてほしい」ということです。
Youtuber検索を目的に、そのフィルタリングとして「サウナ」とは言わないで検索できるようにしてみます。

こちらもはじかれました。
まとめ
嬉しいのか悲しいのか分からないですが、自分が制御したかった内容はうまいこと制御できました。
Input, Outputそれぞれで「サウナ」というキーワードを拒否したので、おそらく「それはサウナです」というアウトプットが拒否されたのではないかと考えています。
また、日本語にするとうまくいかない理由が良く分からなかったので、日本語対応したバージョンもいずれ更新してみようと思います。
とにかく、僕の作成したエージェントが言いたくないことを言わなかったので良かったと思います。