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

Применяется только к:Портал Foundry (классический). Эта статья недоступна для нового портала Foundry. Дополнительные сведения о новом портале.

Примечание

Содержание в новой документации Microsoft Foundry может открываться по ссылкам в этой статье вместо документации Foundry (классической версии), которую вы просматриваете сейчас.

Важно

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

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

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

Примечание

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

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

Важно

Эта статья предоставляет устаревшую поддержку для проектов на основе концентраторов. Он не будет работать для проектов Foundry. Узнайте , какой у меня тип проекта?

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

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

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

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

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

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

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

Если вы используете портал Foundry для развертывания, выберите> в мастере развертываниядополнительные параметры диагностики>Application Insights. С помощью этого метода вы собираете данные трассировки и системные метрики в проект, связанный с Application Insights.

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

app_insights_enabled: true

Вы также можете указать другие данные приложения с помощью переменной среды APPLICATIONINSIGHTS_CONNECTION_STRING в файле развертывания YAML. Строку подключения для Application Insights можно найти на странице Overview на портале Azure.

environment_variables:
  APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>

Примечание

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

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

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

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

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

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

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

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

Имя метрики Тип Размеры Описание
token_consumption Счетчик - flow
- node
- llm_engine
- token_type: prompt_tokensмаркеры входных данных API LLM; completion_tokens: маркеры ответа API LLM; total_tokens = prompt_tokens + completion tokens
Метрики потребления токенов OpenAI.
flow_latency Гистограмма flow, response_code, streaming, response_type Стоимость response_typeвыполнения запроса означает, является ли он полным или первым байтом или последним байтом.
flow_request Счетчик flow, response_code, exception, streaming Число запросов в потоке.
node_latency Гистограмма flow node run_status Стоимость выполнения узла.
node_request Счетчик flow, node, exception, run_status Количество выполнений узла.
rpc_latency Гистограмма flow node api_call Стоимость вызова удаленной процедуры.
rpc_request Счетчик flow, node, api_call, exception Число вызовов удаленной процедуры.
flow_streaming_response_duration Гистограмма flow Затраты на отправку потокового ответа, начиная с отправки первого байта и до отправки последнего байта.

Метрики Application Insights по умолчанию можно найти на странице обзора рабочей области на портале Azure.

  1. Откройте Application Insights и выберите "Использование" и "Предполагаемые затраты " на левой панели. Выберите пользовательские метрики (предварительная версия)>С измерениями и сохраните изменения.
  2. Перейдите на вкладку "Метрики" в левой области. В пространстве имен метрик выберите стандартные метрики потока запросов. Вы можете изучить метрики из раскрывающегося списка метрик с различными методами агрегирования.

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

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

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

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 might be updated
# depending on the format your endpoint expects.
data = {
    "question": "hello",
    "chat_history": []
}

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

url = 'https://basic-chat-endpoint-0506.eastus.inference.ml.azure.com/score'
feedback_url = 'https://basic-chat-endpoint-0506.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.

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

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