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.
Important
Die in diesem Artikel markierten Elemente (Vorschau) sind aktuell als öffentliche 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 Supplementale Nutzungsbedingungen für Microsoft Azure Previews.
Erfassen Sie Endbenutzerfeedback, z. B. Reaktionen wie Daumen hoch oder Daumen runter oder numerische Bewertungsskalen, in Ihrer KI-Anwendung und leiten Sie es mithilfe der OpenTelemetry (OTel)-Semantik an Ihr Observability-Backend weiter. Wenn Sie Benutzerfeedback protokollieren, können Sie subjektive Qualitätssignale mit Ablaufverfolgungsdaten korrelieren, die Benutzerzufriedenheit im Laufe der Zeit messen und eine kontinuierliche Verbesserung Ihrer Agenten und Modelle fördern.
Overview
Die Protokollierung von Endnutzer-Feedback verwendet OTel-Semantikkonventionen, um strukturierte Feedback-Ereignisse auszugeben, die einem bestimmten Trace oder Span zugeordnet sind. Dies bedeutet, dass Feedbackdaten über dieselbe Telemetriepipeline wie Ihre Ablaufverfolgungen und Metriken fließen, sodass Sie eine einheitliche Ansicht des Anwendungsverhaltens und der Benutzerstimmung erhalten.
Wichtige Funktionen:
- Daumen nach oben oder Daumen unten: Notieren Sie binäre Benutzergenehmigungssignale, die mit einer bestimmten Agentantwort verbunden sind.
- Bewertungsskala: Erfassen Sie numerische Bewertungen, z. B. 1 bis 5 Sterne, um die Benutzerzufriedenheit zu quantifizieren.
- Trace-Korrelation: Jedes Feedback-Ereignis ist mit dem ursprünglichen Trace und Span verknüpft, sodass Sie aggregierte Zufriedenheitsmetriken bis auf einzelne Interaktionen herunterbrechen können.
- Standard-OTel-Transport: Feedbackereignisse verwenden die OpenTelemetry-Ereignis-API, sodass sie über Ihre vorhandene OTel-Pipeline in Application Insights oder ein kompatibles Back-End exportiert werden.
Voraussetzungen
Ein Foundry-Projekt mit einer verbundenen Application Insights-Ressource. Weitere Informationen finden Sie unter Ablaufverfolgung einrichten.
Die in Ihrer Anwendung konfigurierte OpenTelemetry-Instrumentierung. Anweisungen zum Einrichten finden Sie unter Set up tracing in Microsoft Foundry.
Python 3.9 oder höher oder eine unterstützte Sprache mit OTel SDK-Unterstützung.
Die installierten Pakete
azure-ai-projectsundazure-monitor-opentelemetry:pip install "azure-ai-projects>=2.0.0" azure-monitor-opentelemetry python-dotenv
Auswertungstypen
Erfassen Sie menschliches Feedback als gen_ai.evaluation.result OpenTelemetry-Ereignis. Das System unterstützt zwei Auswertungstypen:
| Typ | Description | Rendern der Benutzeroberfläche | Punktebereich |
|---|---|---|---|
| Binär | Eine Pass/Fail-Auswertung. | Daumen nach oben oder Daumen nach unten |
0.0 (fail) oder 1.0 (pass) |
| Likert-5-Punkte | Eine Ordnungsbewertung auf einer 5-Punkt-Skala. | 5-Sterne-Bewertung oder Likert-Skala (stark nicht einverstanden → stark zustimmen) |
1.0 bis 5.0 |
Zwei Quelltypen können Feedback geben:
- Builder: Ein Mensch, der mit einer Microsoft-Lösung für Observability bewertet, z. B. in Foundry oder im Azure Monitor-Portal.
- End user: Ein Mensch, der über eine Anwendungsschnittstelle auswertet, die eine Microsoft Observability-Lösung überwacht.
Ereignisattribute
Jede menschliche Auswertung wird als gen_ai.evaluation.result Ereignis ausgegeben. In den folgenden Abschnitten werden die erforderlichen Attribute für jeden Auswertungstyp beschrieben. Eine vollständige Referenzimplementierung finden Sie unter sample_human_evaluations.py.
Eine binäre Bewertung ausgeben (Daumen hoch oder runter)
Binäre Auswertungen erfassen Pass- oder Fail-Feedback. Der Wert muss 0.0 (nicht bestanden) oder 1.0 (bestanden) sein.
Regeln:
-
gen_ai.evaluation.score.value:0.0oder1.0 -
gen_ai.evaluation.score.label:"fail"oder"pass" -
internal_properties.gen_ai.evaluation.type:"boolean" -
internal_properties.gen_ai.evaluation.min_value:0.0 -
internal_properties.gen_ai.evaluation.max_value:1.0 -
internal_properties.gen_ai.evaluation.threshold:1.0 -
internal_properties.gen_ai.evaluation.desirable_direction:"increase"
Beispiel: Endbenutzer geben Daumen nach oben
Ein ausführungsfähiges Beispiel finden Sie unter sample_human_evaluations.py.
Eine 5-Punkte-Likert-Bewertung ausgeben (Bewertungsskala)
Likert 5-Punkt-Auswertungen erfassen Ordinalfeedback auf einer Skala von 1 bis 5 Punkten. Eine Punktzahl bei oder über dem Schwellenwert (Standard 3.0) wird als Pass betrachtet.
Regeln:
-
gen_ai.evaluation.score.value: ein Wert zwischen1.0und5.0 -
gen_ai.evaluation.score.label:"pass"wenn die Bewertung ≥ Schwellenwert, andernfalls"fail" -
internal_properties.gen_ai.evaluation.type:"ordinal" -
internal_properties.gen_ai.evaluation.min_value:1.0 -
internal_properties.gen_ai.evaluation.max_value:5.0 -
internal_properties.gen_ai.evaluation.threshold:3.0 -
internal_properties.gen_ai.evaluation.desirable_direction:"increase"
Beispiel: Builder bewertet Relevanz im Foundry-Portal
Ein ausführungsfähiges Beispiel finden Sie unter sample_human_evaluations.py.
Feedback in Application Insights anzeigen
Nachdem Feedbackereignisse über Ihre OTel-Pipeline exportiert wurden, können Sie sie mithilfe von KQL in Application Insights abfragen:
customEvents
| where name == "gen_ai.evaluation.result"
| extend
eval_name = tostring(customDimensions["gen_ai.evaluation.name"]),
score = todouble(customDimensions["gen_ai.evaluation.score.value"]),
label = tostring(customDimensions["gen_ai.evaluation.score.label"]),
eval_source = tostring(customDimensions["microsoft.gen_ai.human_evaluation.source"]),
internal = parse_json(tostring(customDimensions["internal_properties"]))
| extend
eval_type = tostring(internal["gen_ai.evaluation.type"])
| where eval_source in ("builder", "end_user")
| summarize
total = count(),
pass_rate = round(countif(label == "pass") * 100.0 / count(), 1),
avg_score = round(avg(score), 2)
by eval_name, eval_type, bin(timestamp, 1h)
| order by timestamp desc