Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt nur für:klassisches Foundry Portal. Dieser Artikel ist für das neue Foundry-Portal nicht verfügbar.
Erfahren Sie mehr über das neue Portal.
Hinweis
Links in diesem Artikel können Inhalte in der neuen Microsoft Foundry-Dokumentation anstelle der jetzt angezeigten Foundry-Dokumentation (klassisch) öffnen.
Wichtig
In diesem Artikel markierte Elemente (Vorschau) befinden sich derzeit in der öffentlichen Vorschau. Diese Vorschau wird ohne Vereinbarung auf Serviceebene bereitgestellt und wird für Produktionsworkloads nicht empfohlen. Bestimmte Features werden möglicherweise nicht unterstützt oder weisen eingeschränkte Funktionen auf. Weitere Informationen finden Sie unter Supplementale Nutzungsbedingungen für Microsoft Azure Previews.
Nachdem Sie eine generative KI-Anwendung in der Produktion bereitgestellt haben, sollten Sie Ihr Verständnis verbessern und die Leistung optimieren. Ablaufverfolgungsdaten für jede Anforderung, aggregierte Metriken und Benutzerfeedback spielen alle kritischen Rollen.
In diesem Artikel erfahren Sie, wie Sie die Ablaufverfolgung aktivieren, aggregierte Metriken sammeln und während der Inferenzzeit Ihrer Flow-Bereitstellung Benutzerfeedback sammeln.
Hinweis
Für eine verbesserte Methode zur kontinuierlichen Überwachung bereitgestellter Anwendungen (außer "prompt flow") sollten Sie Azure KI Onlineauswertung verwenden.
Voraussetzungen
Wichtig
Dieser Artikel bietet Unterstützung älterer Systeme für hub-basierte Projekte. Es funktioniert nicht für Foundry-Projekte. Vgl. Woher weiß ich, welche Art von Projekt ich habe?
SDK-Kompatibilitätshinweis: Codebeispiele erfordern eine bestimmte Microsoft Foundry SDK-Version. Wenn Kompatibilitätsprobleme auftreten, sollten Sie die Migration von einem hubbasierten zu einem Foundry-Projekt in Betracht ziehen.
- Ein Azure Konto mit einem aktiven Abonnement. Wenn Sie kein Konto haben, erstellen Sie ein free Azure Konto, das ein kostenloses Testabonnement enthält.
- Wenn Sie über keins verfügen, erstellen Sie ein hubbasiertes Projekt.
- Die Azure CLI und die Azure Machine Learning Erweiterung für die Azure CLI.
- Ein Microsoft Foundry-Projekt. Wenn Sie noch kein Projekt haben, können Sie ein Projekt erstellen.
- Eine Application Insights-Ressource. Wenn Sie noch keine Application Insights-Ressource haben, können Sie eine erstellen.
- Azure rollenbasierte Zugriffssteuerungen werden verwendet, um Den Zugriff auf Vorgänge in Azure Machine Learning zu gewähren. Um die Schritte in diesem Artikel auszuführen, müssen Sie über Besitzer- oder Mitwirkendeberechtigungen für die ausgewählte Ressourcengruppe verfügen. Weitere Informationen finden Sie unter Rollenbasierte Zugriffssteuerung im Foundry-Portal.
Bereitstellen eines Flusses für echtzeitbasierte Rückschlüsse
Nachdem Sie den Fluss ordnungsgemäß getestet haben (entweder ein Flexfluss oder ein DAG-Fluss), können Sie den Fluss in der Produktion bereitstellen. In diesem Artikel verwenden wir "Bereitstellen eines Flusses für echtzeitbasierte Ableitung " als Beispiel. Für Flex-Flows müssen Sie die flow.flex.yaml-Datei anstelle von flow.dag.yaml aufbereiten.
Sie können auch auf anderen Plattformen bereitstellen, z. B. Docker-Container und Kubernetes-Cluster.
Verwenden Sie das aktuellste Prompt-Flow-Basisimage, um den Flow bereitzustellen und die API für Ablaufverfolgung und Feedbacksammlung zu unterstützen.
Aktivieren Sie das Tracing und sammeln Sie Systemmetriken für Ihre Bereitstellung.
Wenn Sie das Foundry-Portal zum Bereitstellen verwenden, wählen Sie> im Bereitstellungsassistenten die Application Insights-Diagnose>Erweiterte Einstellungen aus. Mithilfe dieser Methode sammeln Sie Ablaufverfolgungsdaten und Systemmetriken für das Projekt, das mit Application Insights verknüpft ist.
Wenn Sie das SDK oder die CLI verwenden, fügen Sie die app_insights_enabled: true Eigenschaft in der Yaml-Bereitstellungsdatei hinzu, um Daten zum Projekt zu sammeln, das mit Application Insights verknüpft ist.
app_insights_enabled: true
Sie können auch andere Anwendungserkenntnisse durch die Umgebungsvariable APPLICATIONINSIGHTS_CONNECTION_STRING in der Yaml-Bereitstellungsdatei angeben. Die Verbindungszeichenfolge für Application Insights finden Sie auf der Seite Overview im Azure-Portal.
environment_variables:
APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
Hinweis
Wenn Sie nur app_insights_enabled: true festlegen, ihr Projekt aber keine verknüpfte Application Insights-Ressource hat, schlägt Ihre Bereitstellung nicht fehl, aber es werden keine Daten gesammelt.
Wenn Sie sowohl app_insights_enabled: true als auch die vorherige Umgebungsvariable gleichzeitig angeben, werden Ablaufverfolgungsdaten und Metriken an das Projekt gesendet, das mit Application Insights verbunden ist. Wenn Sie unterschiedliche Anwendungserkenntnisse angeben möchten, behalten Sie die Umgebungsvariable nur bei.
Wenn Sie auf anderen Plattformen bereitstellen, können Sie auch die Umgebungsvariable APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string> verwenden, um Ablaufverfolgungsdaten und Metriken für die von Ihnen angegebenen Anwendungserkenntnisse 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 Daten zu Funktionsaufrufen, Variablenwerten und Systemereignissen enthalten. Traces helfen, die Komponenten einer Anwendung in diskrete Eingaben und Ausgaben aufzuteilen. Dieser Prozess ist entscheidend für das Debuggen und Verstehen einer Anwendung. Weitere Informationen zu Ablaufverfolgungen finden Sie auf dieser Website. Die Ablaufverfolgungsdaten folgen der 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 Flusses, der mehrere Knoten enthält. Navigieren Sie zu Application Insights>Untersuchen>Transaktionssuche und wählen Sie die Knoten aus, für die die detaillierte Ablaufverfolgung angezeigt werden soll.
Das Ereignis vom Typ Abhängigkeit erfasst Aufrufe aus Ihren Bereitstellungen. Der Name des Ereignisses entspricht dem des Flow-Ordners. 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 Nutzung von OpenAI-Token. |
flow_latency |
Histogramm |
flow, response_code, streaming, response_type |
Die Kosten für die Ausführung der Anforderung (response_type) geben an, ob es vollständig, das erste Byte oder das letzte Byte ist. |
flow_request |
Zähler |
flow, response_code, exception, streaming |
Die Anzahl der Flowanforderungen. |
node_latency |
Histogramm |
flow, noderun_status |
Die Kosten für die Knotenausführung. |
node_request |
Zähler |
flow, node, exception, run_status |
Die Anzahl der Knotenausführungen. |
rpc_latency |
Histogramm |
flow, nodeapi_call |
Die Kosten für den Remoteprozeduraufruf. |
rpc_request |
Zähler |
flow, node, api_call, exception |
Die Anzahl der Remoteprozeduraufrufe. |
flow_streaming_response_duration |
Histogramm | flow |
Die Kosten für das Versenden der Streamingantwort reichen vom Senden des ersten Bytes bis zum Senden des letzten Bytes. |
Im Azure-Portal finden Sie die Standardmäßigmetriken "Application Insights" des Arbeitsbereichs auf der Arbeitsbereichsübersichtsseite.
- Öffnen Sie Application Insights, und wählen Sie " Nutzung" und "Geschätzte Kosten " im linken Bereich aus. Wählen Sie benutzerdefinierte Metriken (Vorschau)>Mit Dimensionen aus, und speichern Sie die Änderung.
- Wählen Sie im linken Bereich die Registerkarte "Metriken " aus. Wählen Sie im Metric Namespace die Promptflow Standardmetriken aus. Sie können die Metriken aus der Dropdownliste " Metrik " mit verschiedenen Aggregationsmethoden untersuchen.
Sammeln von Feedback und Senden an Application Insights
Der Prompt Flow stellt eine neue /feedback API bereit, die es Kunden ermöglicht, Feedback zu sammeln. Die Feedbacknutzlast kann beliebige JSON-Formatdaten sein. Die prompt flow-Bereitstellung ermöglicht es Kunden, die Feedbackdaten in einem Ablaufverfolgungsbereich zu speichern. Die Daten werden an das vom Kunden konfigurierte Ziel des Exportprogramms gespeichert. Die prompt flow-Bereitstellung unterstützt auch die OpenTelemetry-Standardverteilung des Ablaufverfolgungskontexts. Sie berücksichtigt den im Anforderungsheader festgelegten Ablaufverfolgungskontext und verwendet diesen Kontext als den übergeordneten Bereichskontext der Anforderung. Sie können die Funktion für die verteilte Ablaufverfolgung für die Korrelation zwischen der Feedback-Ablaufverfolgung und der Ablaufverfolgung für Chatanforderungen nutzen.
Der folgende Beispielcode zeigt, wie Sie einen bereitgestellten Flow für einen verwalteten Endpunkt mit aktivierter Ablaufverfolgung bewerten und das Feedback an denselben Ablaufverfolgungsbereich einer Bewertungsanforderung senden. Der Fluss hat die Eingaben question und chat_history. Die Ausgabe lautet answer. Nachdem der Endpunkt bewertet wurde, wird Feedback gesammelt und an Application Insights gesendet, wie angegeben, wenn Sie den Flow bereitstellen.
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 might 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 Rückmeldungen in Application Insights anzeigen.
Erweiterte Verwendung: Exportieren der Ablaufverfolgung in einen benutzerdefinierten OpenTelemetry-Sammeldienst
In einigen Fällen möchten Sie möglicherweise die Tracking-Daten in Ihren bereitgestellten OpenTelemetry-Collector-Dienst exportieren. Um diesen Dienst zu aktivieren, stellen Sie OTEL_EXPORTER_OTLP_ENDPOINT ein. Verwenden Sie diesen Exporter, wenn Sie Ihre eigene Bereichsverarbeitungslogik und Ihr eigenes persistentes Ablaufverfolgungsziel anpassen möchten.