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. Sehen Sie , wie Sie wissen, welche Art von Projekt Sie haben?
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 Flexbox-Flüsse müssen Sie die Datei flow.flex.yaml anstelle von flow.dag.yaml vorbereiten.
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 den von Ihnen angegebenen Anwendungserkenntnissen anzeigen. Der folgende Screenshot zeigt ein Beispiel für ein Ereignis eines bereitgestellten Flusses, der mehrere Knoten enthält. Wählen Sie Application Insights>Transaktionssuche> und dann jeden Knoten aus, um die detaillierte Ablaufverfolgung anzuzeigen.
Das Abhängigkeiten-Ereignis zeichnet Aufrufe Ihrer Bereitstellungen auf. 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 Ausführungskosten einer Anfrage, response_type, bedeuten, ob sie vollständig ist, das erste Byte oder das letzte Byte. |
flow_request |
Zähler |
flow, response_code, exception, streaming |
Die Anzahl der Flussanforderungen. |
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. Der Prompt-Flow-Dienst hilft dem Kunden, die Feedbackdaten in einer Trace-Spanne zu speichern. Die Daten werden an das vom Kunden konfigurierte Ziel des Trace Exporteurs gespeichert. Prompt-Flow-Serving unterstützt auch die Standard-Trace-Kontext-Verbreitung gemäß OpenTelemetry. Er berücksichtigt den im Anforderungsheader festgelegten Trace-Kontext und verwendet diesen Kontext als übergeordneten Kontext des Anforderungs-Span. Sie können die verteilte Ablaufverfolgungsfunktion verwenden, um die Feedbackablaufverfolgung mit der Chatanfrage-Ablaufverfolgung zu korrelieren.
Im folgenden Beispielcode wird gezeigt, wie Sie einen Flow auswerten, der an einem verwalteten Endpunkt bereitgestellt wurde, der für die Ablaufverfolgung aktiviert ist, und das Feedback an denselben Ablaufverfolgungsspannenpunkt einer Auswertungsanfrage 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 Span-Verarbeitungslogik und Ihr eigenes persistentes Ablaufverfolgungsziel anpassen möchten.