Включение отслеживания и сбор отзывов о развертывании потока (предварительная версия)

Предупреждение

Разработка функций потока запросов закончилась 20 апреля 2026 г. Функция будет полностью прекращена 20 апреля 2027 г. В дату выхода на пенсию, Prompt Flow переходит в режим только для чтения. Существующие потоки будут продолжать работать до этой даты.

Рекомендуемое действие: Перенесите рабочие нагрузки Prompt Flow на Microsoft Agent Framework до 20 апреля 2027 г.

Примечание

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

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

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

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

Развертывание потока вывода в режиме реального времени

После правильного тестирования вашего потока, будь это flex flow или DAG flow, вы можете развернуть этот поток в рабочей среде. В этой статье мы используем развернуть поток для управляемых онлайн-узлов Машинное обучение Azure как пример. Для гибких потоков необходимо подготовить flow.flex.yaml файл вместо flow.dag.yaml.

Вы также можете развернуть на других платформах, таких как контейнер Docker, кластер Kubernetes и т. д.

Примечание

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

Включите трассировку и сбор системных метрик для вашего развертывания

Если вы используете пользовательский интерфейс студии для развертывания, то вы можете включить диагностику Application Insights в разделе «Дополнительные настройки» — на этапе развертывания мастера развертывания, где данные трассировки и системные метрики собираются в Application Insights, связанную с рабочей областью.

Если вы используете пакет SDK или CLI, вы можете добавить свойство app_insights_enabled: true в файл YAML развертывания, который собирает данные в рабочее пространство, связанное с Application Insights. Вы также можете указать другие Application Insights с помощью переменной среды APPLICATIONINSIGHTS_CONNECTION_STRING в файле yaml развертывания следующим образом. Строку подключения для Application Insights можно найти на странице обзора портала Azure.

# below is the property in deployment yaml
# app_insights_enabled: true

# you can also use the environment variable
environment_variables:
  APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>

Примечание

Если вы установите только app_insights_enabled: true, но ваша рабочая область не имеет связанного сервиса Application Insights, развертывание не завершится ошибкой, однако сбор данных не будет производится.

Если вы одновременно указываете и app_insights_enabled: true, и указанную выше переменную среды, данные трассировки и метрики будут отправляться в рабочую область, связанную с Application Insights. Таким образом, если вы хотите указать другую службу Application Insights, необходимо сохранить только эту переменную среды.

При развертывании на других платформах можно также использовать переменную APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string> среды для сбора данных трассировки и метрик для speicifed Application Insights.

Просмотр данных трассировки в Application Insights

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

Подробные сведения о трассировке можно просмотреть в указанном сервисе Application Insights. На следующем снимках экрана показан пример события развернутого потока, содержащего несколько узлов. В Application Insights —> Investigate —> Поиск транзакций, вы можете выбрать каждый узел для просмотра его подробной трассировки.

Записи событий типа Dependency фиксируют вызовы в развертываниях. Имя этого события — это имя папки потока. Дополнительные сведения о поиске транзакций и диагностике в Application Insights.

Снимок экрана: трассировка данных в Application Insights.

Просмотр системных метрик в Application Insights

Имя метрик Тип Размеры Описание
потребление токенов Счетчик поток
- узел
- llm_engine
- token_type: prompt_tokens: маркеры входных данных API LLM; completion_tokens: маркеры ответа LLM API; total_tokens = prompt_tokens + completion tokens
Метрики использования токенов OpenAI
задержка потока Гистограмма поток, код_ответа, потоковая передача, тип_ответа стоимость выполнения запроса, response_type означает, является ли он полным/firstbyte/lastbyte
flow_request Счетчик поток, код_ответа, исключение, стриминг количество запросов потока
задержка_узла Гистограмма поток, узел, статус выполнения Затраты на выполнение узла
запрос узла Счетчик поток, узел, исключение, статус выполнения Число выполнения узла
Задержка RPC Гистограмма поток, узел, api_call RPC стоимость
rpc_запрос Счетчик Поток, узел, вызов_api, исключение число RPC
flow_streaming_response_duration Гистограмма Поток стоимость отправки потоковой передачи ответа, от отправки первого байта до отправки последнего байта

На портале Azure можно найти приложение Application Insights по умолчанию для вашей рабочей области.

Откройте Application Insights и выберите Использование и оценочные затраты в левой области навигации. Выберите пользовательские метрики (предварительная версия) и выберите "С измерениями" и сохраните изменения.

Снимок экрана: включение многомерных метрик.

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

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

Сбор отзывов и отправка в Application Insights

Служба потоков запросов предоставляет новый /feedback API для сбора отзывов. Нагрузка обратной связи может быть в любом формате данных JSON. Обслуживание PF помогает клиенту сохранять данные обратной связи в интервал трассировки. Данные будут сохранены в целевую конфигурацию экспортера трассировки, настроенную клиентом. Он также поддерживает стандартное распространение контекста трассировки OpenTelemetry, учитывая контекст трассировки, заданный в заголовке запроса, и используя его в качестве родительского контекста диапазона запроса. Вы можете использовать функцию распределенной трассировки для сопоставления трассировки отзывов с трассировкой запроса чата.

Ниже приведен пример кода, в котором показано, как выполнить оценку потока на развернутой управляемой конечной точке с включенным трассированием и отправить отзыв в ту же область трассировки, что и запрос на оценку. Поток имеет входные данные question и chat_hisotry, и выходные данные answer. После оценки конечной точки мы собираем отзыв и отправляем в Application Insights, указанный при развертывании потока. Необходимо заполнить api_key значение или изменить код в соответствии с вашим вариантом использования.

import urllib.request
import json
import os
import ssl
from opentelemetry import trace, context
from opentelemetry.baggage.propagation import W3CBaggagePropagator
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
from opentelemetry.sdk.trace import TracerProvider

# Initialize your tracer
tracer = trace.get_tracer("my.genai.tracer")
trace.set_tracer_provider(TracerProvider())

# Request data goes here
# The example below assumes JSON formatting which may be updated
# depending on the format your endpoint expects.
# More information can be found here:
# https://learn.microsoft.com/azure/machine-learning/how-to-deploy-advanced-entry-script
data = {
    "question": "hello",
    "chat_history": []
}

body = str.encode(json.dumps(data))

url = 'https://basic-chat-endpoint.eastus.inference.ml.azure.com/score'
feedback_url = 'https://basic-chat-endpoint.eastus.inference.ml.azure.com/feedback'
# Replace this with the primary/secondary key, AMLToken, or Microsoft Entra ID token for the endpoint
api_key = ''
if not api_key:
    raise Exception("A key should be provided to invoke the endpoint")

# The azureml-model-deployment header will force the request to go to a specific deployment.
# Remove this header to have the request observe the endpoint traffic rules
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key), 'azureml-model-deployment': 'basic-chat-deployment' }

try:
    with tracer.start_as_current_span('genai-request') as span:

        ctx = context.get_current()
        TraceContextTextMapPropagator().inject(headers, ctx)
        print(headers)
        print(ctx)
        req = urllib.request.Request(url, body, headers)
        response = urllib.request.urlopen(req)

        result = response.read()
        print(result)

        # Now you can process the answer and collect feedback
        feedback = "thumbdown"  # Example feedback (modify as needed)

        # Make another request to save the feedback
        feedback_body = str.encode(json.dumps(feedback))
        feedback_req = urllib.request.Request(feedback_url, feedback_body, headers)
        urllib.request.urlopen(feedback_req)


except urllib.error.HTTPError as error:
    print("The request failed with status code: " + str(error.code))

    # Print the headers - they include the requert ID and the timestamp, which are useful for debugging the failure
    print(error.info())
    print(error.read().decode("utf8", 'ignore'))

Трассировку запроса можно просмотреть вместе с отзывами в Application Insights.

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

Расширенное использование: экспорт трассировки в пользовательский сервис коллектора OpenTelemetry

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

Дальнейшие действия