Запись отзывов конечных пользователей (предварительная версия)

Important

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

Собирайте обратную связь от конечных пользователей, такую как реакции «палец вверх» или «палец вниз» либо числовые шкалы оценок, из вашего ИИ-приложения и передавайте её в бэкенд наблюдаемости с использованием семантических соглашений OpenTelemetry (OTel). При регистрации отзывов пользователей можно сопоставлять субъективные сигналы качества с данными трассировки, измерять удовлетворенность пользователей с течением времени и постоянно улучшать агенты и модели.

Обзор

Журналирование отзывов конечных пользователей использует семантические соглашения OTel для формирования структурированных событий отзывов, связанных с конкретной трассировкой или спаном. Это означает, что данные обратной связи проходят через тот же конвейер телеметрии, что и ваши трассировки и метрики, обеспечивая единое представление о поведении приложения и настроениях пользователей.

Основные возможности:

  • Лайк или дизлайк: Записывайте бинарные сигналы одобрения от пользователя, связанные с конкретным ответом агента.
  • Шкала оценки: Захват числовых показателей, таких как 1–5 звезд, для оценки удовлетворенности пользователей.
  • Корреляция трассировки: Каждое событие обратной связи связывается с исходной трассой и спаном, что позволяет перейти от сводных метрик удовлетворенности к отдельным взаимодействиям.
  • Стандартный транспорт OpenTelemetry: События обратной связи отправляются через API событий OpenTelemetry, поэтому они экспортируются через ваш существующий конвейер OpenTelemetry в Application Insights или любую совместимую серверную систему.

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

  • Проект Foundry с подключённым ресурсом Application Insights. См. Настройка трассировки.

  • Инструментирование OpenTelemetry, настроенное в вашем приложении. Инструкции по настройке см. в разделе Настроить трассировку в Microsoft Foundry.

  • Python версии 3.9 или более поздней версии или поддерживаемый язык с поддержкой пакета SDK OTel.

  • Установлены пакеты azure-ai-projects и azure-monitor-opentelemetry:

    pip install "azure-ai-projects>=2.0.0" azure-monitor-opentelemetry python-dotenv
    

Типы оценки

Записывайте отзывы пользователей как событие OpenTelemetry. Система поддерживает два типа оценки:

Тип Description Отрисовка пользовательского интерфейса Диапазон оценки
Бинарный Оценка по принципу «пройдено/не пройдено». Пальцы вверх или пальцы вниз 0.0 (сбой) или 1.0 (успех)
5-балльная шкала Лайкерта Порядковая оценка по шкале 5 точек. 5-звездочная оценка или шкала Likert (строго не согласны → строго согласиться) 1.0 до 5.0

Два исходных типа могут предоставлять отзывы:

  • Builder: Человек, выполняющий оценку с использованием решения Microsoft для наблюдаемости, например в Foundry или на портале Azure Monitor.
  • Конечный пользователь: Человек, выполняющий оценку через интерфейс приложения, за которым ведёт мониторинг решение Microsoft для наблюдаемости.

Атрибуты события

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

Выведите двоичную оценку (большой палец вверх или вниз)

Бинарные оценки фиксируют обратную связь в формате «прошёл/не прошёл». Оценка должна быть 0.0 (сбой) или 1.0 (проход).

Правила:

  • gen_ai.evaluation.score.value: 0.0 или 1.0
  • gen_ai.evaluation.score.label: "fail" или "pass"
  • internal_properties.gen_ai.evaluation.type: "boolean"
  • internal_properties.gen_ai.evaluation.min_value: 0.0
  • internal_properties.gen_ai.evaluation.max_value: 1.0
  • internal_properties.gen_ai.evaluation.threshold: 1.0
  • internal_properties.gen_ai.evaluation.desirable_direction: "increase"

Пример. Конечный пользователь дает пальцы вверх

Пример запуска см. в разделе sample_human_evaluations.py.

Выдайте оценку по 5-балльной шкале Лайкерта

Оценки по пятибалльной шкале Лайкерта позволяют собирать порядковую обратную связь по шкале от 1 до 5. Оценка, равная пороговому значению или превышающая его (по умолчанию 3.0), считается прошедшей.

Правила:

  • gen_ai.evaluation.score.value: значение между 1.0 и 5.0
  • gen_ai.evaluation.score.label: "pass" значение оценки ≥ пороговое значение, в противном случае "fail"
  • internal_properties.gen_ai.evaluation.type: "ordinal"
  • internal_properties.gen_ai.evaluation.min_value: 1.0
  • internal_properties.gen_ai.evaluation.max_value: 5.0
  • internal_properties.gen_ai.evaluation.threshold: 3.0
  • internal_properties.gen_ai.evaluation.desirable_direction: "increase"

Пример: Builder оценивает релевантность в портале Foundry

Пример запуска см. в разделе sample_human_evaluations.py.

Просмотр отзывов в Application Insights

После экспорта событий обратной связи через конвейер OTel их можно запросить в Application Insights с помощью KQL:

customEvents
| where name == "gen_ai.evaluation.result"
| extend
    eval_name = tostring(customDimensions["gen_ai.evaluation.name"]),
    score = todouble(customDimensions["gen_ai.evaluation.score.value"]),
    label = tostring(customDimensions["gen_ai.evaluation.score.label"]),
    eval_source = tostring(customDimensions["microsoft.gen_ai.human_evaluation.source"]),
    internal = parse_json(tostring(customDimensions["internal_properties"]))
| extend
    eval_type = tostring(internal["gen_ai.evaluation.type"])
| where eval_source in ("builder", "end_user")
| summarize
    total = count(),
    pass_rate = round(countif(label == "pass") * 100.0 / count(), 1),
    avg_score = round(avg(score), 2)
  by eval_name, eval_type, bin(timestamp, 1h)
| order by timestamp desc