Freigeben über


Auswertungsflows und Metriken

Auswertungsflows sind spezielle Typen von Prompt Flows, welche durch die Berechnung von Metriken bewerten, wie gut die Ausgaben einer Ausführung mit bestimmten Kriterien und Zielen übereinstimmen. Sie können Auswertungsflows und Metriken erstellen und anpassen, die auf Ihre Aufgaben und Ziele zugeschnitten sind, und sie zur Auswertung anderer Prompt Flows verwenden. In diesem Artikel werden Auswertungsflows erläutert, wie sie entwickelt und angepasst werden, und wie sie in Prompt Flow-Batchausführungen verwendet werden, um die Flowleistung zu bewerten.

Grundlegendes zu Auswertungsflows

Ein Prompt Flow ist eine Folge von Knoten, die eine Eingabe verarbeiten und eine Ausgabe erzeugen. Auswertungsflows nehmen ebenfalls erforderliche Eingaben an und erzeugen entsprechende Ausgaben, bei denen es sich in der Regel um Scores oder Metriken handelt. Auswertungsflows unterscheiden sich von Standardflows bei der Erstellung und der Nutzung.

Auswertungsflows werden in der Regel nach der Ausführung ausgeführt, die sie testen, indem sie deren Ausgaben erhalten und diese zum Berechnen von Scores und Metriken verwenden. Auswertungsflows protokollieren Metriken mithilfe der log_metric()-Funktion im Prompt Flow-SDK.

Die Ergebnisse eines Auswertungsflows sind die Ergebnisse, welche die Leistung des getesteten Flows messen. Auswertungsflows können über einen Aggregationsknoten verfügen, der die Gesamtleistung des Flows berechnet, welcher über das Testdataset getestet wird.

In den nächsten Abschnitten wird beschrieben, wie Eingaben und Ausgaben in Auswertungsflows definiert werden.

Eingaben

Auswertungsflows berechnen Metriken oder Scores für Batchausführungen, indem sie die Ausgaben der Ausführung annehmen, die sie testen. Wenn es sich bei dem zu testenden Flow beispielsweise um einen QnA-Flow handelt, der eine Antwort auf der Grundlage einer Frage generiert, können Sie eine Eingabe für die Auswertung als answer benennen. Wenn es sich bei dem zu testenden Flow um einen Klassifizierungsflow handelt, der einen Text in eine Kategorie einordnet, können Sie eine Eingabe für die Auswertung als category benennen.

Möglicherweise benötigen Sie andere Eingaben als Grundwahrheit. Wenn Sie beispielsweise die Genauigkeit eines Klassifizierungsflows berechnen möchten, müssen Sie die category-Spalte des Datasets als Grundwahrheit angeben. Wenn Sie die Genauigkeit eines QnA-Flows berechnen möchten, müssen Sie die answer-Spalte des Datasets als Grundwahrheit angeben. Möglicherweise benötigen Sie andere Eingaben zum Berechnen von Metriken, z. B. question und context in QnA- oder RAG-Szenarien (Retrieval Augmented Generation).

Sie können die Eingaben eines Auswertungsflows auf die gleiche Weise definieren wie die Eingaben eines Standardflows. Standardmäßig verwendet die Auswertung dasselbe Dataset wie die getestete Ausführung. Wenn sich die entsprechenden Bezeichnungen oder die Werte der Zielgrundwahrheit jedoch in einem anderen Dataset befinden, können Sie problemlos zu diesem wechseln.

Eingabebeschreibungen

Um die Eingaben zu beschreiben, die für die Berechnung von Metriken erforderlich sind, können Sie Beschreibungen hinzufügen. Die Beschreibungen werden angezeigt, wenn Sie die Eingabequellen in Batchausführungsübermittlungen zuordnen.

Um Beschreibungen für einzelne Eingaben hinzuzufügen, wählen Sie beim Entwickeln Ihrer Auswertungsmethode im Abschnitt „Eingabe“ die Option Beschreibung anzeigen aus, und geben Sie dann die Beschreibungen ein.

Screenshot der Auswertung der Klassifizierungsgenauigkeit mit hervorgehobener Option zum Ausblenden der Beschreibung

Um die Beschreibungen aus dem Eingabeformular auszublenden, wählen Sie Beschreibung ausblenden aus.

Screenshot der Zuordnung von Auswertungseingaben mit hervorgehobenen Beschreibungen für Antworten

Ausgaben und Metriken

Die Ausgaben einer Auswertung sind die Ergebnisse, mit denen die Leistung des getesteten Flows angezeigt wird. Die Ausgabe enthält normalerweise Metriken wie Scores und kann auch Text mit Begründungen und Vorschläge enthalten.

Ausgabescores

Ein Prompt Flow verarbeitet jeweils eine Datenzeile und generiert einen Ausgabedatensatz. Auswertungsflows können ebenso Scores für jede Datenzeile berechnen, sodass Sie die Leistung eines Flows für jeden einzelnen Datenpunkt überprüfen können.

Sie können die Scores für jede Dateninstanz als Ausgaben des Auswertungsflows erfassen, indem Sie sie im Ausgabeabschnitt des Auswertungsflows angeben. Dieser Vorgang entspricht dem Definieren einer Ausgabe beim Standardflow.

Screenshot des Abschnitts „Ausgaben“ mit einem Namen und einem Wert.

Sie können die einzelnen Scores auf der Registerkarte Ausgabe anzeigen, wenn Sie Ausgabe anzeigen auswählen. Dies entspricht dem Überprüfen von Ausgaben der Batchausführung eines Standardflows. Sie können diese Scores auf Instanzebene an die Ausgabe des getesteten Flows anfügen.

Aggregation und Protokollieren von Metriken

Der Auswertungsflow bietet auch eine Gesamtbewertung für die Ausführung. Um die Gesamtergebnisse von einzelnen Ausgabescores zu unterscheiden, werden diese Werte für die Ausführungsleistung insgesamt Metriken genannt.

Um einen Gesamtbewertungswert basierend auf einzelnen Scores zu berechnen, aktivieren Sie das Kontrollkästchen Aggregation für einen Python-Knoten in einem Auswertungsflow, um ihn in einen reduce-Knoten umzuwandeln. Der Knoten nimmt dann die Eingaben als Liste an und verarbeitet sie als Batch.

Screenshot der Überschrift des Python-Knotens mit aktiviertem Kontrollkästchen „Aggregation“.

Mithilfe der Aggregation können Sie alle Scores jeder Flowausgabe berechnen und verarbeiten und ein Gesamtergebnis für jeden Score berechnen. Wenn Sie z. B. die Genauigkeit eines Klassifizierungsflows berechnen möchten, können Sie die Genauigkeit jeder Scoreausgabe und dann die durchschnittliche Genauigkeit aller Scoreausgaben berechnen. Anschließend können Sie die durchschnittliche Genauigkeit mithilfe von promptflow_sdk.log_metric() als Metrik protokollieren. Metriken müssen numerisch sein, z. B. float oder int. Die Protokollierung von Metriken mit einem Zeichenfolgentyp wird nicht unterstützt.

Der folgende Codeschnipsel ist ein Beispiel für die Berechnung der Gesamtgenauigkeit durch Ermitteln des Durchschnitts der Genauigkeitsbewertung (grades) aller Datenpunkte. Die Gesamtgenauigkeit wird mithilfe von promptflow_sdk.log_metric() als Metrik protokolliert.

from typing import List
from promptflow import tool, log_metric

@tool
def calculate_accuracy(grades: List[str]): # Receive a list of grades from a previous node
    # calculate accuracy
    accuracy = round((grades.count("Correct") / len(grades)), 2)
    log_metric("accuracy", accuracy)

    return accuracy

Da Sie diese Funktion im Python-Knoten aufgerufen haben, müssen Sie sie an keiner anderen Stelle zuweisen, und Sie können die Metriken später anzeigen. Nachdem Sie diese Auswertungsmethode in einer Batchausführung verwendet haben, können Sie die Metrik anzeigen, die die Gesamtleistung anzeigt, indem Sie die Registerkarte Metriken auswählen, wenn Sie Ausgaben anzeigen.

Screenshot: Registerkarte „Metriken“ mit den von der Protokollierungsmetrik protokollierten Metriken.

Entwickeln eines Auswertungsflows

Um Ihren eigenen Auswertungsflow zu entwickeln, wählen Sie auf der Seite Prompt Flow in Azure Machine Learning Studio Erstellen aus. Auf der Seite Neuen Flow erstellen können Sie eine der folgenden Aktionen ausführen:

  • Wählen Sie Erstellen auf der Karte Auswertungsflow unter Erstellen nach Typ aus. Diese Auswahl stellt eine Vorlage für die Entwicklung einer neuen Auswertungsmethode bereit.

  • Wählen Sie Auswertungsflow unter Katalog durchsuchen aus, und wählen Sie einen der verfügbaren integrierten Flows aus. Wählen Sie Details anzeigen aus, um eine Zusammenfassung der einzelnen Flows zu erhalten, und wählen Sie Klonen aus, um den Flow zu öffnen und anzupassen. Der Assistent für die Flowerstellung hilft Ihnen beim Ändern des Flows für Ihr eigenes Szenario.

Screenshot: Verschiedene Möglichkeiten zum Erstellen eines neuen Auswertungsflows.

Berechnen von Scores für die einzelnen Datenpunkte

Auswertungsflows berechnen Scores und Metriken für Flows, die in Datasets ausgeführt werden. Der erste Schritt bei Auswertungsflows ist das Berechnen der Scores für jede einzelne Datenausgabe.

Im integrierten Auswertungsflow für die Klassifikationsgenauigkeit wird z. B. grade, womit die Genauigkeit jeder durch den Ablauf erzeugten Ausgabe gegenüber der entsprechenden Grundwahrheit gemessen wird, im Python-Knoten grade berechnet.

Wenn Sie die Vorlage für den Auswertungsflow verwenden, berechnen Sie diesen Score im Python-Knoten line_process. Sie können den Python-Knoten line_process auch durch einen LLM-Knoten ersetzen (Large Language Model), um ein LLM zum Berechnen des Scores zu verwenden, oder mehrere Knoten zum Ausführen der Berechnung verwenden.

Screenshot: Knoten „line_process“ in der Vorlage.

Sie geben die Ausgaben dieses Knotens als Ausgaben des Auswertungsflows an, was bedeutet, dass die Ausgaben die für jede Datenprobe berechneten Scores sind. Sie können auch Begründungen als zusätzliche Informationen ausgeben. Dies ist die gleiche Erfahrung wie bei der Definition von Ausgaben im Standardflow.

Berechnen und Protokollieren von Metriken

Der nächste Schritt bei der Auswertung besteht darin, die Gesamtmetriken zu berechnen, um die Ausführung zu bewerten. Sie berechnen Metriken in einem Python-Knoten, für den die Option Aggregation ausgewählt ist. Dieser Knoten übernimmt die Scores aus dem vorherigen Berechnungsknoten, organisiert sie in einer Liste und berechnet dann die Gesamtwerte.

Wenn Sie die Auswertungsvorlage verwenden, wird dieser Score im Knoten aggregate berechnet. Der folgende Codeausschnitt zeigt die Vorlage für den Aggregationsknoten.


from typing import List
from promptflow import tool

@tool
def aggregate(processed_results: List[str]):
    """
    This tool aggregates the processed result of all lines and log metric.
    :param processed_results: List of the output of line_process node.
    """
    # Add your aggregation logic here
    aggregated_results = {}

    # Log metric
    # from promptflow import log_metric
    # log_metric(key="<my-metric-name>", value=aggregated_results["<my-metric-name>"])

    return aggregated_results

Sie können ihre eigene Aggregationslogik verwenden, z. B. die Berechnung des Mittelwerts, des Medians oder der Standardabweichung der Scores.

Protokollieren Sie die Metriken mithilfe der promptflow.log_metric()-Funktion. Sie können mehrere Metriken in einem einzigen Auswertungsflow protokollieren. Metriken müssen numerisch sein (float/int).

Verwenden von Auswertungsflows

Nach der Erstellung Ihres eigenen Auswertungsflows und Ihrer Metriken können Sie diesen Flow verwenden, um die Leistung eines Standardflows zu bewerten. Sie können z. B. einen QnA-Flow auswerten, um seine Leistung bei einem großes Dataset zu testen.

  1. Öffnen Sie in Azure Machine Learning Studio den Flow, den Sie auswerten möchten, und wählen Sie in der oberen Menüleiste Auswerten aus.

    Screenshot: Auswertungsschaltfläche

  2. Geben Sie im Assistenten Batchausführung und -auswertung die Werte für Grundlegende Einstellungen und Einstellungen für Batchausführung ein, um das Dataset zum Testen zu laden und die Eingabezuordnung zu konfigurieren. Weitere Informationen finden Sie unter Übermitteln einer Batchausführung und Auswertung eines Flows.

  3. Im Schritt Auswertung auswählen können Sie eine oder mehrere Ihrer angepassten Auswertungen oder integrierten Auswertungen auswählen, die ausgeführt werden sollen. Mit der angepassten Auswertung werden alle Auswertungsflows aufgelistet, die Sie erstellt, geklont oder angepasst haben. Auswertungsflows, die von anderen Personen im selben Projekt erstellt wurden, werden in diesem Abschnitt nicht angezeigt.

    Screenshot: Auswählen einer angepassten Auswertung

  4. Geben Sie auf dem Bildschirm Auswertung konfigurieren die Quellen aller Eingabedaten an, die für die Auswertungsmethode erforderlich sind. Die Spalte mit der Grundwahrheit kann beispielsweise aus einem Datensatz stammen. Wenn Ihre Auswertungsmethode keine Daten aus einem Dataset erfordert, müssen Sie kein Dataset auswählen oder im Eingabezuordnungsbereich auf Datasetspalten verweisen.

    Im Abschnitt Eingabezuordnung für Auswertung können Sie die Quellen der erforderlichen Eingaben für die Auswertung angeben. Wenn die Datenquelle aus Ihrer Ausführungsausgabe stammt, legen Sie die Quelle als ${run.outputs.[OutputName]} fest. Wenn die Daten aus Ihrem Testdatensatz stammen, legen Sie die Quelle auf ${data.[ColumnName]} fest. Alle Beschreibungen, die Sie für die Dateneingaben festlegen, werden ebenfalls hier angezeigt. Weitere Informationen finden Sie unter Übermitteln einer Batchausführung und Auswertung eines Flows.

    Screenshot der Zuordnung von Auswertungseingaben

    Wichtig

    Wenn Ihr Auswertungsflow über einen LLM-Knoten verfügt oder eine Verbindung zum Verwenden von Anmeldeinformationen oder anderen Schlüsseln erfordert, müssen Sie die Verbindungsdaten im Abschnitt Verbindung auf diesem Bildschirm eingeben, um den Auswertungsflow verwenden zu können.

  5. Wählen Sie Überprüfen und übermitteln und dann Übermitteln aus, um den Auswertungsflow auszuführen.

  6. Nach Abschluss des Auswertungsflows können Sie die Scores auf Instanzebene anzeigen, indem Sie Batchausführungen anzeigen>Ausgaben der letzten Batchausführung anzeigen oben im ausgewerteten Flow auswählen. Wählen Sie ihre Auswertungsausführung aus der Dropdownliste Verwandte Ergebnisse anfügen aus, um die Bewertung für jede Datenzeile anzuzeigen.

    Screenshot: Registerkarte „Ausgabe“ mit angehängtem und hervorgehobenem Auswertungsergebnis