Protokollieren von Endbenutzerfeedback (Vorschau)

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-projects und azure-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.0 oder 1.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 zwischen 1.0 und 5.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