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


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

Внимание

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

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

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

Необходимые компоненты

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

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

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

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

Примечание.

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

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

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

Если вы используете пакет SDK или CLI, можно добавить свойство app_insights_enabled: true в файл yaml развертывания, который собирает данные в проект, связанный с application insights.

app_insights_enabled: true

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

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.

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

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

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

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

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

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

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

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

Ниже приведен пример кода, в котором показано, как оценить развернутую управляемую конечную точку трассировки и отправить отзыв в тот же диапазон трассировки запроса оценки. Поток содержит входные данные и chat_historyвыходные question данные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 may 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

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