Teilen über


Aktivieren der Ablaufverfolgung und Sammeln von Feedback für eine Flowbereitstellung

Wichtig

Einige der in diesem Artikel beschriebenen Features sind möglicherweise nur in der Vorschau verfügbar. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und sollte nicht für Produktionsworkloads verwendet werden. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.

Nach der Bereitstellung einer generativen KI-App in der Produktion müssen Sie möglicherweise Ihre Kenntnisse erweitern und die Leistung optimieren. Ablaufverfolgungsdaten für jede Anforderung, aggregierte Metriken und Benutzerfeedback spielen eine wichtige Rolle.

In diesem Artikel erfahren Sie, wie Sie die Ablaufverfolgung aktivieren, aggregierte Metriken erfassen und während der Rückschlusszeit Ihrer Flowbereitstellung Benutzerfeedback sammeln.

Voraussetzungen

  • Die Azure CLI und die Azure Machine Learning-Erweiterung für die Azure CLI.
  • Azure KI Studio-Projekt. Wenn Sie noch nicht über ein Projekt verfügen, können Sie hier ein Projekt erstellen.
  • Application Insights-Ressource. Wenn Sie noch nicht über eine Application Insights-Ressource verfügen, können Sie hier eine erstellen.
  • Die rollenbasierte Zugriffssteuerung in Azure wird verwendet, um Zugriff auf Vorgänge in Azure Machine Learning zu gewähren. Um die Schritte in diesem Artikel auszuführen, müssen Sie über die Berechtigungen der Rolle Besitzer oder Mitwirkender für die ausgewählte Ressourcengruppe verfügen. Weitere Informationen finden Sie unter Rollenbasierte Zugriffssteuerung in Azure KI Studio.

Bereitstellen eines Flows für echtzeitbasierte Rückschlüsse

Nachdem Sie den Flow ordnungsgemäß getestet haben (Flex-Flow oder DAG-Flow), können Sie den Flow in der Produktion bereitstellen. In diesem Artikel wird Bereitstellen eines Flows für Echtzeitrückschlüsse als Beispiel verwendet. Für Flex-Flows müssen Sie die flow.flex.yaml-Datei anstelle von flow.dag.yaml aufbereiten.

Die Bereitstellung ist auch auf anderen Plattformen wie Docker-Containern oder Kubernetes-Clustern möglich.

Hinweis

Sie müssen das neueste Promptflow-Basisimage verwenden, um den Flow bereitzustellen, damit er die APIs für die Ablaufverfolgung bzw. Feedbacksammlung unterstützt.

Aktivieren der Ablaufverfolgung und Sammeln von Systemmetriken für die Bereitstellung

Wenn Sie die Studio-Benutzeroberfläche zum Bereitstellen verwenden, können Sie die Application Insights-Diagnose im Schritt Erweiterte Einstellungen>Bereitstellung im Bereitstellungs-Assistenten aktivieren, wodurch die Ablaufverfolgungsdaten und Systemmetriken für das Projekt erfasst werden, das mit Application Insights verknüpft ist.

Wenn Sie das SDK oder die CLI verwenden, können Sie die Eigenschaft app_insights_enabled: true in der YAML-Bereitstellungsdatei hinzufügen, die Daten für das Projekt sammelt, das mit Application Insights verknüpft ist.

app_insights_enabled: true

Sie können auch andere Application Insights-Ressourcen wie folgt durch die Umgebungsvariable APPLICATIONINSIGHTS_CONNECTION_STRING in der YAML-Bereitstellungsdatei angeben. Die Verbindungszeichenfolge Ihrer Application Insights-Ressource finden Sie auf der Seite „Übersicht“ im Azure-Portal.

environment_variables:
  APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>

Hinweis

Wenn Sie nur app_insights_enabled: true festlegen, Ihr Projekt jedoch nicht mit einer Application Insights-Ressource verknüpft ist, tritt bei der Bereitstellung zwar kein Fehler auf, aber es werden keine Daten gesammelt.

Wenn Sie app_insights_enabled: true und die zuvor genannte Umgebungsvariable gleichzeitig angeben, werden die Ablaufverfolgungsdaten und Metriken an das Projekt gesendet, das mit Application Insights verknüpft ist. Wenn Sie also eine andere Application Insights-Ressource angeben möchten, müssen Sie die Umgebungsvariable nur beibehalten.

Bei der Bereitstellung auf anderen Plattformen können Sie auch die Umgebungsvariable APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string> verwenden, um Ablaufverfolgungsdaten und Metriken für die angegebene Application Insights-Ressource zu sammeln.

Anzeigen von Ablaufverfolgungsdaten in Application Insights

Ablaufverfolgungen zeichnen bestimmte Ereignisse oder den Status einer Anwendung während der Ausführung auf. Sie können beispielsweise Daten zu Funktionsaufrufen, Variablenwerten und Systemereignissen enthalten. Ablaufverfolgungen helfen beim Aufschlüsseln der Komponenten einer Anwendung in diskrete Eingaben und Ausgaben, was für das Debuggen und Verständnis einer Anwendung von entscheidender Bedeutung ist. Weitere Informationen zu Ablaufverfolgungen finden Sie hier. Die Ablaufverfolgungsdaten befolgen die OpenTelemetry-Spezifikation.

Sie können die detaillierte Ablaufverfolgung in der angegebenen Application Insights-Ressource anzeigen. Der folgende Screenshot zeigt ein Beispiel für ein Ereignis eines bereitgestellten Flows, der mehrere Knoten enthält. Navigieren Sie in Application Insights zum Bereich für die Untersuchung (>) und dann zur Transaktionssuche (>). Sie können jeden Knoten auswählen, um die entsprechende detaillierte Ablaufverfolgung anzuzeigen.

Die Ereignisse vom Typ Abhängigkeit erfassen Aufrufe aus Ihren Bereitstellungen. Der Name dieses Ereignisses ist der Name des Flowordners. Weitere Informationen finden Sie unter Transaktionssuche und Diagnose in Application Insights.

Anzeigen von Systemmetriken in Application Insights

Metrikname Typ Dimensionen Beschreibung
token_consumption Zähler - Flow
- node
- llm_engine
- token_type: prompt_tokens: LLM-API-Eingabetoken; completion_tokens: LLM-API-Antworttoken; total_tokens = prompt_tokens + completion tokens
Metriken zur OpenAI-Tokennutzung
flow_latency histogram flow,response_code,streaming,response_type Kosten für Anforderungsausführung. „response_type“ gibt den Typ an: „full“, „firstbyte“ oder „lastbyte“.
flow_request Zähler flow,response_code,exception,streaming Anzahl von Flowanforderungen
node_latency histogram flow,node,run_status Knotenausführungskosten
node_request Zähler flow,node,exception,run_status Knotenausführungsanzahl
rpc_latency histogram flow,node,api_call RPC-Kosten
rpc_request Zähler flow,node,api_call,exception RPC-Anzahl
flow_streaming_response_duration histogram Flow Streamingkosten für das Senden von Antworten vom ersten Byte bis zum letzten Byte

Die Application Insights-Standardressource des Arbeitsbereichs finden Sie auf der Übersichtsseite Ihres Arbeitsbereichs im Azure-Portal.

  1. Öffnen Sie die Application Insights-Instanz, und wählen Sie im linken Navigationsbereich die Option Nutzungs- und geschätzte Kosten aus. Wählen Sie Benutzerdefinierte Metriken (Vorschau) und dann Mit Dimensionen aus, und speichern Sie die Änderung.
  2. Wählen Sie im linken Navigationsbereich die Registerkarte Metriken aus. Wählen Sie unter Metriknamespace die Option promptflow standard metrics aus. Anschließend können Sie die Metriken in der Dropdownliste Metrik mit verschiedenen Aggregationsmethoden untersuchen.

Sammeln von Feedback und Senden an Application Insights

Die Promptflowbereitstellung bietet eine neue /feedback-API, die Kunden dabei hilft, Feedback zu sammeln. Bei den Feedbacknutzdaten kann es sich um beliebige JSON-Formatdaten handeln. Die Promptflowbereitstellung hilft den Kunden lediglich dabei, die Feedbackdaten in einem Ablaufverfolgungsbereich zu speichern. Die Daten werden in dem vom Kunden konfigurierten Exportziel für die Ablaufverfolgung gespeichert. Die API unterstützt zudem die OpenTelemetry-Standardkontextweiterleitung für die Ablaufverfolgung. Dabei wird der im Anforderungsheader festgelegte Ablaufverfolgungskontext berücksichtigt und als übergeordneter Anforderungsbereichskontext verwendet. Sie können die Funktion für die verteilte Ablaufverfolgung für die Korrelation zwischen der Feedback-Ablaufverfolgung und der Ablaufverfolgung für Chatanforderungen zu nutzen.

Im Folgenden finden Sie einen Beispielcode, der zeigt, wie Sie einen Flow für einen bereitgestellten verwalteten Endpunkt mit aktivierter Ablaufverfolgung bewerten und das Feedback an denselben Ablaufverfolgungsbereich der Bewertungsanforderung senden. Der Flow weist die Eingaben question und chat_history sowie die Ausgabe answer auf. Nach der Bewertung des Endpunkts sammeln Sie Feedback und senden dies an die Application Insights-Ressource, die beim Bereitstellen des Flows angegeben wurde.

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

Sie können die Ablaufverfolgung der Anforderung zusammen mit Feedback in Application Insights anzeigen.

Erweiterte Verwendung: Exportablaufverfolgung im benutzerdefinierten OpenTelemetry-Collectordienst

In einigen Fällen müssen Sie die Ablaufverfolgungsdaten möglicherweise in Ihren bereitgestellten OTel-Collectordienst exportieren, was durch Festlegen von „OTEL_EXPORTER_OTLP_ENDPOINT“ aktiviert wird. Verwenden Sie diesen Exporter, wenn Sie Ihre eigene Bereichsverarbeitungslogik und Ihr eigenes persistentes Ablaufverfolgungsziel anpassen möchten.