Compartir vía


Habilitación del seguimiento y recopilación de comentarios para una implementación de flujo

Importante

Los elementos marcados (versión preliminar) en este artículo se encuentran actualmente en versión preliminar pública. Esta versión preliminar se ofrece sin acuerdo de nivel de servicio y no se recomienda para las cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas. Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

Después de implementar una aplicación de IA generativa en producción, es posible que quiera mejorar su comprensión y optimizar el rendimiento. Los datos de seguimiento de cada solicitud, las métricas agregadas y los comentarios de los usuarios desempeñan roles críticos.

En este artículo, aprenderá a habilitar el seguimiento, recopilar métricas agregadas y recopilar comentarios del usuario durante el tiempo de inferencia de la implementación del flujo.

Nota:

Para mejorar la manera de realizar la supervisión continua de las aplicaciones implementadas (que no sea el flujo de avisos), considere la posibilidad de usar la evaluación en línea de Azure AI.

Requisitos previos

  • La CLI de Azure y la extensión de Azure Machine Learning para la CLI de Azure.
  • Un proyecto de Azure AI Foundry. Si aún no tiene un proyecto, puede crear uno aquí.
  • Una Application Insights. Si aún no tiene un recurso de Application Insights, puede crear uno aquí.
  • Los controles de acceso basados en roles de Azure se usan para conceder acceso a las operaciones en Azure Machine Learning. Para realizar los pasos descritos en este artículo, debe tener permisos de Propietario o Colaborador en el grupo de recursos seleccionado. Para más información, consulte Control de acceso basado en rol en el portal de Azure AI Foundry.

Implementación de un flujo para la inferencia en tiempo real

Después de probar el flujo correctamente, ya sea un flujo flexible o un flujo DAG, puede implementar el flujo en producción. En este artículo, usamos Implementación de un flujo para la inferencia en tiempo real como ejemplo. Para los flujos flexibles, debe preparar el archivo flow.flex.yaml en lugar de flow.dag.yaml.

También puede implementar en otras plataformas, como el contenedor Docker, el clúster de Kubernetes y mucho más.

Nota:

Debe usar la imagen base de flujo de avisos más reciente para implementar el flujo, de modo que admita la API de recopilación de seguimiento y comentarios.

Habilitación del seguimiento y recopilación de métricas del sistema para la implementación

Si usa el portal de Azure AI Foundry para la implementación, puede activar Diagnósticos de Application Insights en el paso Configuración avanzada>Implementación en el Asistente para implementación, de manera que los datos de seguimiento y las métricas del sistema se recopilen en el proyecto vinculado a Application Insights.

Si usa el SDK o la CLI, puede agregar una propiedad app_insights_enabled: true en el archivo yaml de implementación que recopila datos en el proyecto vinculado a Application Insights.

app_insights_enabled: true

También puede especificar otras Application Insights mediante una variable de entorno APPLICATIONINSIGHTS_CONNECTION_STRING en el archivo yaml de implementación como se indica a continuación. Puede encontrar la cadena de conexión de Application Insights en la página Información general de Azure Portal.

environment_variables:
  APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>

Nota:

Si solo establece app_insights_enabled: true pero el proyecto no tiene un recurso de Application Insights vinculado, la implementación no producirá un error, pero no se recopilarán datos.

Si especifica tanto app_insights_enabled: true como la variable de entorno anterior al mismo tiempo, los datos de seguimiento y las métricas se enviarán al proyecto vinculado a Application Insights. Por lo tanto, si desea especificar otra instancia de Application Insights, solo debe mantener la variable de entorno.

Si implementa en otras plataformas, también puede usar la variable de entorno APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string> para recopilar métricas y datos de seguimiento para la instancia de Application Insights especificada.

Visualización de datos de seguimiento en Application Insights

Los seguimientos registran eventos específicos o el estado de una aplicación durante la ejecución. Puede incluir datos sobre llamadas de función, valores variables, eventos del sistema y mucho más. Los seguimientos ayudan a desglosar los componentes de una aplicación en entradas y salidas discretas, lo que es fundamental para depurar y comprender una aplicación. Puede obtener más información sobre seguimientos aquí. Los datos de seguimiento siguen la especificación OpenTelemetry.

Puede ver el seguimiento detallado en la instancia de Application Insights especificada. En la captura de pantalla siguiente se muestra un ejemplo de un evento de un flujo implementado que contiene varios nodos. En Application Insights -> Investigar -> Búsqueda de transacciones, puede seleccionar cada nodo para ver su seguimiento detallado.

El tipo de Dependencia escribe las llamadas de registro de eventos de las implementaciones. El nombre de ese evento es el nombre de la carpeta de flujo. Obtenga más información sobre Búsqueda y diagnóstico de transacciones en Application Insights.

Visualización de métricas del sistema en Application Insights

Nombre de la métrica Tipo Dimensions Descripción
token_consumption counter - flow
- node
- llm_engine
- token_type: prompt_tokens: tokens de entrada de la API de LLM; completion_tokens: tokens de respuesta de la API de LLM; total_tokens = prompt_tokens + completion tokens
Métricas de consumo de tokens de OpenAI
flow_latency histogram flow,response_code,streaming,response_type costo de ejecución de solicitudes, response_type significa si es full/firstbyte/lastbyte
flow_request counter flow,response_code,exception,streaming recuento del flujo de solicitudes
node_latency histogram flow,node,run_status costo de ejecución del nodo
node_request counter flow,node,exception,run_status recuento de ejecuciones de nodos
rpc_latency histogram flow,node,api_call costo de rpc
rpc_request counter flow,node,api_call,exception recuento de rpc
flow_streaming_response_duration histogram flujo costo de envío de respuesta de transmisión, desde el envío del primer byte al envío del último byte

Puede encontrar el área de trabajo predeterminada de Application Insights en la página de información general del área de trabajo en Azure Portal.

  1. Abra Application Insights y seleccione Uso y costos estimados en el panel de navegación de la izquierda. Seleccione Métricas personalizadas (versión preliminar), después Con dimensiones y guarde el cambio.
  2. Seleccione la pestaña Métricas en el panel de navegación de la izquierda. Seleccione métricas estándar de flujo de avisos en Espacio de nombres de métricas y puede explorar las métricas de la lista desplegable Métrica con diferentes métodos de agregación.

Recopilación de comentarios y envío a Application Insights

El servicio de flujo de avisos proporciona una nueva API de /feedback para ayudar al cliente a recopilar los comentarios; la carga de comentarios puede ser cualquier dato de formato JSON, PF que sirve solo de ayuda al cliente para guardar los datos de comentarios en un intervalo de seguimiento. Los datos se guardarán en el cliente de destino del exportador de seguimiento configurado. También admite la propagación del contexto de seguimiento estándar de OpenTelemetry, lo que indica que respetará el contexto de seguimiento establecido en el encabezado de solicitud y lo usará como contexto de intervalo primario de la solicitud. Puede aprovechar la funcionalidad de seguimiento distribuido para correlacionar el seguimiento de comentarios con su seguimiento de solicitud de chat.

A continuación se muestra el código de ejemplo que muestra cómo puntuar un seguimiento habilitado para el punto de conexión administrado implementado por el flujo y enviar los comentarios al mismo intervalo de seguimiento de la solicitud de puntuación. El flujo tiene las entradas question y chat_history, y la salida answer. Después de puntuar el punto de conexión, recopilamos un comentario y se envía al Application Insights especificado al implementar el flujo.

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'))

Puede ver el seguimiento de la solicitud junto con comentarios en Application Insights.

Uso avanzado: exportación del seguimiento al servicio de recopilador de OpenTelemetry personalizado

En algunos casos, es posible que desee exportar los datos de seguimiento al servicio de recopilador de OTel implementado, habilitado al establecer "OTEL_EXPORTER_OTLP_ENDPOINT". Use este exportador cuando desee personalizar su propia lógica de procesamiento de intervalos y su propio destino persistente de seguimiento.