Utveckla ett utvärderingsflöde i Azure AI Foundry-portalen
Viktigt!
Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.
Utvärderingsflöden är särskilda typer av flöden som utvärderar hur väl utdata från en körning överensstämmer med specifika kriterier och mål.
I promptflöde kan du anpassa eller skapa ett eget utvärderingsflöde som är anpassat efter dina uppgifter och mål och sedan använda det för att utvärdera andra flöden. I det här dokumentet lär du dig:
- Så här utvecklar du en utvärderingsmetod.
- Förstå indata, utdata och loggningsmått för utvärderingar av promptflöden.
Börjar utveckla en utvärderingsmetod
Det finns två sätt att utveckla egna utvärderingsmetoder:
Anpassa ett inbyggt utvärderingsflöde: Ändra ett inbyggt utvärderingsflöde.
- Under Verktyg väljer du Fråga flöde.
- Välj Skapa för att öppna guiden skapa flöde.
- I flödesgalleriet under Utforska galleri väljer du Utvärderingsflöde för att filtrera efter den typen. Välj ett exempel och välj Klona för att göra anpassning.
Skapa ett nytt utvärderingsflöde från grunden: Utveckla en helt ny utvärderingsmetod från grunden.
- Under Verktyg väljer du Fråga flöde.
- Välj Skapa för att öppna guiden skapa flöde.
- I flödesgalleriet under Skapa efter typ i rutan "Utvärderingsflöde" väljer du Skapa så kan du se en mall för utvärderingsflödet.
Förstå utvärderingen i promptflödet
I Prompt Flow är ett flöde en sekvens med noder som bearbetar indata och genererar utdata. Utvärderingsflöden tar också nödvändiga indata och producerar motsvarande utdata.
Några särskilda funktioner i utvärderingsmetoder är:
- De körs vanligtvis efter körningen som ska testas och tar emot utdata från den körningen.
- Förutom utdata från körningen som ska testas kan de också ta emot en annan datauppsättning som kan innehålla motsvarande grundsanningar.
- De kan ha en aggregeringsnod som beräknar den övergripande prestandan för flödet som testas baserat på de enskilda poängen.
- De kan logga mått med hjälp av
log_metric()
funktionen .
Vi introducerar hur indata och utdata ska definieras i utvecklingen av utvärderingsmetoder.
Indata
En utvärdering körs efter en annan körning för att utvärdera hur väl utdata för den körningen överensstämmer med specifika kriterier och mål. Därför tar utvärderingen emot utdata som genereras från den körningen.
Andra indata kan också krävas, till exempel grundsanning, som kan komma från en datauppsättning. Som standard använder utvärderingen samma datauppsättning som testdatauppsättningen som tillhandahålls till den testade körningen. Men om motsvarande etiketter eller målgrunds sanningsvärden finns i en annan datauppsättning kan du enkelt växla till den.
För att kunna köra en utvärdering måste du därför ange källorna till dessa obligatoriska indata. När du skickar en utvärdering visas avsnittet "indatamappning" .
- Om datakällan kommer från körningsutdata anges källan som
${run.output.[OutputName]}
- Om datakällan kommer från testdatauppsättningen anges källan som
${data.[ColumnName]}
Kommentar
Om utvärderingen inte kräver data från datauppsättningen behöver du inte referera till några datamängdskolumner i avsnittet för indatamappning, vilket indikerar att valet av datauppsättning är en valfri konfiguration. Valet av datauppsättning påverkar inte utvärderingsresultatet.
Beskrivning av indata
För att påminna om vilka indata som behövs för att beräkna mått kan du lägga till en beskrivning för varje nödvändig indata. Beskrivningarna visas när källorna mappas i batchkörningsöverföring.
Om du vill lägga till beskrivningar för varje indata väljer du Visa beskrivning i indataavsnittet när du utvecklar utvärderingsmetoden. Och du kan välja "Dölj beskrivning" för att dölja beskrivningen.
Sedan visas den här beskrivningen för när du använder den här utvärderingsmetoden i batchkörningsöverföring.
Utdata och mått
Utdata från en utvärdering är de resultat som mäter prestanda för flödet som testas. Utdata innehåller vanligtvis mått som poäng och kan även innehålla text för resonemang och förslag.
Resultat på instansnivå
I promptflöde bearbetar flödet varje exempeldatauppsättning en i taget och genererar en utdatapost. På samma sätt finns det i de flesta utvärderingsfall ett mått för varje utdata, så att du kan kontrollera hur flödet presterar på varje enskild data.
Om du vill registrera poängen för varje dataexempel beräknar du poängen för varje utdata och loggar poängen som ett flödesutdata genom att ange den i utdataavsnittet. Den här redigeringsupplevelsen är densamma som att definiera ett standardflödesutdata.
Vi beräknar den här poängen i line_process
noden, som du kan skapa och redigera från grunden när du skapar efter typ. Du kan också ersätta den här python-noden med en LLM-nod för att använda LLM för att beräkna poängen.
När den här utvärderingsmetoden används för att utvärdera ett annat flöde kan poäng på instansnivå visas på fliken Översiktsutdata>.
Måttloggning och aggregeringsnod
Dessutom är det viktigt att ange en övergripande poäng för körningen. Du kan kontrollera "ange som aggregering" för en Python-nod i ett utvärderingsflöde för att omvandla den till en "reduce"-nod, så att noden kan ta in indata som en lista och bearbeta dem i batch.
På så sätt kan du beräkna och bearbeta alla poäng för varje flödesutdata och beräkna ett övergripande resultat för varje variant.
Du kan logga mått i en aggregeringsnod med hjälp av Prompt flow_sdk.log_metrics(). Måtten ska vara numeriska (float/int). Loggning av strängtypsmått stöds inte.
Vi beräknar den här poängen i aggregate
noden, som du kan skapa och redigera från grunden när du skapar efter typ. Du kan också ersätta den här Python-noden med en LLM-nod för att använda LLM för att beräkna poängen. Se följande exempel för att använda API:et log_metric
i ett utvärderingsflöde:
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
Som du kallade den här funktionen i Python-noden behöver du inte tilldela den någon annanstans, och du kan visa måtten senare. När den här utvärderingsmetoden används i en batchkörning kan poäng på instansnivå visas på fliken Översiktsmått>.