Condividi tramite


Abilitare la traccia e raccogliere commenti e suggerimenti per una distribuzione del flusso (anteprima)

Nota

Questa funzionalità è attualmente in anteprima pubblica. Questa anteprima viene fornita senza un contratto di servizio e non è consigliabile per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate. Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.

Dopo aver distribuito un'app di IA generativa nell'ambiente di produzione, gli sviluppatori di app cercano di migliorare la comprensione e ottimizzare le prestazioni. I dati di traccia di ogni richiesta, le metriche aggregate e il feedback degli utenti svolgono ruoli critici.

Questo articolo illustra come abilitare la traccia, raccogliere metriche aggregate e feedback degli utenti durante il tempo di inferenza della distribuzione del flusso.

Prerequisiti

  • L'interfaccia della riga di comando di Azure e l'estensione di Azure Machine Learning per l'interfaccia della riga di comando di Azure. Per altre informazioni, vedere Installare, configurare e usare l'interfaccia della riga di comando (v2).
  • Un'area di lavoro di Azure Machine Learning. Se non è disponibile, seguire la procedura descritta nell'articolo Avvio rapido: Creare risorse dell'area di lavoro per crearne una.
  • Una risorsa Application Insights. In genere, per impostazione predefinita, un'area di lavoro di Machine Learning è collegata ad Application Insights. Se si vuole usare un nuovo, è possibile creare una risorsa di Application Insights.
  • Informazioni su come creare e testare un flusso nel prompt flow.
  • Avere una conoscenza di base sugli endpoint online gestiti. Gli endpoint online gestiti funzionano con potenti macchine CPU e GPU in Azure in modo scalabile e completamente gestito librando l'utente dalle attività di configurazione e gestione dell'infrastruttura di distribuzione sottostante. Per altre informazioni sugli endpoint online gestiti, vedere Endpoint e distribuzioni online per l'inferenza in tempo reale.
  • I controlli degli accessi in base al ruolo di Azure vengono usati per concedere l'accesso alle operazioni in Azure Machine Learning. Per eseguire la procedura descritta in questo articolo, all'account utente deve essere assegnato il ruolo di proprietario o collaboratore per l'area di lavoro di Azure Machine Learning oppure un ruolo personalizzato che consenta "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/". Se si usa Studio per creare/gestire endpoint/distribuzioni online, è necessario richiedere un'autorizzazione "Microsoft.Resources/deployments/write" al proprietario del gruppo di risorse. Per altre informazioni, vedere Gestire l'accesso a un'area di lavoro di Azure Machine Learning.

Distribuire un flusso per l'inferenza in tempo reale

Dopo aver testato correttamente il flusso, un flusso flessibile o un flusso DAG, è possibile distribuire il flusso nell'ambiente di produzione. Come esempio, in questo articolo viene usato distribuire un flusso agli endpoint online gestiti di Azure Machine Learning. Per i flussi flessibili, è necessario preparare il file flow.flex.yaml anziché flow.dag.yaml.

È anche possibile eseguire la distribuzione in altre piattaforme, ad esempio in un contenitore Docker, in un cluster Kubernetes e altro.

Nota

È necessario usare l'immagine di base del prompt flow più recente per distribuire il flusso in modo che supporti l'API di raccolta della traccia e del feedback.

Abilitare la traccia e raccogliere le metriche di sistema per la distribuzione

Se si usa l'interfaccia utente di Studio per la distribuzione, è possibile abilitare la diagnostica di Application Insights nel passaggio - > impostazioni avanzate Distribuzione della procedura guidata di distribuzione, in cui i dati di traccia e le metriche di sistema vengono raccolti nell'area di lavoro collegata ad Application Insights.

Se si usa l'SDK o l'interfaccia della riga di comando, è possibile aggiungere una proprietà app_insights_enabled: true nel file YAML di distribuzione che raccoglierà i dati nell'area di lavoro collegata ad Application Insights. È anche possibile specificare altre risorse Application Insights da una variabile di ambiente APPLICATIONINSIGHTS_CONNECTION_STRING nel file yaml di distribuzione come indicato di seguito. È possibile trovare la stringa di connessione di Application Insights nella pagina Panoramica del portale di 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

Se si imposta solo app_insights_enabled: true ma il lo spazio di lavoro non ha un Application Insights collegato, la distribuzione non avrà esito negativo, ma non verranno raccolti dati.

Se si specificano contemporaneamente sia app_insights_enabled: true che la variabile di ambiente indicata in precedenza, i dati di traccia e le metriche verranno inviati allo spazio di lavoro collegato ad Application Insights. Pertanto, se si vuole specificare una risorsa Application Insights diversa, è sufficiente mantenere la variabile di ambiente.

Se si esegue la distribuzione in altre piattaforme, è anche possibile usare la variabile di ambienteAPPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string> per raccogliere dati di traccia e metriche nella risorsa Application Insights specificata.

Visualizzare i dati di traccia in Application Insights

La traccia registra eventi specifici o lo stato di un'applicazione durante l'esecuzione. Una traccia può includere dati sulle chiamate di funzioni, i valori delle variabili, gli eventi di sistema e altro ancora. Le tracce consentono di suddividere i componenti di un'applicazione in input e output discreti, che è fondamentale per il debug e la comprensione di un'applicazione. Per altre informazioni, vedere Tracce OpenTelemetry sulle tracce. I dati di traccia seguono la specifica OpenTelemetry.

È possibile visualizzare la traccia dettagliata nella risorsa Application Insights specificata. Lo screenshot seguente mostra un esempio di evento di un flusso distribuito contenente più nodi. In Application Insights -> Ricerca causa -> Ricerca delle transazioni ed è possibile selezionare ogni nodo per visualizzarne la traccia dettagliata.

Nel record degli eventi di tipo dipendenza vengono registrate le chiamate dalle distribuzioni. Il nome dell'evento è il nome della cartella del flusso. Altre informazioni sulla ricerca e la diagnostica delle transazioni in Application Insights.

Screenshot dei dati di traccia in Application Insights.

Visualizzare le metriche di sistema in Application Insights

Nome metriche Type Dimensioni Descrizione
token_consumption counter - flow
- node
- llm_engine
- token_type: prompt_tokens: token di input dell'API LLM; completion_tokens: token di risposta dell'API LLM; total_tokens = prompt_tokens + completion tokens
Metriche di consumo di token OpenAI
flow_latency histogram flow,response_code,streaming,response_type costo di esecuzione della richiesta, response_type indica se è full/firstbyte/lastbyte
flow_request counter flow,response_code, exception, streaming Numero di richieste di flusso
node_latency histogram flow, node, run_status Costo di esecuzione del nodo
node_request counter flow, node, exception, run_status Numero di esecuzioni del nodo
rpc_latency histogram flow, node, api_call Costo RPC
rpc_request counter flow, node, api_call, exception Numero RPC
flow_streaming_response_duration histogram flusso Costo di invio della risposta di streaming, dall'invio del primo byte all'invio dell'ultimo byte

È possibile trovare l'istanza predefinita di Application Insights dell'area di lavoro nella pagina dell'area di lavoro nel portale di Azure.

Aprire Application Insights e selezionare Utilizzo e costi stimati nel riquadro di spostamento a sinistra. Selezionare Metriche personalizzate (anteprima), quindi selezionare Con dimensioni e salvare la modifica.

Screenshot dell'abilitazione delle metriche multidimensionali.

Selezionare la scheda Metriche nel riquadro di spostamento a sinistra. Selezionare Metriche standard del prompt flow nello Spazio dei nomi della metrica. È possibile esplorare le metriche dall'elenco a discesa Metrica con diversi metodi di aggregazione.

Screenshot delle metriche dell'endpoint del prompt flow.

Raccogliere feedback e inviarlo ad Application Insights

La gestione del prompt flow fornisce una nuova API /feedback che consente ai clienti di raccogliere il feedback. Il payload del feedback può essere qualsiasi dato in formato JSON, PF serve solo per consentire al cliente di salvare i dati del feedback in un intervallo di traccia. I dati verranno salvati nella destinazione dell'utilità di esportazione della traccia configurata dal cliente. Supporta anche la propagazione del contesto di traccia standard OpenTelemetry, indicante che rispetta il contesto di traccia impostato nell'intestazione della richiesta e lo usa come contesto dell'intervallo padre della richiesta. È possibile usare la funzionalità di traccia distribuita per correlare la traccia del feedback alla relativa traccia delle richieste di chat.

Di seguito è riportato il codice di esempio che illustra come assegnare un punteggio a un endpoint gestito distribuito abilitato per la traccia e inviare il feedback allo stesso intervallo di traccia della richiesta di assegnazione dei punteggi. Il flusso genera gli input question e chat_hisotry e l’output answer. Dopo aver assegnato il punteggio all'endpoint, il feedback viene raccolto e inviato alla risorsa Application Insights specificata durante la distribuzione del flusso. È necessario compilare il valore api_key o modificare il codice in base al caso d'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'))

È possibile visualizzare la traccia della richiesta insieme al feedback in Application Insights.

Screenshot dei commenti e dei dati di traccia di una richiesta in Application Insights.

Utilizzo avanzato: esportare la traccia nel servizio dell'agente di raccolta OpenTelemetry personalizzato

In alcuni casi, è possibile esportare i dati di traccia nel servizio dell’agente di raccolta OTel distribuito, che può essere abilitato impostando "OTEL_EXPORTER_OTLP_ENDPOINT". Usare questa utilità di esportazione per personalizzare la logica di elaborazione dell'intervallo e la destinazione persistente di traccia.

Passaggi successivi