ADK 向け Model Armor プラグイン¶
Model Armor は、プロンプトインジェクションやジェイルブレイクの試行、有害なコンテンツ、機密データを検出するためにテキストを検査する Google Cloud サービスです。テンプレートと呼ばれるサーバー側ポリシーで検出対象を定義すると、サービスは送信された各テキストに対して判定結果を返します。ModelArmorPlugin クラスは ADK に付属しており、モデルコールバックからそのサービスを呼び出します。モデルが認識する前にユーザー入力をスクリーニングし、配信前または配信中にモデル出力をスクリーニングして、一致したコンテンツを安全なメッセージに置き換えます。
ユースケース¶
- プロンプトインジェクションとジェイルブレイクの防御: モデルが処理する前にすべてのユーザーターンをプロンプトテンプレートに照らしてスクリーニングするため、検出された試行に対してエージェントが従う代わりにブロックされます。
- 機密データと有害コンテンツのフィルタリング: モデル出力を応答テンプレートに照らしてスクリーニングし、配信前にデータ漏洩やコンテンツポリシー違反を起こす回答を捕捉します。
- エージェント間での統一されたポリシー:
Appに 1 つのプラグインを登録すると、ライブ音声エージェント を含む実行対象のすべてのエージェントが同じスクリーニングを継承します。
前提条件¶
- Model Armor API が有効化され、少なくとも 1 つのテンプレートが作成された Google Cloud プロジェクト。Model Armor のドキュメント を参照してください。
gcloud auth application-default loginで設定された、Model Armor へのアクセス権を持つアプリケーションデフォルト認証情報(ADC)。- ADK >= 2.8.0
インストール¶
個別の model-armor エクストラはありません。プラグインは ADK に付属しており、gcp エクストラが必要な google-cloud-modelarmor クライアントを提供します。
エージェントでの使用¶
スクリーニング対象のテンプレートを指定して、App にプラグインを登録します:
from google.adk.agents import LlmAgent
from google.adk.apps import App
from google.adk.integrations.model_armor import ModelArmorConfig
from google.adk.integrations.model_armor import ModelArmorPlugin
agent = LlmAgent(
model="gemini-flash-latest",
name="screened_agent",
instruction="You are a helpful assistant.",
)
app = App(
name="model_armor_demo",
root_agent=agent,
plugins=[
ModelArmorPlugin(
config=ModelArmorConfig(
prompt_template_name=(
"projects/my-project/locations/us-central1/templates/my-prompt-template"
),
response_template_name=(
"projects/my-project/locations/us-central1/templates/my-response-template"
),
)
)
],
)
テンプレート名は、projects/{project}/locations/{location}/templates/{template} 形式の完全なリソースパスである必要があります。プラグインはパスからロケーションを読み取ってリージョンエンドポイントを選択するため、両方のテンプレートが同じリージョンに存在する必要があります。プラグインの構築時に短い名前や一致しないペアを指定すると、ValueError が発生します。
各テンプレートは任意であり、一方のみを設定した場合はその方向のみがスクリーニングされます:
config = ModelArmorConfig(
prompt_template_name=(
"projects/my-project/locations/us-central1/templates/my-prompt-template"
),
)
スクリーニングは最新のユーザーコンテンツとモデルの返答を対象とします。ツールの結果は function_response パーツとしてリクエストに到達しますが、プラグインはこれをスキップします。
構成¶
| オプション | デフォルト値 | 説明 |
|---|---|---|
prompt_template_name |
None |
ユーザー入力のスクリーニングに使用されるテンプレート。未設定の場合、入力はスクリーニングされません。 |
response_template_name |
None |
モデル出力のスクリーニングに使用されるテンプレート。未設定の場合、出力はスクリーニングされません。 |
input_blocked_message |
下記参照 | ユーザー入力がブロックされたときに表示される代替テキスト。 |
output_blocked_message |
下記参照 | モデル出力がブロックされたときに表示される代替テキスト。 |
block_on_screening_failure |
True |
スクリーニングできなかったコンテンツをブロックするかどうか。 |
両方のメッセージのデフォルト値は "I'm sorry, but I can't help with that request." です。設定で少なくとも 1 つのテンプレート名を指定する必要があり、指定しない場合はバリデーションエラーが発生します。
Model Armor 呼び出しで例外が発生した場合、またはサービスが SUCCESS 以外の判定を返した場合、スクリーニングは失敗します。デフォルトでは、スクリーニングされていないコンテンツがブロックされます。Model Armor が利用できない間もエージェントの応答を維持したい場合は、block_on_screening_failure=False を設定してください。
ブロックされたターンには custom_metadata['model_armor_blocked'] が設定されるため、アプリケーションはポリシーによるブロックと通常の応答を区別できます。