Habilitación del seguimiento y recopilación de comentarios para una implementación de flujo (clásico)

Solo se aplica a:portal Foundry (clásico). Este artículo no está disponible para el nuevo portal de Foundry. Obtenga más información sobre el nuevo portal.

Nota

Los vínculos de este artículo pueden abrir contenido en la nueva documentación de Microsoft Foundry en lugar de la documentación de Foundry (clásico) que está viendo ahora.

Importante

Los elementos marcados (versión preliminar) de este artículo se encuentran actualmente en versión preliminar pública. Esta versión preliminar se proporciona sin un contrato de nivel de servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no se admitan o que tengan funcionalidades restringidas. Para obtener más información, vea Supplemental Terms of Use for Microsoft Azure Previews.

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, sabrá cómo habilitar el seguimiento, recopilar métricas acumuladas y reunir los comentarios de usuarios durante la inferencia del flujo de implementación.

Nota

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

Requisitos previos

Importante

En este artículo se proporciona soporte heredado para proyectos basados en concentradores. No funcionará para proyectos de Foundry. Vea ¿Cómo sé qué tipo de proyecto tengo?

SDK nota de compatibilidad: Los ejemplos de código requieren una versión específica del SDK de Microsoft Foundry. Si encuentra problemas de compatibilidad, considere migrar de un proyecto basado en hub a un proyecto Foundry.

  • El CLI de Azure y la extensión Azure Machine Learning al CLI de Azure.
  • Un proyecto de Microsoft Foundry. Si aún no tiene un proyecto, puede crear uno.
  • Un recurso de Application Insights. Si aún no tiene un recurso de Application Insights, puede crear uno.
  • Los controles de acceso basados en roles de Azure se utilizan para otorgar 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 obtener más información, consulte Control de acceso basado en rol en el portal de 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 Implementar un flujo para la inferencia en tiempo real como ejemplo. Para los flujos flexibles, debe preparar el flow.flex.yaml archivo en lugar de flow.dag.yaml.

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

Use 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.

Habilite la traza y recopile métricas del sistema para su despliegue

Si está utilizando el portal de Foundry para desplegar, seleccione Implementación>Diagnósticos de Application Insights>Configuración avanzada en el asistente de implementación. Mediante este método, recopilará datos de seguimiento y métricas del sistema en el proyecto vinculado a Application Insights.

Si usa el SDK o la CLI, agregue la app_insights_enabled: true propiedad en el archivo .yaml de implementación para recopilar datos en el proyecto vinculado a Application Insights.

app_insights_enabled: true

También puede especificar otras conclusiones de la aplicación mediante la variable APPLICATIONINSIGHTS_CONNECTION_STRING de entorno en el archivo .yaml de implementación. Puede encontrar el cadena de conexión para Application Insights en la página Overview en el portal de Azure.

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 falla, pero no se recopilan 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 envían al proyecto vinculado a Application Insights. Si desea especificar distintas conclusiones de la aplicación, mantenga solo la variable de entorno.

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

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. Pueden incluir datos sobre llamadas de función, valores de variables y eventos del sistema. Los rastros ayudan a descomponer los componentes de una aplicación en entradas y salidas discretas. Este proceso es fundamental para depurar y comprender una aplicación. Para obtener más información sobre los seguimientos, consulte este sitio web. Los datos de seguimiento siguen la especificación OpenTelemetry.

Puede ver el seguimiento detallado en la instancia de Application Insights que especificó. En la captura de pantalla siguiente se muestra un ejemplo de un evento de un flujo implementado que contiene varios nodos. Seleccione Application Insights>Investigar>Búsqueda de transacciones y, a continuación, seleccione cada nodo para ver su seguimiento detallado.

Los eventos del tipo Dependencia registran las llamadas desde sus implementaciones. El nombre del evento es el nombre de la carpeta de flujo de trabajo. Para más información, consulte Búsqueda de transacciones y diagnósticos en Application Insights.

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

Nombre de la métrica Tipo Dimensiones Descripción
token_consumption contador - 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 histograma flow, response_code, , streaming, response_type El costo de ejecución de la solicitud, response_type, significa si es completo o el primer byte o el último byte.
flow_request contador flow, response_code, , exception, streaming Recuento de solicitudes de flujo.
node_latency histograma flow, , node, run_status Costo de ejecución del nodo.
node_request contador flow, node, , exception, run_status Recuento de ejecuciones de nodos.
rpc_latency histograma flow, , node, api_call Costo de llamada a procedimiento remoto.
rpc_request contador flow, node, , api_call, exception Recuento de llamadas a procedimiento remoto (RPC).
flow_streaming_response_duration histograma flow El costo de envío de la respuesta en streaming, desde el primer byte hasta el último byte.

Puede encontrar las métricas predeterminadas del área de trabajo de Application Insights en la página de información general del área de trabajo en el portal de Azure.

  1. Abra Application Insights y seleccione Uso y costos estimados en el panel izquierdo. Seleccione Métricas personalizadas (versión preliminar)>Con dimensiones y guarde el cambio.
  2. Seleccione la pestaña Métricas en el panel izquierdo. En Espacio de nombres de métricas, seleccione métricas estándar de Promptflow. 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 flujo de mensajes proporciona una nueva API /feedback para ayudar a los clientes a recopilar los comentarios. La carga de comentarios puede ser cualquier dato de formato JSON. El servicio de flujo de avisos ayuda al cliente a guardar los datos de retroalimentación en un inter de seguimiento. Los datos se guardan en el destino del exportador de seguimiento que configuró el cliente. El servicio de flujo de avisos también admite la propagación del contexto de seguimiento estándar de OpenTelemetry. Respeta el contexto de rastreo establecido en el encabezado de solicitud y utiliza ese contexto como el contexto de tramo padre de la solicitud. Puede usar la funcionalidad de seguimiento distribuido para correlacionar el seguimiento de retroalimentación con el seguimiento de la solicitud de chat.

En el código de ejemplo siguiente se muestra cómo puntuar un flujo implementado en un punto de conexión administrado habilitado para el seguimiento y enviar los comentarios al mismo intervalo de seguimiento de una solicitud de puntuación. El flujo tiene las entradas question y chat_history. La salida es answer. Después de puntuar el punto de conexión, los comentarios se recopilan y envían a Application Insights según se especifica 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 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'))

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

Uso avanzado: exportación de la traza al servicio recopilador de OpenTelemetry personalizado

En algunos casos, es posible que quiera exportar los datos de seguimiento al servicio de recopilador OpenTelemetry implementado. Para habilitar este servicio, establezca 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.