Delen via


Tracering inschakelen en feedback verzamelen voor een stroomimplementatie (preview)

Notitie

Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview wordt aangeboden zonder een service level agreement en we raden deze niet aan voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.

Na het implementeren van een Generatieve AI-APP in productie, proberen APP-ontwikkelaars hun inzicht te verbeteren en de prestaties te optimaliseren. Traceringsgegevens voor elke aanvraag, geaggregeerde metrische gegevens en feedback van gebruikers spelen kritieke rollen.

In dit artikel leert u hoe u tracering inschakelt, geaggregeerde metrische gegevens verzamelt en feedback van gebruikers tijdens deductietijd van uw stroomimplementatie.

Vereisten

  • De Azure CLI en de Azure Machine Learning-extensie voor de Azure CLI. Zie De CLI (v2) installeren, instellen en gebruiken voor meer informatie.
  • Een Azure Machine Learning-werkruimte. Als u er nog geen hebt, gebruikt u de stappen in de quickstart: artikel Werkruimtebronnen maken om er een te maken.
  • Een Application Insights. Meestal heeft een machine learning-werkruimte een standaard gekoppelde Application Insights. Als u een nieuwe wilt gebruiken, kunt u een Application Insights-resource maken.
  • Meer informatie over het bouwen en testen van een stroom in de promptstroom.
  • Heb basiskennis van beheerde online-eindpunten. Beheerde online-eindpunten werken met krachtige CPU- en GPU-machines in Azure op een schaalbare, volledig beheerde manier die u vrij maakt van de overhead van het instellen en beheren van de onderliggende implementatie-infrastructuur. Zie Online-eindpunten en -implementaties voor realtime deductie voor meer informatie over beheerde online-eindpunten.
  • Op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) wordt gebruikt om toegang te verlenen tot bewerkingen in Azure Machine Learning. Als u de stappen in dit artikel wilt uitvoeren, moet aan uw gebruikersaccount de rol eigenaar of inzender voor de Azure Machine Learning-werkruimte zijn toegewezen, of een aangepaste rol die 'Microsoft.MachineLearningServices/workspaces/onlineEndpoints/' toestaat. Als u Studio gebruikt om online-eindpunten/implementaties te maken/beheren, hebt u nog een machtiging Microsoft.Resources/deployments/write nodig van de eigenaar van de resourcegroep. Zie Toegang tot een Azure Machine Learning-werkruimte beheren voor meer informatie.

Een stroom implementeren voor realtime deductie

Nadat u uw stroom goed hebt getest, kunt u een flexstroom of DAG-stroom implementeren in productie. In dit artikel gebruiken we bijvoorbeeld een stroom voor beheerde online-eindpunten van Azure Machine Learning. Voor flexstromen moet u het flow.flex.yaml bestand voorbereiden in plaats van flow.dag.yaml.

U kunt ook implementeren op andere platforms, zoals Docker-container, Kubernetes-cluster, enzovoort.

Notitie

U moet de meest recente basisinstallatiekopieën voor promptstromen gebruiken om de stroom te implementeren, zodat deze ondersteuning biedt voor de API voor tracering en feedbackverzameling.

Tracering inschakelen en metrische systeemgegevens verzamelen voor uw implementatie

Als u de gebruikersinterface van Studio gebruikt om te implementeren, kunt u Application Insights-diagnostische gegevens inschakelen in geavanceerde instellingen:> implementatiestap in de implementatiewizard, op welke manier de traceringsgegevens en metrische systeemgegevens worden verzameld naar gekoppelde Application Insights-werkruimte.

Als u SDK of CLI gebruikt, kunt u een eigenschap app_insights_enabled: true toevoegen aan het yaml-implementatiebestand waarmee gegevens worden verzameld naar gekoppelde Application Insights-werkruimte. U kunt ook andere Application Insights opgeven door een omgevingsvariabele APPLICATIONINSIGHTS_CONNECTION_STRING in het yaml-implementatiebestand als volgt. U vindt de verbindingsreeks van uw Application Insights op de pagina Overzicht in Azure Portal.

# 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>

Notitie

Als u alleen instelt app_insights_enabled: true maar uw werkruimte geen gekoppelde Application Insights heeft, mislukt uw implementatie niet, maar worden er geen gegevens verzameld.

Als u zowel app_insights_enabled: true als de bovenstaande omgevingsvariabele tegelijk opgeeft, worden de traceringsgegevens en metrische gegevens verzonden naar gekoppelde Application Insights-werkruimte. Dus als u een andere Application Insights wilt opgeven, hoeft u alleen de omgevingsvariabele te behouden.

Als u implementeert op andere platforms, kunt u ook de omgevingsvariabele APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string> gebruiken om traceringsgegevens en metrische gegevens te verzamelen om Application Insights te speicifed.

Traceringsgegevens weergeven in Application Insights

Traceringen registreren specifieke gebeurtenissen of de status van een toepassing tijdens de uitvoering. Het kan gegevens bevatten over functie-aanroepen, variabele waarden, systeemevenementen en meer. Traceringen helpen bij het opsplitsen van de onderdelen van een toepassing in discrete invoer en uitvoer, wat essentieel is voor foutopsporing en begrip van een toepassing. Zie OpenTelemetry-traceringen voor traceringen voor meer informatie. De traceringsgegevens volgen de OpenTelemetry-specificatie.

U kunt de gedetailleerde tracering bekijken in de opgegeven Application Insights. In de volgende schermopname ziet u een voorbeeld van een gebeurtenis van een geïmplementeerde stroom die meerdere knooppunten bevat. In Application Insights -> Onderzoeken -> Transactie zoeken en kunt u elk knooppunt selecteren om de gedetailleerde tracering ervan weer te geven.

De gebeurtenissen van het afhankelijkheidstype registreren aanroepen van uw implementaties. De naam van die gebeurtenis is de naam van de stroommap. Meer informatie over transactiezoekopdrachten en diagnostische gegevens in Application Insights.

Schermopname van traceringsgegevens in Application Insights.

Metrische systeemgegevens weergeven in Application Insights

Naam van metrische gegevens Type Afmetingen Beschrijving
token_consumption counter -vloeien
-knoop
- llm_engine
- token_type: prompt_tokensLLM API-invoertokens; completion_tokens: LLM API-antwoordtokens; total_tokens = prompt_tokens + completion tokens
Metrische gegevens over openAI-tokenverbruik
flow_latency histogram stroom, response_code, streaming, response_type kosten voor het uitvoeren van aanvragen, response_type betekent of deze volledig/firstbyte/lastbyte is
flow_request counter stroom, response_code, uitzondering, streaming aantal stroomaanvragen
node_latency histogram stroom, knooppunt, run_status kosten voor uitvoering van knooppunten
node_request counter stroom, knooppunt, uitzondering, run_status aantal uitvoeringen van knooppunten
rpc_latency histogram stroom, knooppunt, api_call rpc-kosten
rpc_request counter stroom, knooppunt, api_call, uitzondering aantal rpc's
flow_streaming_response_duration histogram stroom streamingantwoord verzenden van kosten, van het verzenden van eerste byte naar het verzenden van laatste byte

U vindt de standaard Application Insights-werkruimte op de overzichtspagina van uw werkruimte in Azure Portal.

Open Application Insights en selecteer Gebruik en geschatte kosten in de linkernavigatiebalk. Selecteer Aangepaste metrische gegevens (preview) en selecteer Met dimensies en sla de wijziging op.

Schermopname van het inschakelen van multidimensionale metrische gegevens.

Selecteer het tabblad Metrische gegevens in het linkernavigatievenster. Selecteer standaardgegevens voor promptflow in de metrische naamruimte en u kunt de metrische gegevens verkennen in de vervolgkeuzelijst Metrische gegevens met verschillende aggregatiemethoden.

Schermopname van metrische gegevens van promptstroomeindpunt.

Feedback verzamelen en verzenden naar Application Insights

Prompt flow-service biedt een nieuwe /feedback API om klanten te helpen de feedback te verzamelen, de nettolading van de feedback kan elke json-indeling zijn, PF-server helpt de klant alleen de feedbackgegevens op te slaan in een traceringsspanne. Gegevens worden opgeslagen op de klant van de traceerexporteur die is geconfigureerd. Het biedt ook ondersteuning voor standaarddoorgifte van openTelemetry-traceringscontext, waarbij wordt gezegd dat deze de traceringscontext respecteert die is ingesteld in de aanvraagheader en dat gebruikt als de bovenliggende context van de aanvraag. U kunt gebruikmaken van de functionaliteit voor gedistribueerde tracering om de feedbacktracering te correleren met de tracering van de chataanvraag.

Hieronder ziet u voorbeeldcode die laat zien hoe u een door een stroom geïmplementeerd beheerde eindpunttracering kunt beoordelen en de feedback verzendt naar dezelfde traceringsspanne van een scoreaanvraag. De stroom heeft invoer question en chat_hisotryuitvoer answer. Na het scoren van het eindpunt verzamelen we een feedback en verzenden we naar Application Insights die zijn opgegeven bij het implementeren van de stroom. U moet de api_key waarde invullen of de code wijzigen op basis van uw use-case.

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

U kunt de tracering van de aanvraag bekijken, samen met feedback in Application Insights.

Schermopname van feedback en traceringsgegevens van een aanvraag in Application Insights.

Geavanceerd gebruik: Tracering exporteren naar aangepaste OpenTelemetry Collector-service

In sommige gevallen wilt u de traceringsgegevens mogelijk exporteren naar de geïmplementeerde OTel-collectorservice, ingeschakeld door 'OTEL_EXPORTER_OTLP_ENDPOINT' in te stellen. Gebruik deze exporteur als u onze eigen spanverwerkingslogica en uw eigen permanente traceringsdoel wilt aanpassen.

Volgende stappen