Compartir a través de


Habilitación del seguimiento y recopilación de comentarios para una implementación de flujo (versión preliminar)

Nota:

Esta característica actualmente está en su 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, los desarrolladores de aplicaciones buscan 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.

Requisitos previos

  • La CLI de Azure y la extensión de Azure Machine Learning para la CLI de Azure. Para más información, consulte Instalación, configuración y uso de la CLI v2.
  • Un área de trabajo de Azure Machine Learning. Si no tiene uno, siga los pasos descritos en el artículo Inicio rápido: Creación de recursos del área de trabajo para crear uno.
  • Una instancia de Application Insights. Normalmente, las áreas de trabajo de aprendizaje automático tienen una instancia predeterminada vinculada de Application Insights. Si quiere usar una nueva, puede crear un recurso de Application Insights.
  • Obtenga información sobre cómo compilar y probar un flujo en el flujo de avisos.
  • Conocimientos básicos sobre los puntos de conexión en línea administrados. Los puntos de conexión en línea administrados funcionan con potentes máquinas de CPU y GPU en Azure de una forma escalable y completamente administrada que le libera de la sobrecarga de configurar y administrar la infraestructura de implementación subyacente. Para más información sobre los puntos de conexión en línea administrados, consulte Puntos de conexión en línea e implementaciones para la inferencia en tiempo real.
  • Los controles de acceso basado en rol de Azure (RBAC de Azure) se usan para conceder acceso a las operaciones en Azure Machine Learning. Para realizar los pasos descritos en este artículo, la cuenta de usuario debe tener asignado el rol de propietario o colaborador para el área de trabajo de Azure Machine Learning, o un rol personalizado que permita "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/". Si usa Studio para crear o administrar puntos de conexión o implementaciones en línea, necesitará un permiso adicional "Microsoft.Resources/deployments/write" del propietario del grupo de recursos. Para obtener más información, consulte Administración del acceso a un área de trabajo de Azure Machine Learning.

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 en puntos de conexión en línea administrados de Azure Machine Learning 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, etc..

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 está usando la interfaz de usuario de Studio para la implementación, puede activar Diagnósticos de Application Insights en Configuración avanzada -> paso de Implementación en el asistente para la implementación, de forma que los datos de seguimiento y las métricas del sistema se recopilen en las áreas de trabajo vinculadas a Application Insights.

Si está usando el SDK o la CLI, puede agregar una propiedad app_insights_enabled: true en el archivo yaml de implementación que recopilará datos para la instancia de Application Insights vinculada al área de trabajo. 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.

# 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>

Nota:

Si solo establece app_insights_enabled: true pero el área de trabajo no tiene una instancia de Application Insights vinculada, 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 a la instancia de Application Insights vinculada al área de trabajo. 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 de 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. Para más información, consulte Seguimientos de OpenTelemetry en seguimientos. 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.

Los eventos del tipo Dependencia registran las llamadas a de sus 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.

Captura de pantalla de los datos de seguimiento 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.

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.

Captura de pantalla de la habilitación de las métricas multidimensionales.

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.

Captura de pantalla de las métricas del punto de conexión del flujo de solicitudes.

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_hisotry, 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. Debe rellenar el valor de api_key o modificar el código según el caso de uso.

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://docs.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'))

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

Captura de pantalla de los comentarios y los datos de seguimiento de una solicitud 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 quiera personalizar su propia lógica de procesamiento de intervalos y su propio destino persistente de seguimiento.

Pasos siguientes