Een evaluatiegegevensset en evaluators maken (preview)

Important

Agent Optimizer is momenteel in preview. Deze preview wordt aangeboden zonder een service level agreement en we raden deze niet aan voor productieworkloads. Bepaalde functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure Previews voor meer informatie.

De agentoptimalisator evalueert uw agent aan de hand van een dataset - een verzameling taken - beoordeeld door beoordelaars. U kunt beide automatisch genereren vanuit de CLI of handmatig een gegevensset maken voor volledig beheer.

Beide onderdelen zijn essentieel voor een goede optimalisatie: de gegevensset definieert wat er moet worden getest en de evaluators bepalen hoe elke reactie moet worden beoordeeld. Zwakke evaluators produceren luidruchtige scores die leiden tot slechte optimalisatie, dus investeer in sterke evaluators net zo veel als representatieve taken.

Het maken van deze assets is de tweede stap in de optimalisatiewerkstroom nadat u de optimalisatie van uw agent gereed hebt gemaakt. De optimizer gebruikt deze om uw basislijn te scoren en kandidaten te rangschikken.

Prerequisites

De snelste manier om evaluatieassets te maken is met azd ai agent eval generate. De opdracht detecteert uw agent automatisch en genereert alles wat de optimizer nodig heeft:

azd ai agent eval generate

Standaard wordt het volgende gegenereerd:

  • Een seed-gegevensset met taken die zijn afgestemd op het domein van uw agent.
  • Evaluators die antwoorden scoren: een ingebouwde evaluator (zoals builtin.task_adherence) plus een aangepaste rubriek evaluator die is afgestemd op uw agent.
  • Een uitvoerbaar eval.yaml dat ze met elkaar verbindt.

Zie Evaluatieassets initialiseren voor de interactieve wizard, niet-interactieve vlaggen en details over de gegenereerde artefacten.

Na het genereren detecteert azd ai agent optimize automatisch eval.yaml:

azd ai agent optimize

Zie Evaluators aanpassen en een aangepaste gegevensset maken om de gegenereerde assets aan te passen. Als u uitvoeringsopties wilt wijzigen, bewerkt eval.yamlu; zie De optimalisatieuitvoering configureren.

Evaluators aanpassen (geavanceerd)

Evaluators beoordelen elk antwoord van de agent. De optimizer ondersteunt twee soorten:

  • Ingebouwde evaluators, zoals builtin.task_adherence, waarmee elk criterium op taakniveau wordt gescoord als geslaagd of mislukt.
  • Aangepaste rubrieken, die reacties beoordelen op verschillende kwaliteitsdimensies die zijn afgestemd op uw agent. azd ai agent eval generate maakt automatisch een bewerkbaar rubric_dimensions.json-bestand.

Voor de meeste agents geeft de gegenereerde rubriek-evaluator de meest zinvolle scores omdat deze is afgestemd op uw domein. Bewerk de gegenereerde rubric_dimensions.json om dimensies te verfijnen en voer vervolgens uit azd ai agent eval update om de wijzigingen te registreren als een nieuwe versie. Zie Evaluatiemiddelen initialiseren voor meer informatie over het genereren, bewerken en versiebeheer van evaluators.

Zie De optimalisatieuitvoering configureren als u evaluators wilt koppelen aan uw uitvoeringsconfiguratie.

Een aangepaste gegevensset maken (geavanceerd)

Maak een aangepaste gegevensset wanneer u nauwkeurige controle over testscenario's nodig hebt of productiegegevens rechtstreeks wilt gebruiken. De aanbevolen aanpak is om voort te bouwen op de seed-gegevensset die azd ai agent eval generate produceert—werk die uit tot een lokale gegevensset of verwijs naar een andere gegevensset die al in uw Foundry-project is geregistreerd.

Een gegevenssetbron kiezen

Een gegevensset kan afkomstig zijn van een van de twee bronnen:

  • Foundry-dataset — een dataset die al in uw Foundry-project is geregistreerd. Verwijs ernaar in eval.yaml via name en version.
  • Lokale gegevensset : een JSONL-bestand dat u maakt en in uw project bewaart. Verwijs er in eval.yaml naar via local_uri.

Beide bronnen gebruiken hetzelfde taakschema dat in de volgende sectie wordt beschreven. Zie eval.yaml voor de bedrading.

Gegevenssetschema

Een gegevensset maakt gebruik van de JSONL-indeling (JSON Lines). Elke regel is één JSON-object dat één evaluatietaak vertegenwoordigt: een afzonderlijk scenario. Een taak heeft een prompt (query) en, optioneel, taakniveau criteria.

{"name": "task_1", "query": "Your prompt here"}
{"name": "task_2", "query": "Another prompt", "ground_truth": "Expected answer"}
Veld Verplicht Description
name Ja Unieke taak-id (bijvoorbeeld "greeting", "math_test").
query Ja Het bericht dat naar de agent is verzonden.
ground_truth No Verwacht antwoord, gebruikt door evaluators die ondersteuning bieden voor een verwijzing.
criteria No Optionele controles op taakniveau. Zie Criteria op taakniveau toevoegen.

Wanneer u een lokale gegevensset gebruikt, valideert u de JSONL-syntaxis voordat u optimalisatie uitvoert:

python -c "import json; [json.loads(l) for l in open('eval.jsonl')]"

Criteria op taakniveau toevoegen

Criteria zijn optioneel. De evaluators die u configureerteval.yaml, zijn van toepassing op elke taak in de gegevensset. Voeg criteria alleen per taak toe als een specifieke taak controles nodig heeft die verder gaan dan die van de gedeelde evaluatoren. Wanneer deze aanwezig zijn, worden de criteria van een taak gescoord en samen met de gedeelde evaluatoren geaggregeerd om de totaalscore van de taak te bepalen.

Veld Verplicht Description
criteria[].name Ja Korte naam voor het criterium (bijvoorbeeld "is_polite").
criteria[].instruction Ja Wat de evaluator controleert. Wees specifiek en testbaar.

De volgende gegevensset voor klantondersteuning toont taken met criteria op taakniveau:

{"name": "refund_policy", "query": "What is your refund policy?", "criteria": [{"name": "mentions_30_days", "instruction": "Response must mention the 30-day refund window"}, {"name": "polite_tone", "instruction": "Response must be professional and empathetic"}]}
{"name": "order_status", "query": "Where is my order #12345?", "criteria": [{"name": "asks_for_details", "instruction": "Agent should ask for email or order details to look up the order"}, {"name": "no_hallucination", "instruction": "Agent must NOT make up a fake order status"}]}
{"name": "out_of_scope", "query": "Can you help me fix my car?", "criteria": [{"name": "polite_decline", "instruction": "Agent should politely explain this is outside its scope"}, {"name": "redirect", "instruction": "Agent should suggest contacting an appropriate service"}]}

Tips voor het schrijven van goede gegevenssets

Randgevallen opnemen

Test ook buiten het ideale scenario. Neem op:

  • Aanvragen buiten het bereik : invoer die uw agent moet weigeren of omleiden
  • Dubbelzinnige query's : taken waarbij de agent om verduidelijking moet vragen
  • Adversariële invoer — Pogingen om de agent tot slecht gedrag te verleiden
  • Taken met meerdere stappen : complexe aanvragen waarvoor gestructureerde redenering is vereist

Richtlijnen voor grootte

Grootte van gegevensset Compromis
3-5 taken Snelle iteratie, beperkt signaal
5-10 taken Goede balans tussen snelheid en dekking
10-20 taken Uitgebreide evaluatie, langere uitvoeringen
20+ taken Grondig maar traag : overweeg de definitieve validatie

Grotere gegevenssets bieden een bredere dekking, maar het duurt langer om te evalueren.

Geef de grondwaar wanneer nuttig

Het ground_truth veld geeft evaluators een referentieantwoord om mee te vergelijken. Dit is niet vereist: evaluators kunnen ook antwoorden beoordelen op basis van hun instructies en criteria op taakniveau.

{"name": "geography_fact", "query": "What is the largest city in France by population?", "ground_truth": "Paris", "criteria": [{"name": "correct_answer", "instruction": "Response must state that Paris is the largest city in France by population"}]}

Schrijfprompts zoals echte gebruikers

Gebruik indien mogelijk werkelijke berichten van uw gebruikers. Echte prompts leggen het vocabulaire en de context vast waarmee uw agent te maken krijgt in productie, waardoor u ook realistische criteria op taakniveau kunt schrijven.

Wees specifiek in criteria

Vage criteria leiden tot inconsistent scoren. Maak elk criterium specifiek en testbaar.

Slechte:

{"name": "good_answer", "instruction": "The response should be good"}

Goed:

{"name": "mentions_30_days", "instruction": "Response must explicitly mention the 30-day refund window"}

Troubleshooting

Probleem Oorzaak Repareren
dataset not found Verkeerd pad in eval.yaml Gebruik voor dataset.local_uri een pad ten opzichte van de locatie van het configuratiebestand. Controleer dataset.name en dataset.version voor een Foundry-gegevensset.
invalid JSON on line N Ongeldige JSONL Controleer of elke regel geldige JSON is. Controleer op volgkomma's.
Scores zijn inconsistent tussen verschillende uitvoeringen Vage criteria Criteria specifiek en testbaar maken.