【Azure】- AI Red Teaming Agent とは?
執筆日
2025/10/1
やること
Azure AI Foundry にある AI Red Teaming Agent について、その背景と使い方、実際の動作検証を通じてご紹介します。
Red Teaming とは?
Red Teamingは、組織やシステムの防御体制を「攻撃者視点」で評価するセキュリティ演習手法です。
生成AI時代になり…
近年、生成AIの普及に伴い、今までの悪意のある攻撃以外にもたくさんの攻撃手段が日々誕生し、新たなリスクが顕在化しています:
例)プロンプトインジェクション、脱獄プロンプトなど..
これらを人手で網羅的にテストするのは極めて困難。
AI Red Teaming Agent とは?
AI Red Teaming Agent は、Azure AI Foundry 上で提供される機能です。
2025/10/1時点では、パブリックプレビューです。
主な機能は以下の3つです。
- 自動スキャン
モデルやアプリのエンドポイントに対して、敵対的なプロンプトを自動生成し攻撃。 - 評価とスコアリング
攻撃成功率(ASR: Attack Success Rate)を算出。 - レポート生成
攻撃手法やリスクカテゴリ別のスコアカードを作成し、Azure AI Foundryで追跡可能。
2025/8/8時点では、Azure AI Foundry上での評価はできず、コードベースの実行となります。
Azure環境の準備
Azure AI Foundry/Projectを以下のリージョンで作成をする。
- East US2
- Sweden Central
- France Central
- Switzerland West
※Hub ベースのプロジェクト、Foundry プロジェクトのどちらでも可
リスクを洗い出しみる
既定の 4 つのリスク カテゴリ (暴力、性的、嫌悪、不公平、自傷) の各セットに対して既定の 10 個の攻撃プロンプトを生成し、合計 40 行の攻撃プロンプトを生成してターゲットに送信します。
固定の文言に対する攻撃
- 目的:AIモデルやアプリが、特定の入力に対して安全に応答できるかを確認。
- 特徴:シンプルなコールバック関数をターゲットにする。
- 利用シーン:モデルの安全性テストを最小構成で試したいとき。
import os
from dotenv import load_dotenv
import asyncio
from azure.identity import DefaultAzureCredential
from azure.ai.evaluation.red_team import RedTeam
load_dotenv()
azure_ai_project = os.environ["AZURE_AI_PROJECT"]
# Instantiate your AI Red Teaming Agent
red_team_agent = RedTeam(
azure_ai_project=azure_ai_project, # required
credential=DefaultAzureCredential() # required
)
# A simple example application callback function that always returns a fixed response
def simple_callback(query: str) -> str:
return "I'm an AI assistant that follows ethical guidelines. I cannot provide harmful content."
async def main():
# Runs a red teaming scan on the simple callback target
red_team_result = await red_team_agent.scan(target=simple_callback)
return red_team_result
if __name__ == "__main__":
asyncio.run(main())
カテゴリを絞りたい場合
# Specifying risk categories and number of attack objectives per risk categories you want the AI Red Teaming Agent to cover
red_team_agent = RedTeam(
azure_ai_project=azure_ai_project, # required
credential=DefaultAzureCredential(), # required
risk_categories=[ # optional, defaults to all four risk categories
RiskCategory.Violence,
RiskCategory.HateUnfairness,
RiskCategory.Sexual,
RiskCategory.SelfHarm
],
num_objectives=5, # optional, defaults to 10
)
モデル構成を対象
- 目的:Azure OpenAIなどの実際のモデルエンドポイントを攻撃対象に。
- 特徴:azure_openai_config を指定してスキャン。
- 利用シーン:本番に近い環境での安全性評価。
import os
from dotenv import load_dotenv
import asyncio
from azure.identity import DefaultAzureCredential
from azure.ai.evaluation.red_team import RedTeam
load_dotenv()
azure_openai_config = {
"azure_endpoint": os.environ["AZURE_OPEN_ENDPOINT"],
"api_key": os.environ["AZURE_OPENAI_KEY"],
"azure_deployment": os.environ["AZURE_OPENAI_DEPLOYMENT"],
}
# Instantiate your AI Red Teaming Agent
red_team_agent = RedTeam(
azure_ai_project=azure_ai_project,
credential=DefaultAzureCredential()
)
async def main():
# Runs a red teaming scan on the simple callback target
red_team_result = await red_team_agent.scan(target=azure_openai_config)
return red_team_result
if __name__ == "__main__":
asyncio.run(main())
コンテンツフィルターの項目をすべてLowにすると...
コンテンツフィルターの項目をすべてmediumにすると...
モデル返答を対象
- 目的:会話型アプリやカスタムロジックを含む応答を評価。
- 特徴:advanced_callback で会話履歴を処理。
- 利用シーン:チャットボットや複雑なアプリケーションの安全性確認。
import os
from dotenv import load_dotenv
import asyncio
from azure.identity import DefaultAzureCredential
from azure.ai.evaluation.red_team import RedTeam
load_dotenv()
# 例: https://<account>.services.ai.azure.com/api/projects/<project>
azure_ai_project = os.environ["AZURE_AI_PROJECT"]
azure_openai_config = {
"azure_endpoint": os.environ["AZURE_OPEN_ENDPOINT"],
"api_key": os.environ["AZURE_OPENAI_KEY"], # not needed for entra ID based auth, use az login before running,
"azure_deployment": os.environ["AZURE_OPENAI_DEPLOYMENT"],
}
# Instantiate your AI Red Teaming Agent
red_team_agent = RedTeam(
azure_ai_project=azure_ai_project, # required
credential=DefaultAzureCredential() # required
)
# Create a more complex callback function that handles conversation state
async def advanced_callback(messages, _stream=False, _session_state=None, _context=None):
# Extract the latest message from the conversation history
messages_list = [{"role": message.role, "content": message.content}
for message in messages]
# Here, we're just simulating a response
response = "I'm an AI assistant that follows safety guidelines. I cannot provide harmful content."
# Format the response to follow the expected chat protocol format
formatted_response = {
"content": response,
"role": "assistant"
}
return {"messages": [formatted_response]}
async def main():
# Runs a red teaming scan on the simple callback target
red_team_result = await red_team_agent.scan(target=advanced_callback)
return red_team_result
if __name__ == "__main__":
asyncio.run(main())
4つのアプローチ比較表
アプローチ | 対象 | 特徴 | 利用シーン |
---|---|---|---|
固定文言に対する攻撃 | コールバック関数 | 最小構成でテスト | 初期検証や動作確認 |
カテゴリ絞り込み | コールバック関数 | リスクカテゴリを指定可能 | 特定リスクにフォーカスした評価 |
モデル構成を対象 | Azure OpenAIモデル | 実運用モデルを直接攻撃 | 本番前の安全性評価 |
モデル返答を対象 | 会話アプリ(カスタム応答) | 状態管理や複雑なロジックを含む応答を評価 | チャットボットや複雑アプリ |
まとめ
生成AIの普及により、従来のセキュリティ対策だけでは防ぎきれない新たなリスクが増えています。
AI Red Teaming Agent は、こうしたリスクを自動的に検出し、攻撃成功率(ASR)という定量的な指標で評価できる強力なツールです。
これらを活用することで、モデルの安全性を継続的に評価し、本番環境でのリスクを最小化できます。
今後は、攻撃レベル(基本・中級・上級)を組み合わせた高度なテストや、CI/CDパイプラインへの統合を検討することで、より実践的なセキュリティ対策が可能になります。
参考記事
Discussion