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


Мониторинг качества и использования токенов в развернутых приложениях с потоковой обработкой.

Это важно

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

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

Примечание.

Чтобы улучшить способ непрерывного мониторинга развернутых приложений (кроме потока запросов), рассмотрите возможность использования онлайн-оценки ИИ Azure.

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

Интеграция для мониторинга развертывания потока запросов позволяет выполнять следующие действия.

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

Предпосылки

Прежде чем выполнить действия, описанные в этой статье, убедитесь, что у вас есть следующие предварительные требования:

  • Подписка Azure с допустимым методом оплаты. Бесплатные или пробные подписки Azure не поддерживаются для этого сценария. Если у вас нет подписки Azure, создайте платную учетную запись Azure, чтобы начать работу.
  • Проект Azure AI Foundry.
  • Поток команд, готовый к развертыванию. Если у вас его нет, см. Разработка потока запроса.
  • Управление доступом на основе ролей Azure используется для предоставления доступа к операциям на портале Azure AI Foundry. Чтобы выполнить действия, описанные в этой статье, учетная запись пользователя должна быть назначена роли разработчика ИИ Azure в группе ресурсов. Дополнительные сведения о разрешениях см. в статье "Управление доступом на основе ролей" на портале Azure AI Foundry.

Требования к метрикам мониторинга

Генеративные предварительно обученные языковые модели преобразователей (GPT) создают метрики мониторинга, настроенные с конкретными инструкциями оценки (шаблонами запросов). Эти модели служат оценочными моделями для задач преобразования последовательностей. Использование этого метода для создания метрик мониторинга показывает сильные эмпирические результаты и высокую корреляцию с человеческим решением по сравнению со стандартными метриками оценки ИИ. Дополнительные сведения об оценке потоков подсказок см. в статье «Отправка пакетного теста и оценка потока» и «Оценка и мониторинг метрик для генеративного ИИ».

Следующие модели GPT создают метрики мониторинга. Эти модели GPT поддерживаются с мониторингом и настроены в качестве ресурса Azure OpenAI:

  • GPT-3.5 Turbo
  • GPT-4
  • GPT-4-32k

Поддерживаемые метрики для мониторинга

Для мониторинга поддерживаются следующие метрики.

Метрика Описание
Заземленность Измеряет, насколько хорошо созданные модели ответы соответствуют данным из исходных данных (определяемый пользователем контекст).)
Уместность Измеряет степень, в которой созданные моделью ответы относятся к заданным вопросам и непосредственно связаны с заданными вопросами.
Согласованность Измеряет степень, в которой ответы, сгенерированные моделью, логически согласованы и связаны.
Беглость Измеряет грамматическую корректность ответа, предсказанного генеративным искусственным интеллектом.

Сопоставление имен столбцов

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

Имя входного столбца Определение Обязательный или необязательный
Вопрос Исходный запрос (также известный как "входные данные" или "вопрос"). Обязательно
Ответ Окончательное завершение вызова API, возвращаемого (также известное как "выходные данные" или "ответ"). Обязательно
Контекст Все данные контекста, отправляемые вызову API, вместе с исходным запросом. Например, если вы надеетесь получить результаты поиска только из определенных сертифицированных источников информации или веб-сайтов, можно определить этот контекст в шагах оценки. Необязательно

Параметры, необходимые для метрик

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

Метрика Вопрос Ответ Контекст
Согласованность Обязательно Обязательно -
Беглость Обязательно Обязательно -
Заземленность Обязательно Обязательно Обязательно
Уместность Обязательно Обязательно Обязательно

Дополнительные сведения о конкретных требованиях к сопоставлению данных для каждой метрики см. в разделе "Требования к метрику запроса и ответа".

Настройка мониторинга для потока подсказок

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

Разверните ваше приложение процесса подсказок с инферентным анализом данных.

В этом разделе объясняется, как развернуть поток подсказок с включенным сбором данных для вывода. Чтобы получить информацию о том, как развернуть ваш поток подсказок, см. статью Развертывание потока для вывода в режиме реального времени.

  1. Войдите в Azure AI Foundry.

  2. Если вы еще не находитесь в проекте, выберите его.

  3. На левой панели выберите поток запроса.

  4. Выберите созданный ранее поток запроса.

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

  5. Убедитесь, что поток выполняется успешно, и что необходимые входные и выходные данные настроены для метрик, которые необходимо оценить.

    Предоставление минимальных обязательных параметров (вопрос/входные данные и ответ/выходные данные) предоставляет только две метрики: согласованность и беглость. Необходимо настроить поток, как описано в разделе "Требования к метрикам мониторинга". В этом примере в качестве входных данных потока используется question (вопрос) и chat_history (контекст), а answer в качестве выходных данных потока используется (ответ).

  6. Выберите «Развернуть», чтобы начать развертывание потока.

    Снимок экрана, показывающий редактор потока подсказок с кнопкой

  7. В окне развертывания убедитесь, что включен сбор данных для выводов для беспрепятственного сбора данных выводов вашего приложения в хранилище BLOB-объектов Azure. Эта коллекция данных требуется для мониторинга.

    Снимок экрана: основные параметры мастера развертывания.

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

  9. На странице Проверка проверьте конфигурацию развертывания и щелкните по элементу Создать, чтобы развернуть поток.

    Снимок экрана: страница проверки в мастере развертывания со всеми параметрами завершена.

    По умолчанию все входные и выходные данные развернутого приложения вопросного потока собираются в объектное хранилище. При вызове развертывания данные собираются для используемого монитора.

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

    Снимок экрана: страница тестирования развертывания.

    Для мониторинга требуется, чтобы по крайней мере одна точка данных была получена из другого источника, а не из вкладки "Тест" в развертывании. Мы рекомендуем использовать REST API, доступный на вкладке "Использование ", чтобы отправить примеры запросов в развертывание. Дополнительные сведения о отправке примеров запросов в развертывание см. в статье "Создание онлайн-развертывания".

Настройка мониторинга

В этом разделе вы узнаете, как настроить мониторинг для вашего развернутого приложения потока подсказок.

  1. На левой панели перейдите в раздел "Мои активы>" Модели и конечные точки".

  2. Выберите развертывание потока подсказок, которое вы создали.

  3. В поле «Включить мониторинг качества генерации» выберите «Включить».

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

  4. Начните настраивать мониторинг, выбрав нужные метрики.

  5. Убедитесь, что имена столбцов сопоставлены из вашего потока, как указано в сопоставлении имен столбцов.

  6. Выберите значения подключения Azure OpenAI и развертывания, которые вы хотите использовать для мониторинга вашего приложения с потоком запросов.

  7. Выберите дополнительные параметры, чтобы просмотреть дополнительные параметры для настройки.

    Снимок экрана: столбцы, сопоставленные для метрик мониторинга.

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

    Снимок экрана: дополнительные параметры при сопоставлении столбцов для метрик мониторинга.

    Если сбор данных не включен для развертывания, создание монитора позволит собирать данные вывода результатов в ваше хранилище BLOB-объектов. Эта задача отключает развертывание на несколько минут.

  9. Нажмите кнопку "Создать", чтобы создать монитор.

Потребление результатов мониторинга

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

  1. Перейдите на вкладку "Мониторинг" (предварительная версия) в развертывании, чтобы просмотреть результаты мониторинга. Здесь вы увидите обзор результатов мониторинга во время выбранного периода времени. Используйте средство выбора дат, чтобы изменить период времени мониторинга данных. В этом обзоре доступны следующие метрики:

    • Общее количество запросов: общее количество запросов, отправленных в развертывание в течение выбранного периода времени.
    • Общее количество маркеров: общее количество маркеров, используемых развертыванием в течение выбранного периода времени.
    • Количество маркеров запроса: количество маркеров запроса, используемых развертыванием в течение выбранного периода времени.
    • Количество маркеров завершения: количество маркеров завершения, используемых развертыванием в течение выбранного периода времени.
  2. Просмотрите метрики на вкладке "Использование маркеров ". (Эта вкладка выбрана по умолчанию.) Здесь вы можете просмотреть использование маркеров приложения с течением времени. С течением времени также можно просмотреть распределение маркеров запроса и завершения. Можно изменить значение области тренда, чтобы отслеживать все маркеры во всем приложении или использование маркеров для конкретного развертывания (например, GPT-4), используемого в вашем приложении.

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

  3. Перейдите на вкладку "Качество создания" , чтобы отслеживать качество приложения с течением времени. На диаграмме времени отображаются следующие метрики:

    • Число нарушений. Число нарушений для заданной метрики (например, беглость) — это сумма нарушений в течение выбранного периода времени. Нарушение метрики возникает, когда метрики вычисляются (по умолчанию ежедневно), если вычисляемое значение для метрики падает ниже заданного порогового значения.
    • Средняя оценка: средняя оценка для заданной метрики (например, беглость) — это сумма показателей для всех экземпляров (или запросов), разделенных на количество экземпляров (или запросов) в течение выбранного периода времени.

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

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

  4. На вкладке "Мониторинг ( предварительная версия) можно также просмотреть полную таблицу всех примеров запросов, отправленных в развертывание в течение выбранного периода времени.

    Мониторинг задает частоту выборки по умолчанию на 10 %. Например, если 100 запросов отправляются в развертывание, из них отбирается 10 и используются для вычисления метрик качества генерации. Вы можете настроить частоту выборки в параметрах.

    Снимок экрана с кнопкой

  5. Нажмите кнопку "Трассировка" справа от строки в таблице, чтобы просмотреть сведения о трассировке для этого запроса. Это представление предоставляет подробные сведения о трассировке запроса к вашему приложению.

    Снимок экрана, показывающий сведения о трассировке.

  6. Закройте представление трассировки.

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

    • Число запросов
    • Задержка
    • Уровень ошибок

    Снимок экрана, на котором показана операционная вкладка развертывания.

Результаты на вкладке Мониторинг (предварительная версия) развертывания предоставляют аналитические сведения, позволяющие заранее повысить производительность приложения prompt flow.

Расширенная конфигурация мониторинга с помощью пакета SDK версии 2

Мониторинг также поддерживает расширенные параметры конфигурации с помощью пакета SDK версии 2. Поддерживаются следующие сценарии.

Включение мониторинга использования токенов

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

from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
    MonitorSchedule,
    CronTrigger,
    MonitorDefinition,
    ServerlessSparkCompute,
    MonitoringTarget,
    AlertNotification,
    GenerationTokenStatisticsSignal,
)
from azure.ai.ml.entities._inputs_outputs import Input
from azure.ai.ml.constants import MonitorTargetTasks, MonitorDatasetContext

# Authentication package
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()

# Update your Azure resources details
subscription_id = "INSERT YOUR SUBSCRIPTION ID"
resource_group = "INSERT YOUR RESOURCE GROUP NAME"
project_name = "INSERT YOUR PROJECT NAME" # This is the same as your Azure AI Foundry project name
endpoint_name = "INSERT YOUR ENDPOINT NAME" # This is your deployment name without the suffix (e.g., deployment is "contoso-chatbot-1", endpoint is "contoso-chatbot")
deployment_name = "INSERT YOUR DEPLOYMENT NAME"

# These variables can be renamed but it is not necessary
monitor_name ="gen_ai_monitor_tokens" 
defaulttokenstatisticssignalname ="token-usage-signal" 

# Determine the frequency to run the monitor, and the emails to recieve email alerts
trigger_schedule = CronTrigger(expression="15 10 * * *")
notification_emails_list = ["[email protected]", "[email protected]"]

ml_client = MLClient(
    credential=credential,
    subscription_id=subscription_id,
    resource_group_name=resource_group,
    workspace_name=project_name,
)

spark_compute = ServerlessSparkCompute(instance_type="standard_e4s_v3", runtime_version="3.3")
monitoring_target = MonitoringTarget(
    ml_task=MonitorTargetTasks.QUESTION_ANSWERING,
    endpoint_deployment_id=f"azureml:{endpoint_name}:{deployment_name}",
)

# Create an instance of a token statistic signal
token_statistic_signal = GenerationTokenStatisticsSignal()

monitoring_signals = {
    defaulttokenstatisticssignalname: token_statistic_signal,
}

monitor_settings = MonitorDefinition(
compute=spark_compute,
monitoring_target=monitoring_target,
monitoring_signals = monitoring_signals,
alert_notification=AlertNotification(emails=notification_emails_list),
)

model_monitor = MonitorSchedule(
    name = monitor_name,
    trigger=trigger_schedule,
    create_monitor=monitor_settings
)

ml_client.schedules.begin_create_or_update(model_monitor)

Включите мониторинг качества генерации

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

from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
    MonitorSchedule,
    CronTrigger,
    MonitorDefinition,
    ServerlessSparkCompute,
    MonitoringTarget,
    AlertNotification,
    GenerationSafetyQualityMonitoringMetricThreshold,
    GenerationSafetyQualitySignal,
    BaselineDataRange,
    LlmData,
)
from azure.ai.ml.entities._inputs_outputs import Input
from azure.ai.ml.constants import MonitorTargetTasks, MonitorDatasetContext

# Authentication package
from azure.identity import DefaultAzureCredential

credential = DefaultAzureCredential()

# Update your Azure resources details
subscription_id = "INSERT YOUR SUBSCRIPTION ID"
resource_group = "INSERT YOUR RESOURCE GROUP NAME"
project_name = "INSERT YOUR PROJECT NAME" # This is the same as your Azure AI Foundry project name
endpoint_name = "INSERT YOUR ENDPOINT NAME" # This is your deployment name without the suffix (e.g., deployment is "contoso-chatbot-1", endpoint is "contoso-chatbot")
deployment_name = "INSERT YOUR DEPLOYMENT NAME"
aoai_deployment_name ="INSERT YOUR AOAI DEPLOYMENT NAME"
aoai_connection_name = "INSERT YOUR AOAI CONNECTION NAME"

# These variables can be renamed but it is not necessary
app_trace_name = "app_traces"
app_trace_Version = "1"
monitor_name ="gen_ai_monitor_generation_quality" 
defaultgsqsignalname ="gsq-signal"

# Determine the frequency to run the monitor and the emails to receive email alerts
trigger_schedule = CronTrigger(expression="15 10 * * *")
notification_emails_list = ["[email protected]", "[email protected]"]

ml_client = MLClient(
    credential=credential,
    subscription_id=subscription_id,
    resource_group_name=resource_group,
    workspace_name=project_name,
)

spark_compute = ServerlessSparkCompute(instance_type="standard_e4s_v3", runtime_version="3.3")
monitoring_target = MonitoringTarget(
    ml_task=MonitorTargetTasks.QUESTION_ANSWERING,
    endpoint_deployment_id=f"azureml:{endpoint_name}:{deployment_name}",
)

# Set thresholds for the passing rate (0.7 = 70%)
aggregated_groundedness_pass_rate = 0.7
aggregated_relevance_pass_rate = 0.7
aggregated_coherence_pass_rate = 0.7
aggregated_fluency_pass_rate = 0.7

# Create an instance of a gsq signal
generation_quality_thresholds = GenerationSafetyQualityMonitoringMetricThreshold(
    groundedness = {"aggregated_groundedness_pass_rate": aggregated_groundedness_pass_rate},
    relevance={"aggregated_relevance_pass_rate": aggregated_relevance_pass_rate},
    coherence={"aggregated_coherence_pass_rate": aggregated_coherence_pass_rate},
    fluency={"aggregated_fluency_pass_rate": aggregated_fluency_pass_rate},
)
input_data = Input(
    type="uri_folder",
    path=f"{endpoint_name}-{deployment_name}-{app_trace_name}:{app_trace_Version}",
)
data_window = BaselineDataRange(lookback_window_size="P7D", lookback_window_offset="P0D")
production_data = LlmData(
    data_column_names={"prompt_column": "question", "completion_column": "answer", "context_column": "context"},
    input_data=input_data,
    data_window=data_window,
)

gsq_signal = GenerationSafetyQualitySignal(
    connection_id=f"/subscriptions/{subscription_id}/resourceGroups/{resource_group}/providers/Microsoft.MachineLearningServices/workspaces/{project_name}/connections/{aoai_connection_name}",
    metric_thresholds=generation_quality_thresholds,
    production_data=[production_data],
    sampling_rate=1.0,
    properties={
        "aoai_deployment_name": aoai_deployment_name,
        "enable_action_analyzer": "false",
        "azureml.modelmonitor.gsq_thresholds": '[{"metricName":"average_fluency","threshold":{"value":4}},{"metricName":"average_coherence","threshold":{"value":4}}]',
    },
)

monitoring_signals = {
    defaultgsqsignalname: gsq_signal,
}

monitor_settings = MonitorDefinition(
compute=spark_compute,
monitoring_target=monitoring_target,
monitoring_signals = monitoring_signals,
alert_notification=AlertNotification(emails=notification_emails_list),
)

model_monitor = MonitorSchedule(
    name = monitor_name,
    trigger=trigger_schedule,
    create_monitor=monitor_settings
)

ml_client.schedules.begin_create_or_update(model_monitor)

После создания монитора из пакета SDK можно использовать результаты мониторинга на портале Azure AI Foundry.

  • Дополнительные сведения о том, что можно сделать в Azure AI Foundry.
  • Получите ответы на часто задаваемые вопросы о Azure AI Foundry.