4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Bedrock Guardrailsを使ってみる & Strands Agentで制御してみる & なんとかして聞かれたくないことを聞いてみる

4
Posted at

はじめに

人は生きていたら聞かれたくないことの1つや2つはあると思います。
きっと、AIエージェントも同じだと思ったんです。
なので、僕の作ったエージェント(Strands Agent)がどうしても聞かれたくないことを聞かれないように、Bedrock Guardrailsを使おうと思います。

※今回利用するエージェントは以前作成した「インフルエンサー検索エージェント」です。
概要については省略しますので、中身を知りたい方はぜひこちらもご確認ください。

Bedrock Guardrailsの実装

AWSコンソールからAmazon Bedrockを開き、ガードレールのタブから「ガードレールを作成」を押します。
image.png

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

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

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

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

これで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,
)

検証してみる

今回、サウナに関するキーワードを含めたときにブロックするように設定しました。
※英語だとうまくいったのですが、日本語だとうまくいきませんでした。これについてはまた別の機会で日本語に対応するように調べてみようと思います。

まず、「サウナについて教えてください」と問いかけます。
image.png
質問が無事はじかれました。

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

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

まとめ

嬉しいのか悲しいのか分からないですが、自分が制御したかった内容はうまいこと制御できました。
Input, Outputそれぞれで「サウナ」というキーワードを拒否したので、おそらく「それはサウナです」というアウトプットが拒否されたのではないかと考えています。

また、日本語にするとうまくいかない理由が良く分からなかったので、日本語対応したバージョンもいずれ更新してみようと思います。

とにかく、僕の作成したエージェントが言いたくないことを言わなかったので良かったと思います。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?