Dela via


Aktivera spårning och samla in feedback för en flödesdistribution

Viktigt!

Vissa av de funktioner som beskrivs i den här artikeln kanske bara är tillgängliga i förhandsversionen. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

När du har distribuerat en Generative AI APP i produktion kanske du vill förbättra din förståelse och optimera prestanda. Spårningsdata för varje begäran, aggregerade mått och användarfeedback spelar viktiga roller.

I den här artikeln lär du dig att aktivera spårning, samla in aggregerade mått och samla in användarfeedback under inferenstiden för flödesdistributionen.

Förutsättningar

  • Azure CLI och Azure Machine Learning-tillägget till Azure CLI.
  • Ett AI Studio-projekt. Om du inte redan har ett projekt kan du skapa ett här.
  • En Application Insights. Om du inte redan har en Application Insights-resurs kan du skapa en här.
  • Rollbaserade åtkomstkontroller i Azure används för att bevilja åtkomst till åtgärder i Azure Machine Learning. Om du vill utföra stegen i den här artikeln måste du ha ägar- eller deltagarbehörigheter för den valda resursgruppen. Mer information finns i Rollbaserad åtkomstkontroll i Azure AI Studio.

Distribuera ett flöde för slutsatsdragning i realtid

När du har testat flödet korrekt, antingen ett flexflöde eller ett DAG-flöde, kan du distribuera flödet i produktion. I den här artikeln använder vi Distribuera ett flöde för realtidsinferens som exempel. För flexflöden måste du förbereda flow.flex.yaml filen i stället för flow.dag.yaml.

Du kan också distribuera till andra plattformar, till exempel Docker-container, Kubernetes-kluster med mera.

Kommentar

Du måste använda den senaste basavbildningen för promptflöde för att distribuera flödet, så att det stöder API:et för spårning och feedbackinsamling.

Aktivera spårning och samla in systemmått för din distribution

Om du använder studiogränssnittet för att distribuera kan du aktivera Application Insights-diagnostik i Avancerade inställningar>Distributionssteg i distributionsguiden, på vilket sätt spårningsdata och systemmått samlas in till projektet som är länkat till Application Insights.

Om du använder SDK eller CLI kan du lägga till en egenskap app_insights_enabled: true i yaml-distributionsfilen som samlar in data till projektet som är länkat till application insights.

app_insights_enabled: true

Du kan också ange andra Application Insights efter en miljövariabel APPLICATIONINSIGHTS_CONNECTION_STRING i yaml-filen för distribution enligt följande. Du hittar anslutningssträng för Application Insights på översiktssidan i Azure-portalen.

environment_variables:
  APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>

Kommentar

Om du bara anger app_insights_enabled: true men projektet inte har en länkad Application Insights-resurs misslyckas inte distributionen, men inga data samlas in.

Om du anger både app_insights_enabled: true och ovanstående miljövariabel samtidigt skickas spårningsdata och mått till projektet som är länkat till application insights. Om du vill ange en annan Application Insights behöver du därför bara behålla miljövariabeln.

Om du distribuerar till andra plattformar kan du också använda miljövariabeln APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string> för att samla in spårningsdata och mått för att speicifed Application Insights.

Visa spårningsdata i Application Insights

Spårningar registrerar specifika händelser eller tillståndet för ett program under körningen. Den kan innehålla data om funktionsanrop, variabelvärden, systemhändelser med mera. Spårningar hjälper till att dela upp ett programs komponenter i diskreta indata och utdata, vilket är avgörande för att felsöka och förstå ett program. Du kan lära dig mer här om spårningar. Spårningsdata följer OpenTelemetry-specifikationen.

Du kan visa den detaljerade spårningen i angivna Application Insights. Följande skärmbild visar ett exempel på en händelse av ett distribuerat flöde som innehåller flera noder. I Application Insights –> Undersök –> Transaktionssökning kan du välja varje nod för att visa dess detaljerade spårning.

Händelser av beroendetyp registrerar anrop från dina distributioner. Namnet på händelsen är namnet på flödesmappen. Läs mer om transaktionssökning och diagnostik i Application Insights.

Visa systemmått i Application Insights

Måttnamn Typ Dimensioner beskrivning
token_consumption räknare -Flöde
-Nod
- llm_engine
– token_type: prompt_tokens: LLM API-indatatoken; completion_tokens: LLM API-svarstoken; total_tokens = prompt_tokens + completion tokens
Mått för förbrukning av OpenAI-token
flow_latency Histogram flow,response_code,streaming,response_type körningskostnad för begäran, response_type innebär om den är full/firstbyte/lastbyte
flow_request räknare flow,response_code,exception,streaming antal flödesbegäranden
node_latency Histogram flow,node,run_status nodkörningskostnad
node_request räknare flow,node,exception,run_status antal nodkörningar
rpc_latency Histogram flow,node,api_call rpc-kostnad
rpc_request räknare flow,node,api_call,exception antal rpc
flow_streaming_response_duration Histogram flow strömningssvar som skickar kostnad, från att skicka första byte till att skicka senaste byte

Du hittar arbetsytans standardprograminsikter på arbetsytans översiktssida i Azure-portalen.

  1. Öppna Application Insights och välj Användning och uppskattade kostnader i det vänstra navigeringsfältet. Välj Anpassade mått (förhandsversion) och välj Med dimensioner och spara ändringen.
  2. Välj fliken Mått i det vänstra navigeringsfältet. Välj standardmått för promptflow från måttnamnområdet och du kan utforska måtten från listrutan Mått med olika aggregeringsmetoder.

Samla in feedback och skicka till Application Insights

Snabbflödesservern tillhandahåller ett nytt /feedback API för att hjälpa kunden att samla in feedback, feedbacknyttolasten kan vara alla json-formatdata, PF-servering hjälper bara kunden att spara feedbackdata till ett spårningsintervall. Data sparas till målkund för spårningsexportören som konfigurerats. Det stöder också OpenTelemetry standardspårningskontextspridning och säger att det kommer att respektera spårningskontexten som angetts i begärandehuvudet och använda den som kontext för överordnad span för begäran. Du kan använda funktionen distribuerad spårning för att korrelera feedbackspårningen till spårningen av chattbegäran.

Följande är exempelkod som visar hur du poängsätter en flödesdistribuerad hanterad slutpunktsaktiverad spårning och skickar feedback till samma spårningsintervall för bedömningsbegäran. Flödet har indata question och chat_history, och utdata answer. Efter bedömning av slutpunkten samlar vi in en feedback och skickar till Application Insights som anges när flödet distribueras.

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

Du kan visa spårningen av begäran tillsammans med feedback i Application Insights.

Avancerad användning: exportera spårning till anpassad OpenTelemetry-insamlingstjänst

I vissa fall kanske du vill exportera spårningsdata till din distribuerade OTel-insamlartjänst, aktiverad genom att ange "OTEL_EXPORTER_OTLP_ENDPOINT". Använd den här exportören när du vill anpassa din egen logik för spanbearbetning och ditt eget beständiga mål för spårning.