Поделиться через


Запуск агента red teaming ai в облаке (предварительная версия)

Это важно

Элементы, обозначенные в этой статье как (предварительная версия), сейчас предлагаются в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания, и мы не рекомендуем ее для рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в разделе Supplemental Terms of Use for Microsoft Azure Previews.

Хотя агент Red Teaming AI может выполняться локально во время прототипирования и разработки для выявления рисков безопасности, их запуск в облаке позволяет выполнять следующие сценарии:

  • Подготовка к развертыванию ИИ с использованием имитации нападения осуществляется на более сложных сочетаниях стратегий атак и категорий рисков для более полного анализа,
  • Запуски непрерывной командной группы искусственного интеллекта после развертывания, которые можно запланировать для выполнения с заданными интервалами времени.
  • Сценарии риска, специфичные для агентства, поддерживающие минимально изолированную среду для проведения проверок красной командой искусственного интеллекта.

Предпосылки

  • Проект Foundry.
  • Пользователь Azure AI в проекте Foundry.
  • Python 3.9 или более поздней версии.
  • Для агентивных сценариев: уже существующий агент Foundry, развернутый в вашем проекте. Имя агента обязательно AZURE_AI_AGENT_NAME.

Начало работы

Сначала установите клиентскую программу проекта Майкрософт Foundry SDK, которая запускает агент ИИ для Red Teaming в облаке.

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

Затем задайте переменные среды для ресурсов Майкрософт 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.

Поддерживаемые целевые объекты

Запуск агента Red Teaming AI в облаке в настоящее время поддерживает только следующее:

  • Развертывания проектов Foundry
  • развертывание моделей Azure OpenAI
  • Агенты Foundry (запросы и агенты контейнера) в проекте Майкрософт Foundry в качестве целевого объекта.

Настройка целевой модели

Развертывание целевой модели можно настроить двумя способами:

Вариант 1: Развертывания проекта Foundry

Если вы используете развертывание моделей, которые являются частью проекта Foundry, введите имя развертывания напрямую в initialization_parameters.deployment_name поле при создании красной команды. Майкрософт рекомендует проверку подлинности без ключей через 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 к проекту Foundry.

  2. Получите имя подключения. После подключения учетной записи вы увидите соединение, созданное с сгенерированным именем в проекте Foundry.

  3. Настройте целевой объект: используйте формат "connectionName/deploymentName" конфигурации развертывания модели:

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

Создание красной команды искусственного интеллекта

Создайте красную команду для проведения одного или нескольких запусков, которые совместно используют источник данных и категории рисков.

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}")

Что это делает:

  • Создает красную команду для проведения всех упражнений по тестированию безопасности.
  • Настраивает красную команду с тремя встроенными оценщиками (Запрещенные Действия, Соблюдение Задач, Утечка Конфиденциальных Данных).

Вы получите:

  • Тело 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

Вы будете ссылать на него

  • через универсальный код ресурса (URI) в запросе file_idна создание запуска .

Проведение операции в красной команде

Запуск генерирует элементы из источника (например, таксономии) и проводит моделирование атаки на целевой агент с применением выбранных стратегий атаки.

# 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: многоэтапная глубина для сгенерированных элементов red-team
  • source.id: указывает на таксономию по URI идентификатора файла
  • target: агент под тестом (имя, версия, средства)

Вы получите

  • Объект выполнения, включая id (сохранить как {{eval_run_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}")