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