Tworzenie zestawu danych oceny i ewaluatorów (wersja zapoznawcza)

Ważna

Agent Optimizer jest obecnie w wersji zapoznawczej. Ta wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług i nie zalecamy korzystania z niej w przypadku obciążeń produkcyjnych. Niektóre funkcje mogą nie być obsługiwane lub mogą mieć ograniczone możliwości. Aby uzyskać więcej informacji, zobacz Warunki dodatkowe korzystania z testowych wersji Microsoft Azure.

Optymalizator agenta ocenia agenta względem zestawu danych — kolekcji zadań — ocenianych przez ewaluatorów. Oba te elementy można wygenerować automatycznie za pomocą interfejsu wiersza polecenia lub ręcznie utworzyć zestaw danych w celu uzyskania pełnej kontroli.

Obie części są niezbędne do dobrej optymalizacji: zestaw danych definiuje, co należy przetestować, a ewaluatorzy definiują sposób oceniania poszczególnych odpowiedzi. Słabi ewaluatorzy generują hałaśliwe wyniki, które prowadzą do słabej optymalizacji, więc inwestują w silnych ewaluatorów tak samo jak zadania reprezentatywne.

Tworzenie tych zasobów jest drugim krokiem w procesie optymalizacji, po przygotowaniu agenta do optymalizacji. Optymalizator używa ich do oceniania punktu odniesienia i klasyfikacji kandydatów.

Wymagania wstępne

Najszybszym sposobem tworzenia zasobów oceny jest użycie polecenia azd ai agent eval generate. Polecenie automatycznie wykrywa agenta i generuje wszystko, czego potrzebuje optymalizator:

azd ai agent eval generate

Domyślnie generuje:

  • Początkowy zbiór danych zadań dostosowany do domeny Twojego agenta.
  • Ewaluatorzy , którzy oceniają odpowiedzi — wbudowany ewaluator (na przykład builtin.task_adherence) oraz niestandardowy ewaluator rubryk dostosowany do twojego agenta.
  • Runnable eval.yaml , który łączy je razem.

Informacje o kreatorze interaktywnym, flagach nieinteraktywnych oraz szczegóły dotyczące wygenerowanych artefaktów znajdziesz w sekcji Inicjalizowanie zasobów ewaluacji.

Po wygenerowaniu azd ai agent optimize automatycznie wykrywa eval.yaml:

azd ai agent optimize

Aby dostosować wygenerowane zasoby, zobacz Dostosowywanie ewaluatorów i Tworzenie niestandardowego zestawu danych. Aby zmienić opcje uruchomienia, edytuj eval.yaml; zobacz Konfigurowanie uruchomienia optymalizacji.

Dostosowywanie ewaluatorów (zaawansowane)

Ewaluatorzy oceniają każdą odpowiedź agenta. Optymalizator obsługuje dwa rodzaje:

  • Wbudowane mechanizmy oceny, takie jak builtin.task_adherence, który ocenia każde kryterium dla danego zadania jako zaliczone lub niezaliczone.
  • Niestandardowe oceniacze oparte na rubrykach, które oceniają odpowiedzi w wielu aspektach jakości dostosowanych do Twojego agenta. azd ai agent eval generate automatycznie tworzy edytowalny plik rubric_dimensions.json.

W przypadku większości agentów wygenerowany ewaluator rubryk daje najbardziej znaczące wyniki, ponieważ jest dostosowany do twojej domeny. Edytuj wygenerowane rubric_dimensions.json w celu uściślinia wymiarów, a następnie uruchom polecenie azd ai agent eval update , aby zarejestrować zmiany jako nową wersję. Aby uzyskać szczegółowe informacje na temat generowania, edytowania i przechowywania wersji ewaluatorów, zobacz Inicjowanie zasobów oceny.

Aby dodać ewaluatory do konfiguracji uruchomienia, zobacz Konfigurowanie uruchomienia optymalizacji.

Tworzenie niestandardowego zestawu danych (zaawansowane)

Utwórz niestandardowy zestaw danych, gdy potrzebujesz dokładnej kontroli nad scenariuszami testowymi lub masz dane produkcyjne do bezpośredniego użycia. Zalecane podejście polega na iterowaniu na bazie początkowego zestawu danych, który tworzy azd ai agent eval generate — doprecyzowaniu go do postaci lokalnego zestawu danych lub wskazaniu innego zestawu danych już zarejestrowanego w projekcie Foundry.

Wybieranie źródła zestawu danych

Zestaw danych może pochodzić z jednego z dwóch źródeł:

  • Zestaw danych foundry — zestaw danych już zarejestrowany w projekcie Foundry. Odwołaj się do niego w eval.yaml za pomocą name i version.
  • Lokalny zestaw danych — plik JSONL utworzony i zachowany w projekcie. Odwołaj się do tego w eval.yaml za pomocą local_uri.

Oba źródła używają tego samego schematu zadań opisanego w następnej sekcji. Aby zapoznać się z okablowaniem eval.yaml , zobacz Konfigurowanie przebiegu optymalizacji.

Schemat zestawu danych

Zestaw danych używa formatu JSONL (JSON Lines). Każdy wiersz jest jednym obiektem JSON reprezentującym pojedyncze zadanie oceny — pojedynczy scenariusz. Zadanie ma monit (query) i, opcjonalnie, poziom criteriazadania .

{"name": "task_1", "query": "Your prompt here"}
{"name": "task_2", "query": "Another prompt", "ground_truth": "Expected answer"}
Pole Required Description
name Yes Unikatowy identyfikator zadania (na przykład "greeting", "math_test").
query Yes Wiadomość wysłana do agenta.
ground_truth No Oczekiwana odpowiedź używana przez ewaluatorów obsługujących odniesienia.
criteria No Opcjonalne kontrole na poziomie zadania. Zobacz Dodawanie kryteriów na poziomie zadania.

Jeśli używasz lokalnego zestawu danych, przed uruchomieniem optymalizacji zweryfikuj składnię JSONL:

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

Dodawanie kryteriów na poziomie zadania

Kryteria są opcjonalne. Osoby ewaluacyjne konfigurowane w eval.yaml programie mają zastosowanie do każdego zadania w zestawie danych. Dodaj criteria dla poszczególnych zadań tylko wtedy, gdy konkretne zadanie wymaga kontroli wykraczających poza te wykonywane przez współdzielonych ewaluatorów. Jeśli są obecne, criteria są oceniane i sumowane wraz ze wspólnymi ewaluatorami, aby uzyskać końcowy wynik zadania.

Pole Required Description
criteria[].name Yes Krótka nazwa kryterium (na przykład "is_polite").
criteria[].instruction Yes Co sprawdza ewaluator. Być specyficzne i możliwe do testowania.

Poniższy zestaw danych pomocy technicznej dla klientów przedstawia zadania z kryteriami na poziomie zadania:

{"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"}]}

Porady dotyczące pisania dobrych zestawów danych

Uwzględnij przypadki brzegowe

Przetestuj poza szczęśliwą ścieżką. Załącz:

  • Żądania poza zakresem — żądania, które agent powinien odrzucać lub przekierowywać
  • Zapytania niejednoznaczne — zadania, w których agent powinien poprosić o wyjaśnienie
  • Wrogie dane wejściowe — próby nakłonienia agenta do niewłaściwego działania
  • Zadania wieloetapowe — złożone żądania wymagające strukturalnych rozumowania

Wytyczne dotyczące rozmiaru

Rozmiar zestawu danych Kompromis
3–5 zadań Szybka iteracja, ograniczony sygnał
5–10 zadań Dobra równowaga szybkości i zasięgu
10–20 zadań Kompleksowa ocena, dłuższe testy
20+ zadania Dokładne, ale powolne — rozważ przeprowadzenie ostatecznej weryfikacji

Większe zestawy danych zapewniają szerszy zakres, ale ocena trwa dłużej.

Podaj podstawy prawdy, gdy jest to przydatne

Pole ground_truth daje ewaluatorom odpowiedź referencyjną na porównanie. Nie jest to wymagane — ewaluatorzy mogą również oceniać odpowiedzi na podstawie swoich instrukcji i niezależnie od kryteriów na poziomie zadania.

{"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"}]}

Pisz prompty jak prawdziwi użytkownicy

Jeśli to możliwe, użyj rzeczywistych komunikatów od użytkowników. Rzeczywiste prompty oddają słownictwo i kontekst, z jakimi agent ma do czynienia w środowisku produkcyjnym, co pomaga również tworzyć realistyczne kryteria oceny na poziomie zadań.

Określ dokładnie kryteria

Niejasne kryteria prowadzą do niespójnego oceniania. Ustaw każde kryterium jako specyficzne i testowalne.

Źle:

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

Dobry:

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

Troubleshooting

Problem Przyczyna Napraw.
dataset not found Nieprawidłowa ścieżka w eval.yaml Dla dataset.local_uri użyj ścieżki względnej względem lokalizacji pliku konfiguracyjnego. W przypadku zestawu danych usługi Foundry sprawdź dataset.name i dataset.version.
invalid JSON on line N Nieprawidłowy JSONL Sprawdź, czy każdy wiersz jest prawidłowy w formacie JSON. Sprawdź, czy na końcu nie ma przecinków.
Wyniki są niespójne między przebiegami Niejasne kryteria Ustaw kryteria specyficzne i testowalne.