Включение трассировки и сбор отзывов для развертывания потока
Внимание
Элементы, обозначенные в этой статье как (предварительная версия), сейчас предлагаются в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания, и мы не рекомендуем ее для рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий 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
.
Примечание.
Для развертывания потока запросов необходимо использовать последний базовый образ потока запроса, чтобы он поддерживал 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.
- Откройте Application Insights и выберите "Использование" и выберите "Затраты " в области навигации слева. Выберите пользовательские метрики (предварительная версия) и выберите "С измерениями" и сохраните изменения.
- Выберите вкладку "Метрики" в области навигации слева. Выберите стандартные метрики потока запросов из пространства имен метрик, и вы можете просмотреть метрики из раскрывающегося списка метрик с различными методами агрегирования.
Сбор отзывов и отправка в 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". Используйте этот экспортер, если вы хотите настроить собственную логику обработки диапазона и собственный целевой объект трассировки.