Freigeben über


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

Hinweis

Dieses Feature ist zurzeit als öffentliche Preview 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 versuchen APP-Entwickler, ihr Verständnis zu verbessern und die Leistung zu 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. Weitere Informationen finden Sie unter Installieren, Einrichten und Verwenden der CLI (v2).
  • Ein Azure Machine Learning-Arbeitsbereich. Wenn keiner vorliegt, führen Sie die Schritte unter Schnellstart: Erstellen von Arbeitsbereichsressourcen aus, um einen Arbeitsbereich zu erstellen.
  • Application Insights. In der Regel verfügt ein Maschineller Lernarbeitsbereich über einen standardmäßig verknüpften Application Insights-Arbeitsbereich. Wenn Sie eine neue Ressource verwenden möchten, können Sie eine Application Insights-Ressource erstellen.
  • Lernen Sie , wie man einen Ablauf im Prompt Flow erstellt und testet.
  • Grundlegende Kenntnisse zu verwalteten Onlineendpunkten Verwaltete Onlineendpunkte nutzen leistungsstarke CPU- und GPU-Computer in Azure, die skalierbar sind und vollständig verwaltet werden. Auf diese Weise müssen Sie sich nicht um die Einrichtung und Verwaltung der zugrunde liegenden Bereitstellungsinfrastruktur kümmern. Weitere Informationen zu verwalteten Onlineendpunkten finden Sie unter Onlineendpunkte und Bereitstellungen für Rückschlüsse in Echtzeit.
  • Die rollenbasierte Zugriffssteuerung in Azure (Azure RBAC) wird verwendet, um Zugriff auf Vorgänge in Azure Machine Learning zu gewähren. Um die Schritte in diesem Artikel auszuführen, muss Ihrem Benutzerkonto die Rolle „Besitzer“ oder „Mitwirkender“ für den Azure Machine Learning-Arbeitsbereich bzw. eine benutzerdefinierte Rolle zugewiesen werden, die „Microsoft.MachineLearningServices/workspaces/onlineEndpoints/“ zulässt. Wenn Sie Studio zum Erstellen/Verwalten von Online-Endpunkten/Einsätzen verwenden, benötigen Sie eine zusätzliche Berechtigung „Microsoft.Resources/deployments/write“ vom Eigentümer der Ressourcengruppe. Weitere Informationen finden Sie unter Zugriff auf einen Azure Machine Learning-Arbeitsbereich verwalten.

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 verwenden wir Bereitstellen eines Flows für von Azure Machine Learning verwaltete Onlineendpunkte als Beispiel. 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 etc. 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 den Arbeitsbereich erfasst werden, das mit Application Insights verknüpft ist.

Wenn Sie SDK oder CLI verwenden, können Sie eine Eigenschaft app_insights_enabled: true in der Yaml-Bereitstellungsdatei hinzufügen, die Daten zu arbeitsbereichsverknüpften Application Insights sammelt. 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.

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

Hinweis

Wenn Sie nur app_insights_enabled: true festlegen, ihr Arbeitsbereich jedoch nicht über eine verknüpfte Application Insights verfügt, schlägt Ihre Bereitstellung nicht fehl, es werden jedoch keine Daten gesammelt.

Wenn Sie sowohl app_insights_enabled: true als auch die oben genannte Umgebungsvariable gleichzeitig angeben, werden die Ablaufverfolgungsdaten und Metriken an die arbeitsbereichsgebundenen Application Insights gesendet. 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 finden Sie unter OpenTelemetry-Ablaufverfolgungen zu Ablaufverfolgungen. 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.

Screenshot der Ablaufverfolgungsdaten in Anwendungserkenntnissen.

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.

Ö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.

Screenshot: Aktivieren mehrdimensionaler Metriken

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.

Screenshot: Metriken für den Prompt-Flow-Endpunkt

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_hisotry 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. Sie müssen den api_key Wert ausfüllen oder den Code entsprechend Ihrem Anwendungsfall ändern.

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

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

Screenshot von Feedback- und Ablaufverfolgungsdaten einer Anforderung in Application Insights.

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.

Nächste Schritte