Оцените агентов искусственного интеллекта

Оценка необходима для обеспечения соответствия агенту стандартам качества и безопасности перед развертыванием. Выполняя оценки во время разработки, вы устанавливаете базовые показатели производительности агента и можете задать пороги принятия, такие как 85% уровень выполнения задачи, прежде чем выпустить его для пользователей.

В этой статье вы узнаете, как провести оценку, ориентированную на агента Foundry или размещенного агента с использованием встроенных модулей для оценки качества, безопасности и поведения агента. В частности, вы:

  • Настройте клиент ПАКЕТА SDK для оценки.
  • Выберите оценщиков для оценки качества, безопасности и поведения агента.
  • Создайте тестовый набор данных и запустите оценку.
  • Интерпретируйте результаты и интегрируйте их в рабочий процесс.

Совет

Общие сведения об оценке моделей и приложений сгенерированных ИИ, включая пользовательские вычислители, различные источники данных и дополнительные параметры пакета SDK, см. в разделе "Выполнение вычислений из пакета SDK".

Необходимые условия

  • Python 3.8 или более поздней версии.
  • Проект Foundry с агентом или агентом в хостинге.
  • Развертывание OpenAI Azure с моделью GPT, поддерживающей завершение чата (например, gpt-4o или gpt-4o-mini).
  • Роль пользователя Azure AI в проекте Foundry.

Примечание

Некоторые функции оценки имеют региональные ограничения. Дополнительные сведения см. в поддерживаемых регионах .

Настройка клиента

Установите пакет SDK Для Foundry и настройте проверку подлинности:

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

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

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"]

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

Выбор оценщиков

Оценочные функции — это функции, которые оценивают ответы агента. Некоторые оценщики используют модели ИИ как судей, а другие используют правила или алгоритмы. Для оценки агента рассмотрим этот набор:

Эвалуатор Что он измеряет
Соблюдение задач Следует ли агент своим системным инструкциям?
Согласованность Является ли ответ логическим и хорошо структурированным?
Насилия Содержит ли ответ насильственный контент?

Для получения дополнительной информации о встроенных оценщиках, см. далее.

Чтобы создать собственные оценщики, см. раздел "Пользовательские оценщики".

Создание тестового набора данных

Создайте JSONL-файл с тестированными запросами для агента. Каждая строка содержит объект JSON с полем query :

{"query": "What's the weather in Seattle?"}
{"query": "Book a flight to Paris"}
{"query": "Tell me a joke"}

Отправьте этот файл в виде набора данных в проекте:

dataset = project_client.datasets.upload_file(
    name="agent-test-queries",
    version="1",
    file_path="./test-queries.jsonl",
)

Выполнить оценку

При выполнении оценки служба отправляет каждый тестовый запрос агенту, записывает ответ и применяет выбранные вычислители для оценки результатов.

Сначала настройте оценщиков. Каждому вычислителю требуется сопоставление данных, которое указывает ему, где найти входные данные:

  • {{item.X}} ссылается на поля из тестовых данных, например query.
  • {{sample.output_items}} ссылается на полный ответ агента, включая вызовы инструментов.
  • {{sample.output_text}} ссылается только на текст сообщения ответа.

Оценщики с поддержкой ИИ, такие как Соблюдение задачи и Когерентность, требуют имени развертывания модели в initialization_parameters. Значение должно соответствовать имени развертывания GPT в проекте — это оценочная модель, используемая для оценки ответов. Для некоторых оценщиков могут потребоваться дополнительные поля, например, определения инструментов или ground_truth. Дополнительные сведения см. в документации об оценке.

testing_criteria = [
    {
        "type": "azure_ai_evaluator",
        "name": "Task Adherence",
        "evaluator_name": "builtin.task_adherence",
        "data_mapping": {
            "query": "{{item.query}}",
            "response": "{{sample.output_items}}",
        },
        "initialization_parameters": {"deployment_name": model_deployment},
    },
    {
        "type": "azure_ai_evaluator",
        "name": "Coherence",
        "evaluator_name": "builtin.coherence",
        "data_mapping": {
            "query": "{{item.query}}",
            "response": "{{sample.output_text}}",
        },
        "initialization_parameters": {"deployment_name": model_deployment},
    },
    {
        "type": "azure_ai_evaluator",
        "name": "Violence",
        "evaluator_name": "builtin.violence",
        "data_mapping": {
            "query": "{{item.query}}",
            "response": "{{sample.output_text}}",
        },
    },
]

Затем создайте оценку. Оценка определяет схему тестовых данных и критерии тестирования. Он служит контейнером для нескольких запусков. Все запуски в рамках одной оценки соответствуют одной и той же схеме и производят одинаковый набор метрик. Эта согласованность важна для сравнения результатов между прогонами.

data_source_config = {
    "type": "custom",
    "item_schema": {
        "type": "object",
        "properties": {
            "query": {"type": "string"},
        },
        "required": ["query"],
    },
    "include_sample_schema": True,
}

evaluation = client.evals.create(
    name="Agent Quality Evaluation",
    data_source_config=data_source_config,
    testing_criteria=testing_criteria,
)

Наконец, создайте запуск, который отправляет тестовые запросы агенту и применяет вычислители:

eval_run = client.evals.runs.create(
    eval_id=evaluation.id,
    name="Agent Evaluation Run",
    data_source={
        "type": "azure_ai_target_completions",
        "source": {
            "type": "file_id",
            "id": dataset.id,
        },
        "input_messages": {
            "type": "template",
            "template": [{"type": "message", "role": "user", "content": {"type": "input_text", "text": "{{item.query}}"}}],
        },
        "target": {
            "type": "azure_ai_agent",
            "name": "my-agent",  # Replace with your agent name
            "version": "1",  # Optional; omit to use latest version
        },
    },
)

print(f"Evaluation run started: {eval_run.id}")

Совет

Этот пример подходит как для агентов, отвечающих на запросы, так и для размещенных агентов, использующих протокол ответов. Для размещенных агентов, использующих протокол вызовов, формат отличается— укажите объект JSON в свободной форме вместо структурированного шаблона. Дополнительные сведения и примеры кода см. в разделе "Протокол вызовов размещенного агента " в руководстве по оценке облака.

Интерпретация результатов

Оценки обычно выполняются в течение нескольких минут в зависимости от количества запросов. Выполните опрос и получите URL-адрес отчета, чтобы просмотреть результаты на портале Foundry Microsoft на вкладке Evaluations:

import time

# Wait for completion
while True:
    run = client.evals.runs.retrieve(run_id=eval_run.id, eval_id=evaluation.id)
    if run.status in ["completed", "failed"]:
        break
    time.sleep(5)

print(f"Status: {run.status}")
print(f"Report URL: {run.report_url}")

Снимок экрана, показывающий результаты оценки агента на портале Microsoft Foundry.

Агрегированные результаты

На уровне выполнения можно просмотреть агрегированные данные, включая количество успешных операций и ошибок, использование токенов для каждой модели и результаты для каждого оценщика.

{
    "result_counts": {
        "total": 3,
        "passed": 1,
        "failed": 2,
        "errored": 0
    },
    "per_model_usage": [
        {
            "model_name": "gpt-4o-mini-2024-07-18",
            "invocation_count": 6,
            "total_tokens": 9285,
            "prompt_tokens": 8326,
            "completion_tokens": 959
        },
        ...
    ],
    "per_testing_criteria_results": [
        {
            "testing_criteria": "Task Adherence",
            "passed": 1,
            "failed": 2
        },
        ... // remaining testing criteria
    ]
}

Данные на уровне строки

Каждый запуск оценки возвращает выходные элементы для каждой строки в тестовом наборе данных, обеспечивая подробную видимость производительности агента. Выходные элементы включают исходный запрос, ответ агента, отдельные результаты оценки и причины, а также использование маркеров:

{
    "object": "eval.run.output_item",
    "id": "1",
    "run_id": "evalrun_abc123",
    "eval_id": "eval_xyz789",
    "status": "completed",
    "datasource_item": {
        "query": "What's the weather in Seattle?",
        "response_id": "resp_abc123",
        "agent_name": "my-agent",
        "agent_version": "10",
        "sample.output_text": "I'd be happy to help with the weather! However, I need to check the current conditions. Let me look that up for you.",
        "sample.output_items": [
            ... // agent response messages with tool calls
        ]
    },
    "results": [
        {
            "type": "azure_ai_evaluator",
            "name": "Task Adherence",
            "metric": "task_adherence",
            "label": "pass",
            "reason": "Agent followed system instructions correctly",
            "threshold": 3,
            "passed": true,
            "sample":
            {
               ... // evaluator input/output and token usage
            }
        },
        ... // remaining evaluation results
    ]
}

Интеграция с рабочим процессом

  • Конвейер CI/CD: используйте оценку в качестве шлюза качества в конвейере развертывания. Подробные сведения об интеграции см. в разделе Run evaluations with GitHub Actions.
  • Мониторинг производства: контролируйте агента в производственной среде с помощью постоянной оценки. Инструкции по настройке см. в разделе "Настройка непрерывной оценки".

Оптимизация и сравнение версий

Используйте оценку для итерации и улучшения агента:

  1. Выполните оценку, чтобы определить слабые области. Используйте анализ кластера для поиска шаблонов и ошибок.
  2. Настройте инструкции или инструменты агента на основе результатов.
  3. Переоценка и сравнение запусков для измерения улучшения.
  4. Повторяйте до тех пор, пока не будут выполнены пороговые значения качества.