Vývoj toku vyhodnocení v Azure AI Studiu

Důležité

Některé funkce popsané v tomto článku můžou být dostupné jenom ve verzi Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Toky vyhodnocení jsou speciální typy toků, které vyhodnocují, jak dobře výstupy běhu odpovídají konkrétním kritériím a cílům.

V toku výzvy můžete přizpůsobit nebo vytvořit vlastní tok vyhodnocení přizpůsobený vašim úkolům a cílům a pak ho použít k vyhodnocení jiných toků. V tomto dokumentu se dozvíte:

  • Postup vývoje metody vyhodnocení
  • Seznamte se se vstupy, výstupy a metrikami protokolování pro vyhodnocení toku výzvy.

Začínáme s vývojem metody vyhodnocení

Existují dva způsoby, jak vyvíjet vlastní metody hodnocení:

  • Přizpůsobení integrovaného toku vyhodnocení: Úprava integrovaného toku vyhodnocení

    1. V části Nástroje vyberte Tok výzvy.
    2. Výběrem možnosti Vytvořit otevřete průvodce vytvořením toku.
    3. V galerii toků v části Prozkoumat galerii vyberte Tok vyhodnocení a vyfiltrujte ho podle daného typu. Vyberte ukázku a vyberte Klonovat a proveďte přizpůsobení.
  • Vytvoření nového toku vyhodnocení od začátku: Vývoj zcela nové metody vyhodnocení od základů

    1. V části Nástroje vyberte Tok výzvy.
    2. Výběrem možnosti Vytvořit otevřete průvodce vytvořením toku.
    3. V galerii toků v části Vytvořit podle typu v poli Tok vyhodnocení vyberte Vytvořit a pak uvidíte šablonu toku vyhodnocení.

Principy vyhodnocení v toku výzvy

V toku výzvy je tok posloupnost uzlů, které zpracovávají vstup a generují výstup. Toky vyhodnocení také berou požadované vstupy a vytvářejí odpovídající výstupy.

Mezi speciální funkce metod hodnocení patří:

  • Obvykle běží po otestovaném spuštění a přijímají výstupy z daného spuštění.
  • Kromě výstupů spuštění, které se mají testovat, můžou volitelně obdržet další datovou sadu, která může obsahovat odpovídající základní pravdy.
  • Můžou mít agregační uzel, který vypočítá celkový výkon testovaného toku na základě jednotlivých skóre.
  • Můžou protokolovat metriky pomocí log_metric() funkce.

Představujeme způsob definování vstupů a výstupů při vývoji metod hodnocení.

Vstupy

Vyhodnocení se spustí po jiném spuštění a vyhodnotí, jak dobře výsledky tohoto běhu odpovídají konkrétním kritériím a cílům. Proto vyhodnocení obdrží výstupy vygenerované z daného spuštění.

Můžou být vyžadovány i další vstupy, například základní pravda, které můžou pocházet z datové sady. Ve výchozím nastavení používá vyhodnocení stejnou datovou sadu jako testovací datová sada poskytnutá testovanému spuštění. Pokud jsou ale odpovídající popisky nebo cílové hodnoty základní pravdy v jiné datové sadě, můžete na tuto datovou sadu snadno přepnout.

Proto ke spuštění vyhodnocení potřebujete určit zdroje těchto požadovaných vstupů. Pokud to chcete udělat, zobrazí se při odesílání vyhodnocení oddíl "mapování vstupu" .

  • Pokud zdroj dat pochází z výstupu spuštění, je zdroj označený jako ${run.output.[OutputName]}
  • Pokud zdroj dat pochází z testovací datové sady, je zdroj označený jako ${data.[ColumnName]}

Poznámka:

Pokud vaše vyhodnocení nevyžaduje data z datové sady, nemusíte odkazovat na žádné sloupce datové sady ve vstupní části mapování, což znamená, že výběr datové sady je volitelná konfigurace. Výběr datové sady neovlivní výsledek vyhodnocení.

Input description

Pokud chcete připomenout, jaké vstupy jsou potřeba k výpočtu metrik, můžete přidat popis pro každý požadovaný vstup. Popisy se zobrazí při mapování zdrojů v odeslání dávkového spuštění.

Pokud chcete přidat popisy pro každý vstup, při vývoji metody vyhodnocení vyberte Zobrazit popis ve vstupní části. Popis můžete skrýt výběrem možnosti Skrýt popis.

Tento popis se zobrazí při použití této metody vyhodnocení v dávkovém odeslání.

Výstupy a metriky

Výstupy vyhodnocení jsou výsledky, které měří výkon testovaného toku. Výstup obvykle obsahuje metriky, jako jsou skóre, a může také obsahovat text pro odůvodnění a návrhy.

Výstupy skóre na úrovni instance

V toku výzvy tok zpracuje každou ukázkovou datovou sadu po jednom a vygeneruje výstupní záznam. Podobně platí, že ve většině případů vyhodnocení je pro každý výstup metrika, která umožňuje zkontrolovat, jak tok funguje s jednotlivými daty.

Pokud chcete zaznamenat skóre pro každou ukázku dat, vypočítejte skóre pro každý výstup a zaznamenejte skóre jako výstup toku tak, že ho nastavíte ve výstupní části. Toto prostředí pro vytváření obsahu je stejné jako definování standardního výstupu toku.

Toto skóre vypočítáme v line_process uzlu, které můžete při vytváření podle typu vytvořit a upravit úplně od začátku. Tento uzel Pythonu můžete také nahradit uzlem LLM, který použije LLM k výpočtu skóre.

Pokud se tato metoda vyhodnocení používá k vyhodnocení jiného toku, můžete skóre na úrovni instance zobrazit na kartě Přehled>výstupu.

Protokolování metrik a uzel agregace

Kromě toho je také důležité poskytnout celkové skóre běhu. Můžete zkontrolovat "set as aggregation" uzlu Pythonu v toku vyhodnocení a převést ho na uzel "redukce", což umožňuje uzlu přijímat vstupy jako seznam a zpracovávat je v dávce.

Tímto způsobem můžete vypočítat a zpracovat všechna skóre každého výstupu toku a vypočítat celkový výsledek pro každou variantu.

Metriky můžete protokolovat v uzlu agregace pomocí příkazového řádku flow_sdk.log_metrics(). Metriky by měly být číselné (float/int). Protokolování metrik typu string se nepodporuje.

Toto skóre vypočítáme v aggregate uzlu, které můžete při vytváření podle typu vytvořit a upravit úplně od začátku. Tento uzel Pythonu můžete také nahradit uzlem LLM, který použije LLM k výpočtu skóre. Podívejte se na následující příklad použití log_metric rozhraní API v toku vyhodnocení:

from typing import List
from promptflow import tool, log_metric

@tool
def calculate_accuracy(grades: List[str], variant_ids: List[str]):
    aggregate_grades = {}
    for index in range(len(grades)):
        grade = grades[index]
        variant_id = variant_ids[index]
        if variant_id not in aggregate_grades.keys():
            aggregate_grades[variant_id] = []
        aggregate_grades[variant_id].append(grade)

    # calculate accuracy for each variant
    for name, values in aggregate_grades.items():
        accuracy = round((values.count("Correct") / len(values)), 2)
        log_metric("accuracy", accuracy, variant_id=name)

    return aggregate_grades

Jak jste volali tuto funkci v uzlu Pythonu, nemusíte ji přiřazovat nikde jinde a metriky si můžete prohlédnout později. Pokud se tato metoda vyhodnocení používá při dávkovém spuštění, můžete skóre na úrovni instance zobrazit na kartě Přehled-Metriky>.

Další kroky