Partager via


Activer le suivi et collecter des commentaires pour un déploiement de flux

Important

Les éléments marqués (préversion) dans cet article sont actuellement en préversion publique. Cette préversion est fournie sans contrat de niveau de service, nous la déconseillons dans des charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.

Après avoir déployé une application d'IA générative en production, vous souhaiterez peut-être améliorer votre compréhension et optimiser les performances. Les données de suivi pour chaque requête, métriques agrégées et commentaires des utilisateurs jouent des rôles critiques.

Dans cet article, vous allez apprendre à activer le suivi, à collecter des métriques agrégées et à collecter les commentaires des utilisateurs pendant le temps d’inférence de votre déploiement de flux.

Prérequis

  • Azure CLI et l’extension Azure Machine Learning pour Azure CLI.
  • Un projet AI Studio. Si vous n’avez pas encore de projet, vous pouvez en créer un ici.
  • Visual Studio Online Application Insights. Si vous n’avez pas encore de ressource Application Insights, vous pouvez en créer une ici.
  • Les contrôles d’accès en fonction du rôle Azure sont utilisés pour accorder l’accès aux opérations dans Azure Machine Learning. Pour effectuer les étapes décrites dans cet article, vous devez disposer des autorisations Propriétaire ou Contributeur sur le groupe de ressources sélectionné. Pour plus d’informations, consultez le Contrôle d’accès en fonction du rôle dans Azure AI Studio.

Déployer un flux pour l’inférence en temps réel

Une fois que vous avez testé votre flux correctement, soit un flux flexible, soit un flux DAG, vous pouvez déployer le flux en production. Dans cet article, nous utilisons Déployer un flux pour l’inférence en temps réel comme exemple. Pour les flux flexibles, vous devez préparer le fichier flow.flex.yaml au lieu de flow.dag.yaml.

Vous pouvez également déployer sur d’autres plateformes, telles que le conteneur Docker, le cluster Kubernetes et d’autres.

Remarque

Vous devez utiliser la dernière image de base de flux de prompt pour déployer le flux, afin qu’il prenne en charge l’API de traçage et de collecte de commentaires.

Activer la trace et collecter les métriques système pour votre déploiement

Si vous utilisez l’interface utilisateur studio pour déployer, vous pouvez activer diagnostics Application Insights dans paramètres avancés>Étape de déploiement étape de l’Assistant Déploiement, de quelle façon les données de suivi et les métriques système sont collectées au projet lié à Application Insights.

Si vous utilisez le SDK ou la CLI, vous pouvez le faire en ajoutant une propriété app_insights_enabled: true dans le fichier yaml de déploiement qui collecte les données du projet liées aux informations sur l'application.

app_insights_enabled: true

Vous pouvez également spécifier d’autres Application Insights par une variable d’environnement APPLICATIONINSIGHTS_CONNECTION_STRING dans le fichier yaml de déploiement comme suit. Vous trouverez la chaîne de connexion de votre ressource Application Insights dans la page Vue d’ensemble du portail Azure.

environment_variables:
  APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>

Remarque

Si vous définissez uniquement app_insights_enabled: true mais que votre projet n’a pas de ressource Application Insights liée, votre déploiement ne échoue pas, mais aucune donnée n’est collectée.

Si vous spécifiez à la fois app_insights_enabled: true et la variable d’environnement ci-dessus en même temps, les données et métriques de suivi sont envoyées au projet lié à Application Insights. Par conséquent, si vous souhaitez spécifier un autre Application Insights, vous devez uniquement conserver la variable d’environnement.

Si vous effectuez un déploiement sur d’autres plateformes, vous pouvez également utiliser la variable d’environnement APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string> pour collecter et envoyer les métriques ainsi que les données de trace à la ressource Application Insights spécifiée.

Voir les données de traçage dans Application Insights

Les traces enregistrent des événements spécifiques ou l’état d’une application durant son exécution. Il peut inclure des données sur les appels de fonction, les valeurs des variables, les événements système et bien plus encore. Les traces aident à décomposer les composants d’une application en entrées et sorties discrètes, ce qui est essentiel pour le débogage et la compréhension d’une application. Vous pouvez en savoir plus ici sur les traces. Les données de trace suivent spécification OpenTelemetry.

Vous pouvez voir la trace détaillée dans la ressource Application Insights spécifiée. La capture d’écran suivante montre un exemple d’événement de flux déployé contenant plusieurs nœuds. Dans Application Insights -> Investiguer -> Recherche de transactions, vous pouvez sélectionner chaque nœud pour voir sa trace détaillée.

La Dependency type enregistre les appels à partir de vos déploiements. Le nom de cet événement est le nom du dossier de flux. En savoir plus sur recherche transactionnelle et les diagnostics dans Application Insights.

Afficher les métriques système dans Application Insights

Nom des métriques Type Axes analytiques Description
token_consumption counter - flux
- node
- llm_engine
- token_type : prompt_tokens : jetons d’entrée d’API LLM ; completion_tokens : jetons de réponse d’API LLM ; total_tokens = prompt_tokens + completion tokens
Métriques de consommation de jeton OpenAI
flow_latency histogram flow,response_code,streaming,response_type coût d’exécution de la requête, response_type signifie s’il est complet/premier octet/dernier octet
flow_request counter flow,response_code,exception,streaming nombre de requêtes de flux
node_latency histogram flow,node,run_status coût d’exécution de nœud
node_request counter flow,node,exception,run_status nombre d’exécution de nœud
rpc_latency histogram flow,node,api_call Coût rpc
rpc_request counter flow,node,api_call,exception nombre de rpcs
flow_streaming_response_duration histogram flux Coût d’envoi de réponse de streaming, de l’envoi du premier octet à l’envoi du dernier octet

Vous trouverez la ressource Application Insights par défaut de l’espace de travail dans la page de vue d’ensemble de votre espace de travail au sein du portail Azure.

  1. Ouvrez Application Insights et sélectionnez Utilisation et coûts estimés dans le volet de navigation gauche. Sélectionnez Métriques personnalisées (préversion), puis Avec les dimensionset enregistrez la modification.
  2. Sélectionnez l’onglet Métriques dans le volet de navigation gauche. Sélectionnez Métriques standard PromptFlow dans Espace de noms des Métriques. Vous pouvez explorer les métriques de la liste déroulante Métrique avec différentes méthodes d’agrégation.

Collecter des commentaires et envoyer à Application Insights

La mise à disposition du flux de prompt fournit une nouvelle API /feedback pour aider le client à collecter les commentaires. La charge utile de commentaires peut correspondre à toutes sortes de données au format json. Le flux de prompt permet simplement au client d’enregistrer les données de commentaires dans une étendue de trace. Les données seront enregistrées dans le client cible de l’exportateur de trace configuré. Il prend également en charge la propagation standard du contexte de trace OpenTelemetry, indiquant qu’il respecte le contexte de trace défini dans l’en-tête de requête et l’utilise comme contexte d’étendue parent de la requête. Vous pouvez tirer parti de la fonctionnalité de traçage distribué pour corréler la trace des commentaires à sa trace de demande de discussion.

L’exemple de code suivant montre comment établir le score d’un flux déployé via un point de terminaison géré pour lequel le traçage est activé, et comment envoyer les commentaires à la même étendue de trace que celle de la requête de scoring. Le flux a les entrées question et chat_history, et la sortie answer. Après avoir marqué le point de terminaison, nous collectons un commentaire et nous envoyons à Application Insights spécifié lors du déploiement du flux.

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

Vous pouvez afficher la trace de la demande ainsi que les commentaires dans Application Insights.

Utilisation avancée : exporter la trace vers le service collecteur OpenTelemetry personnalisé

Dans certains cas, vous pouvez exporter les données de trace vers votre service collecteur OTel déployé, activé en définissant « OTEL_EXPORTER_OTLP_ENDPOINT ». Utilisez cet exportateur lorsque vous souhaitez personnaliser votre propre logique de traitement d’étendue et votre propre cible persistante de trace.