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

Advertencia

Prompt flow en Microsoft Foundry y Azure Machine Learning se retirará el 20 de abril de 2027. Prompt flow ya no se recomienda para nuevos desarrollos. Migre las aplicaciones e implementaciones existentes de Prompt flow a Microsoft Agent Framework antes del 20 de abril de 2027.

Las imágenes de contenedor de Prompt flow ya no reciben actualizaciones, incluidas las actualizaciones de seguridad y de paquetes. Esto se aplica a las imágenes de entorno de ejecución de Prompt flow, incluidas promptflow-runtime, promptflow-runtime-stable y promptflow-python.

Después del 20 de abril de 2027, Prompt flow, incluida la experiencia de creación web en Microsoft Foundry y Azure Machine Learning, las extensiones de VS Code y las imágenes de contenedor relacionadas de Prompt flow, dejará de ser compatible y de estar disponible.

Si su aplicación depende de implementaciones de Prompt flow o de imágenes en tiempo de ejecución, planifique trasladar esas cargas de trabajo a alternativas compatibles, como Microsoft Agent Framework, antes de la fecha de retirada. Para obtener instrucciones sobre la migración, consulte la guía de migración de flujo de mensajes y ejemplos de código de migración.

Nota

Esta característica está 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, 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 comentarios de los usuarios durante el tiempo de inferencia de la implementación del flujo.

Requisitos previos

  • El CLI de Azure y la extensión Azure Machine Learning al CLI de Azure. Para obtener 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 una, 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, un área de trabajo de aprendizaje automático tiene vinculada una instancia predeterminada de Application Insights. Si desea usar uno nuevo, puede crear un recurso de Application Insights.
  • Obtenga información cómo compilar y probar un flujo en el flujo de avisos del sistema.
  • Tenga conocimientos básicos sobre los puntos de conexión en línea administrados. Los puntos de conexión en línea administrados funcionan con máquinas eficaces de CPU y GPU en Azure de una manera escalable y totalmente 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 basados en rol de Azure (Azure RBAC) 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, necesita otro permiso "Microsoft. Resources/deployments/write" del propietario del grupo de recursos. Para obtener más información, consulte Administrar el 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 desplegar un flujo en los puntos de conexión administrados en línea de Azure Machine Learning 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, 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.

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

Si usa la interfaz de usuario de Studio para implementarla, puede activar Diagnósticos de Application Insights en Configuración avanzada:> paso Implementación en el asistente para implementar, de qué manera se recopilan los datos de seguimiento y las métricas del sistema en el área de trabajo vinculada 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 instancias de Application Insights utilizando una variable de entorno en el archivo YAML de implementación como sigue. Puede encontrar la cadena de conexión de Application Insights en la página Información general del portal de Azure.

# 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 Application Insights especulado.

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 dividir 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 Application Insights especificado. 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, y 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 la búsqueda y el 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 las métricas Tipo Dimensiones Descripción
consumo de tokens contador - flujo
- nodo
- llm_engine
- token_type: prompt_tokens: tokens de entrada de la API LLM; completion_tokens: tokens de respuesta de la API LLM; total_tokens = prompt_tokens + completion tokens
Métricas de consumo de tokens de OpenAI
latencia_de_flujo histograma flujo, código_de_respuesta, transmisión, tipo_de_respuesta costo de ejecución de la solicitud, response_type significa si es full, firstbyte o lastbyte
solicitud_de_flujo contador flujo, código_de_respuesta, exception, streaming recuento de solicitudes de flujo
node_latency histograma flujo, nodo, estado_de_ejecución costo de ejecución del nodo
node_request contador flujo, nodo, excepción, estado_de_ejecución recuento de ejecuciones de nodos
rpc_latency histograma flujo, nodo, api_call costo de rpc
solicitud de RPC (rpc_request) contador flujo, nodo, api_call, exception recuento de rpc
flow_streaming_response_duration histograma flujo Costo de envío de respuesta en streaming, desde el envío del primer byte hasta el envío del último byte.

Puede encontrar el área de trabajo predeterminada 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 izquierdo. Seleccione Métricas personalizadas (versión preliminar) y seleccione Con dimensiones y guarde el cambio.

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

Seleccione la pestaña Métricas en el panel de navegación izquierdo. Seleccione métricas estándar de flujo de mensajes en el Espacio de nombres de métrica , y puede explorar las métricas de la lista desplegable Métrica con distintos métodos de agregación.

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

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 ayuda al cliente a 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, diciendo que respeta el contexto de seguimiento establecido en el encabezado de solicitud y lo usa 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 entradas question y chat_hisotry, y salida answer. Después de puntuar el punto de conexión, recopilamos un comentario y se envían a Application Insights especificados al implementar el flujo. Debe rellenar el valor api_key o modificar el código dependiendo de su 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://mms.heiai.top/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 de la traza al servicio recopilador de OpenTelemetry personalizado

En algunos casos, es posible que desee exportar los datos de trazas al servicio recopilador de OTel implementado, habilitándolo mediante la configuración de "OTEL_EXPORTER_OTLP_ENDPOINT". Use este exportador cuando desee personalizar nuestra propia lógica de procesamiento de intervalos y su propio destino persistente de seguimiento.

Pasos siguientes