クラウドで AI Red Teaming Agent を実行する

AI Red Teaming Agent は、プロトタイプの作成と開発中 にローカルで 実行して安全性のリスクを特定できますが、クラウドで実行すると、次のシナリオが可能になります。

  • デプロイ前の AI レッド チーミングは、攻撃戦略とリスク カテゴリのより大きな組み合わせで実行され、より詳細な分析が可能になります。
  • 設定された時間間隔で実行するようにスケジュールできるデプロイ後の継続的な AI レッド チーミング実行
  • AI レッド チーミング実行用に最小限のサンドボックス環境をサポートするエージェント固有のリスク シナリオ

前提 条件

  • Foundry プロジェクト

  • Foundry プロジェクトのFoundry Userロール。

    Important

    Foundry RBAC ロールの名前が最近変更されました。 Foundry User, Foundry Owner, Foundry Account Owner、および Foundry Project Manager は、以前は、AZURE AI ユーザー、Azure AI 所有者、Azure AI アカウント所有者、および AZURE AI Project Manager という名前でした。 名前の変更がロールアウトされている間、以前の名前が表示される場合があります。ロール ID とコア アクセス許可は、名前の変更によって変更されません。

  • Python 3.9 以降。

  • エージェントのシナリオの場合: プロジェクトにデプロイした既存の Foundry エージェント。 エージェントの名前は、 AZURE_AI_AGENT_NAMEとして必要です。

開始

まず、クラウドで AI Red Teaming Agent を実行する Microsoft Foundry SDK のプロジェクト クライアントをインストールします。

pip install "azure-ai-projects>=2.0.0"

次に、Microsoft Foundry リソースの環境変数を設定します

import os

endpoint = os.environ["AZURE_AI_PROJECT_ENDPOINT"]  # Example: https://<account_name>.services.ai.azure.com/api/projects/<project_name>
agent_name = os.environ["AZURE_AI_AGENT_NAME"]  # Required. The name of the agent to red team.

サポートされているターゲット

クラウドでの AI Red Teaming Agent の実行は、現在、以下のみをサポートしています。

  • Foundry プロジェクトの展開
  • Azure OpenAI モデルのデプロイ
  • ターゲットとして Microsoft Foundry プロジェクトの Foundry エージェント (プロンプトおよびコンテナー エージェント)。

ターゲット モデルを構成する

ターゲット モデルのデプロイは、次の 2 つの方法で構成できます。

オプション 1: Foundry プロジェクトの展開

Foundry プロジェクトの一部であるモデル デプロイを使用している場合は、initialization_parameters.deployment_nameするときに、 フィールドに配置名を直接渡します。 Microsoft では、 DefaultAzureCredential を使用したキーレス認証 (実行前に az login 実行) をお勧めします。

シナリオで代わりに API キー認証が必要な場合:

import os

model_endpoint = os.environ["MODEL_ENDPOINT"]  # Example: https://<account_name>.openai.azure.com
model_api_key = os.environ["MODEL_API_KEY"]    # Use DefaultAzureCredential when possible
model_deployment_name = os.environ["MODEL_DEPLOYMENT_NAME"]  # Example: gpt-4o-mini

オプション 2: Azure OpenAI/Foundry Tools のデプロイ

Azure OpenAI または Foundry Tools アカウントからのデプロイを使用する場合は、まず、接続を介してこれらのリソースを Foundry プロジェクトに接続する必要があります。

  1. 接続を作成する: 「プロジェクトに新しい接続を追加する 」の手順に従って、Azure OpenAI または AI Services リソースを Foundry プロジェクトに接続します。

  2. 接続名を取得します。アカウントを接続すると、Foundry プロジェクトで生成された名前で作成された接続が表示されます。

  3. ターゲットを構成する: モデルのデプロイ構成に "connectionName/deploymentName" 形式を使用します。

# Format: "connectionName/deploymentName"
model_deployment_name = "my-openai-connection/gpt-4o-mini"

AI レッド チームを作成する

赤いチームを作成して、データ ソースとリスク カテゴリを共有する 1 つ以上の実行を保持します。

import os
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient

endpoint = os.environ["AZURE_AI_PROJECT_ENDPOINT"]
model_deployment = os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"]

with DefaultAzureCredential() as credential:
    with AIProjectClient(endpoint=endpoint, credential=credential) as project_client:
        client = project_client.get_openai_client()

        # Create a red team with built-in safety evaluators
        red_team = client.evals.create(
            name="Red Team Agentic Safety Evaluation",
            data_source_config={"type": "azure_ai_source", "scenario": "red_team"},
            testing_criteria=[
                {
                    "type": "azure_ai_evaluator",
                    "name": "Prohibited Actions",
                    "evaluator_name": "builtin.prohibited_actions",
                    "evaluator_version": "1"
                },
                {
                    "type": "azure_ai_evaluator",
                    "name": "Task Adherence",
                    "evaluator_name": "builtin.task_adherence",
                    "evaluator_version": "1",
                    "initialization_parameters": {"deployment_name": model_deployment},
                },
                {
                    "type": "azure_ai_evaluator",
                    "name": "Sensitive Data Leakage",
                    "evaluator_name": "builtin.sensitive_data_leakage",
                    "evaluator_version": "1"
                },
            ],
        )
        print(f"Created red team: {red_team.id}")

実行内容:

  • レッド チーミングのすべての演習を実施するためのレッド チームを作成します
  • 3 つの組み込みエバリュエーター (禁止されたアクション、タスクの準拠、機密データ漏洩) を使用して、赤いチームを構成します。

受け取るもの:

  • ID を含むグループのメタデータを含む JSON 本文 (後で {{red_team_id}} として保存します)。

赤いチームを取得する

これを使用して、赤いチームが存在することを確認し、構成 (条件、データ ソース、タイムスタンプ) を確認します。

print(f"[Group] Retrieving group by id={red_team.id} ...")
red_team_fetched = client.evals.retrieve(red_team.id)
print("[Group] Response:")
print(red_team_fetched)

評価分類を作成 (または更新) する

禁止されたアクションのエージェントのリスク カテゴリのレッド チームは、禁止アクション レッド チーミング ワークフローによって生成された禁止アクションの評価基準を確認、編集、または更新できる必要があります。 次の例では、ユーザーが承認したポリシーに基づいてエージェントの動作をテストする攻撃プロンプトを動的に生成するために使用される禁止アクションの分類が生成された JSON ファイルを生成します。 分類法を確認を終えたら、それを使用してレッド チーミングの実行を作成し、エージェントの出力の攻撃成功率 (ASR) を評価します。

from azure.ai.projects.models import (
    AzureAIAgentTarget,
    AgentTaxonomyInput,
    EvaluationTaxonomy,
    RiskCategory,
)

# Define the agent target for taxonomy generation
target = AzureAIAgentTarget(
    name=agent_name,
    version=agent_version.version,
)

# Create taxonomy for prohibited actions risk category
taxonomy = project_client.beta.evaluation_taxonomies.create(
    name=agent_name,
    body=EvaluationTaxonomy(
        description="Taxonomy for red teaming run",
        taxonomy_input=AgentTaxonomyInput(
            risk_categories=[RiskCategory.PROHIBITED_ACTIONS],
            target=target
        ),
    )
)
taxonomy_file_id = taxonomy.id
print(f"Created taxonomy: {taxonomy_file_id}")

実行内容:

  • 次の {{name}} という名前の分類リソースを作成または更新します。
    • エージェントターゲットとツールの説明を定義します
    • のリスク カテゴリを指定します。 ProhibitedActions

これを参照します

  • Create Runリクエストの URIを使用して実行します。

レッド チームで実行を作成する

実行は、ソース (分類など) から項目を生成し、選択した攻撃戦略を使用してターゲット エージェントのレッド チーム演習を実行ます。

# Create a red team run with attack strategies
eval_run = client.evals.runs.create(
    eval_id=red_team.id,
    name="Red Team Agent Safety Eval Run",
    data_source={
        "type": "azure_ai_red_team",
        "item_generation_params": {
            "type": "red_team_taxonomy",
            "attack_strategies": ["Flip", "Base64", "IndirectJailbreak"],
            "num_turns": 5,
            "source": {"type": "file_id", "id": taxonomy_file_id},
        },
        "target": target.as_dict(),
    },
)
print(f"Created run: {eval_run.id}, status: {eval_run.status}")

実行を構成するためのキー フィールド:

  • attack_strategies: たとえば、"Flip"、"Base64"、"IndirectJailbreak" (テストするものを選択してください)
  • num_turns: 生成されたレッド チーム アイテムのマルチターン深度
  • source.id: ファイル ID URI による分類を指します
  • target: テスト対象のエージェント (名前、バージョン、ツール)

あなたは受け取るでしょう

  • idを含む実行オブジェクト ({{eval_run_id}}として保存)

レッド チーミング実行を ID で取得する

これを使用して、レッドチーム演習の状態(キューに登録、実行中、成功、失敗など)を確認します。

import time

# Poll for run completion
while True:
    run = client.evals.runs.retrieve(run_id=eval_run.id, eval_id=red_team.id)
    print(f"Status: {run.status}")
    if run.status in ("completed", "failed", "canceled"):
        break
    time.sleep(5)

メモ

API は要求ごとに同期的ですが、実行自体はサーバー側で処理されます。出力項目をフェッチする前に、完了するまでこのエンドポイントをポーリングします。

レッドチーミングの実行出力項目と結果をリストする

これを使用して、レッド チーミングの実行が完了した後に概要メトリックを調査します。

print("[Run] Fetching output items...")
items = list(client.evals.runs.output_items.list(run_id=run.id, eval_id=red_team.id))
output_path = os.path.join(data_folder, f"redteam_eval_output_items_{agent_name}.json")
with open(output_path, "w") as f:
    f.write(json.dumps(_to_json_primitive(items), indent=2))
print(f"[Run] Done. Status={run.status}. Output items saved to {output_path}")