Ewaluacja LLM: od publicznych benchmarków do własnego złotego zestawu
Ten sam agent, to samo zadanie, dziesięć uruchomień. Siedem sukcesów wygląda jak 70%, dopóki nie policzysz pass^10: dokładnie zero.
Na tej stronie
Oto demonstracja. Agent z rozdziału 23 — ta sama pętla, dwa z czterech narzędzi — dostaje katalog z pięcioma plikami logów i konfiguracji oraz jedno pytanie.
Q: What is the last line of errors.log about?
turn 1 -> read_file({"path": "errors.log"})
turn 2 -> "The last line of errors.log is:
ERROR worker 7 timed out after 30000 ms."Poprawnie, a zarazem nie jest to dowód na nic — bo ten transcript jest jednym z dziesięciu, które uruchomiłem, i wybrałem go dopiero po obejrzeniu wszystkich dziesięciu.
Uruchom identyczne zadanie dziesięć razy, nie zmieniając nic poza ziarnem próbkowania, a agent rozwiązuje je poprawnie siedem razy. Siedemdziesiąt procent: liczba, która trafiłaby na slajd. Teraz zadaj pytanie, które naprawdę obchodzi klienta — czy to zadziała za każdym razem? — a odpowiedzią jest zupełnie inna liczba:
t20 7/10 successes = 70 % (95 % Wilson interval: 39.7 % to 89.2 %)
pass^1 70.00 % pass^5 8.33 %
pass^2 46.67 % pass^7 0.83 %
pass^3 29.17 % pass^8 0.00 %
pass^4 16.67 % pass^10 0.00 %Agent nigdy nie rozwiązał tego zadania dziesięć razy z rzędu i na podstawie tych danych nie należy się tego spodziewać. Ta liczba — pass^10 — jest uczciwa, prawie nigdy się jej nie publikuje, a pod koniec tego rozdziału będziesz wiedzieć, jak ją policzyć, ile kosztuje jej policzenie i dlaczego przedział obok 70% jest ważniejszy niż samo 70%.
Pokaż szczegóły
Czego ten rozdział potrzebuje z poprzednich.
- Rozdział 4 dla statystyki: przedział Wilsona dla proporcji, powód, dla którego siedemnaście poprawnych odpowiedzi na dwadzieścia niczego nie rozstrzyga, oraz głupi baseline jako pierwszy wymóg.
- Rozdział 15 dla bench: pięćdziesięcioliniowy harness, sparowany test znaków dla przypadków, w których dwa systemy się nie zgadzają, oraz zasada, że prompt się mierzy, a nie o nim dyskutuje.
- Rozdział 23 dla tego, co jest mierzone: pętli, pięciu wyjść, rozliczania kosztów i końcowej obserwacji, że harness czyni agent sterowalnym, ale nie poprawnym.
Są tu dwa panele. TypeScript do własnej ewaluacji, bo jej miejsce jest w continuous integration obok twojego kodu. Python do drugiego panelu, bo publiczne benchmarki żyją właśnie tam, a jeden z poniższych pomiarów potrzebuje logits.
Trzy projekty, trzy instrumenty
Link do sekcji: Trzy projekty, trzy instrumentyPrawie każda kłótnia o ewaluację to dwie osoby mierzące różne rzeczy. Są trzy projekty i nie mają wspólnego instrumentu.
| co ewaluujesz | pytanie | instrument | kto jest właścicielem |
|---|---|---|---|
| model | czy ten model jest ogólnie lepszy od tamtego? | publiczne benchmarki, leaderboardy | społeczność |
| twoja aplikacja | czy mój prompt, moje retrieval, mój schemat działają na moich danych wejściowych? | twój złoty zestaw | ty |
| twój agent | czy cała pętla, z narzędziami i efektami ubocznymi, niezawodnie osiąga cel? | sukces zadania plus pass^k | ty |
To pomieszanie pojęć jest kosztowne w jedną stronę. Leaderboard mówi ci, że model jest mocny w rozumowaniu na poziomie studiów magisterskich; nie powie ci, czy będzie poprawnie routować twoje zgłoszenia do supportu. A ewaluacja aplikacji, która ocenia jedną odpowiedź na wejście, w ogóle nie widzi agent, bo agent ma rozkład trajektorii, a jedna odpowiedź jest pojedynczą próbką z tego rozkładu. Rozdział 22 nazwał ten trzeci wiersz i zostawił go pusty: miara wydajności, jedyna część specyfikacji agent, którą zespoły spisują na końcu albo nigdy.
Kolejność też ma znaczenie i mówi to również dostawca sprzedający ci model. Przewodnik OpenAI po agent sprowadza wybór modelu do trzech kroków, w tej kolejności: „Skonfiguruj evals, aby ustalić baseline wydajności”, „Skup się na osiągnięciu docelowej dokładności przy użyciu najlepszych dostępnych modeli”, „Optymalizuj koszt i opóźnienie, zastępując większe modele mniejszymi tam, gdzie to możliwe”.1 Ewaluacja jest pierwsza, bo kroki drugi i trzeci nie mają sensu bez liczby.
Złoty zestaw i co naprawdę daje dwadzieścia przypadków
Link do sekcji: Złoty zestaw i co naprawdę daje dwadzieścia przypadkówZłoty zestaw to lista wejść, każde z zapisaną odpowiedzią, oraz grader, który decyduje, czy output pasuje. Jest nudny, mały i jest jedynym artefaktem w tym rozdziale, który należy do ciebie. Ten zbudowany tutaj ma dwadzieścia zadań nad katalogiem pięciu plików — nie trzema z rozdziału 23, więc odpowiedzi nie są tymi samymi odpowiedziami — a grader jest napisany przed uruchomieniem agent:
export type Task = {
id: string;
prompt: string;
answer: string; // the fact, in words, for a human and for a judge
must: RegExp[]; // ALL must match the final answer
mustNot?: RegExp[]; // NONE may match
};
export const GOLDEN: Task[] = [
{ id: "t04", prompt: "Which file is the largest?", answer: "access.log",
must: [/access\.log/i], mustNot: [/errors\.log/i, /notes\.txt/i] },
{ id: "t12", prompt: "Which HTTP status codes appear in access.log? List all of them.",
answer: "200, 429 and 500", must: [/200/, /429/, /500/] },
// ...eighteen more
];Dwie właściwości są nośne. Lista mustNot istnieje dlatego, że model, który wymienia trzy pliki, w tym właściwy, nie odpowiedział. A answer jest zapisane prozą oraz wzorcami, bo później będą tego potrzebować zarówno człowiek, jak i judge — a zapisanie tego samego faktu dwa razy w dwóch notacjach pokazuje, czy nie zgadzasz się sam ze sobą co do tego, czym było zadanie.
Teraz tabela, która decyduje. Cztery systemy kandydujące, te same dwadzieścia zadań, accuracy z przedziałem oraz dwie kolumny, które sama tabela accuracy zawsze ukrywa:
| system | poprawne | accuracy, 95% Wilson | koszt za rozwiązane zadanie | średnie opóźnienie |
|---|---|---|---|---|
| A — bez narzędzi, greedy | 2/20 | 10,0% [2,8, 30,1] | $0.004649 | 663 ms |
| B — narzędzia, zwięzły prompt | 5/20 | 25,0% [11,2, 46,9] | $0.005576 | 1,362 ms |
| C — narzędzia, prowadzony prompt | 2/20 | 10,0% [2,8, 30,1] | $0.013071 | 930 ms |
| D — C, najlepszy z 3 przy T = 0.7 | 1/20 | 5,0% [0,9, 23,6] | $0.073532 | 2,628 ms |
Czytaj przedziały przed zwycięzcą. Wyniki ramienia B rozciągają się od 11% do 47%; ramienia A od 3% do 30%. Nakładają się na większości swojej długości, co jest ustaleniem z rozdziału 4 dokładnie w miejscu, w którym było obiecane: dwadzieścia przypadków nie potrafi uszeregować czterech systemów. Rozdział 15 wyostrzył to, zadając zamiast tego pytanie sparowane — w przypadkach, w których dwa ramiona się różnią, jak bardzo jednostronny jest podział? — bo wspólna trudność zestawu się znosi. Oto każda para:
A vs B +0 / -3 p = 0.2500 B vs C +4 / -1 p = 0.3750
A vs C +2 / -2 p = 1.0000 B vs D +4 / -0 p = 0.1250
A vs D +2 / -1 p = 1.0000 C vs D +1 / -0 p = 1.0000Żadne z sześciu porównań nie jest ustalone. Najlepsze ramię bije ramię bez żadnych narzędzi o piętnaście punktów, a opiera się to na trzech przypadkach niezgodnych. Dwadzieścia przypadków pokazuje mechanizm i nie potrafi wybrać dostawcy; mówienie czegoś innego na spotkaniu to sposób, w jaki kupuje się zły model.
Jest jedna rzecz, którą ta tabela ustala, i jest to kolumna, której nikt nie dodaje. Ramię D kosztuje trzynaście razy więcej niż ramię B za rozwiązane zadanie, bo próbkowanie trzech trajektorii i branie modalnej odpowiedzi potraja rachunek niezależnie od tego, czy potraja accuracy. Tabele accuracy, które pomijają koszt, czynią tę wymianę niewidzialną.
Metryka decyduje o liczbie
Link do sekcji: Metryka decyduje o liczbieTeraz ustalenie, które zmienia sposób czytania każdego benchmarku, jaki kiedykolwiek zobaczysz. Weź te same dwieście transcriptów — dwadzieścia zadań, dziesięć uruchomień, ani jeden token nie został wygenerowany ponownie — i oceń je na trzy sposoby:
| grader | poprawne | accuracy, 95% Wilson |
|---|---|---|
| dokładne dopasowanie do zapisanej odpowiedzi | 0/200 | 0,0% [0,0, 1,9] |
| zapisana odpowiedź pojawia się jako substring | 26/200 | 13,0% [9,0, 18,4] |
| powyższa rubryka słów kluczowych | 52/200 | 26,0% [20,4, 32,5] |
Zero, trzynaście, dwadzieścia sześć. System się nie zmienił. Zmienił się grader. Dokładne dopasowanie zwraca zero nie dlatego, że agent jest bezużyteczny, lecz dlatego, że żadna odpowiedź free-text nigdy nie jest bajt w bajt identyczna z referencją: mierzy formatowanie i raportuje je jako capability.
To nie ciekawostka, tylko mechanizm, i ma nazwę. Metryka z twardym progiem ocenia zadanie zero-jedynkowo po kilku podfaktach, więc je mnoży. Zadanie t12 pyta o trzy kody statusu naraz. W dziesięciu uruchomieniach:
per-code presence 200: 9/10 429: 6/10 500: 8/10 (mean 0.77 per fact)
all three at once 5/10Każdy fakt jest poprawny mniej więcej w trzech czwartych przypadków; wymaganie wszystkich trzech naraz zmniejsza wynik o połowę, a jest na tyle blisko zmierzonego 0.50, by pokazać, skąd wziął się spadek. Uogólnijmy:
| accuracy na fakt | |||||
|---|---|---|---|---|---|
| 0.60 | 60,0% | 36,0% | 21,6% | 7,8% | 0,6% |
| 0.80 | 80,0% | 64,0% | 51,2% | 32,8% | 10,7% |
| 0.90 | 90,0% | 81,0% | 72,9% | 59,0% | 34,9% |
| 0.95 | 95,0% | 90,3% | 85,7% | 77,4% | 59,9% |
Czytaj wiersz 0.90 wobec wiersza 0.95 przy : poprawa accuracy na fakt o pięć punktów staje się dwudziestoma pięcioma punktami na koniunkcji. Z modelem nie stało się nic nieciągłego. Gładka krzywa oglądana przez metrykę wszystko-albo-nic wygląda jak skok — i dokładnie taki argument Schaeffer, Miranda i Koyejo wysunęli wobec emergent abilities, co rozdział 10 odłożył do tego miejsca.2 Ich audyt wykazał, że co najwyżej 5 z 39 preferowanych metryk BIG-Bench w ogóle pokazuje emergencję, a dwie nieciągłe metryki odpowiadają za ponad 92% deklarowanych przypadków.
Dyscyplina w jednym zdaniu: skok na wykresie jest dowodem dotyczącym metryki, dopóki nie pokażesz inaczej. Zanim uwierzysz, że pojawiła się capability, narysuj te same przebiegi metryką z częściowym kredytem i zobacz, czy urwisko przetrwa.
Istnieje też wersja drugiego rzędu, o której Kalai i współautorzy twierdzą, że szkodzi wyżej w łańcuchu: benchmarki oceniane jako poprawne lub błędne nagradzają zgadywanie zamiast odpowiedzi „nie wiem”, więc model optymalizowany pod nie uczy się zgadywać. Proponowanym rozwiązaniem nie jest kolejny benchmark hallucination, ale „zmodyfikowanie punktacji istniejących benchmarków, które są źle dopasowane, lecz dominują leaderboardy”.3 Twój złoty zestaw ma tę samą dźwignię i jest to jedna linia: zdecyduj, czy abstencja liczy się jako porażka, czy jako własna kategoria. Większość ludzi nigdy nie decyduje, więc po cichu liczy się jako porażka, a system, który wysyłają, zgaduje.
pass^k i wariancja, której nikt nie publikuje
Link do sekcji: pass^k i wariancja, której nikt nie publikujeWszystko do tej pory oceniało jedną próbę na zadanie. Agent nie jest jedną próbą. Rozdział 17 ustalił, że nie masz determinizmu nawet przy temperaturze zero, więc to samo wejście produkuje rozkład trajektorii, a benchmark, który uruchamia każde zadanie raz, raportuje jedną próbkę z tego rozkładu.
Wkładem τ-bench jest metryka do tego. Artykuł definiuje ją prosto: „proponujemy nową metrykę – pass^k (pass hat k), zdefiniowaną jako szansa, że wszystkie k niezależne i identycznie rozłożone próby zadania zakończą się sukcesem, uśredniona po zadaniach”.4 Uruchom każde zadanie razy, policz sukcesów, a nieobciążone estymatory są takie:
Drugi to znane pass@k z generowania kodu: szansa, że co najmniej jedna z prób się powiedzie. Połóż je obok siebie na tych samych zmierzonych liczbach, a poruszają się w przeciwnych kierunkach:
pass@k — co najmniej jedna | pass^k — wszystkie | |
|---|---|---|
| 1 | 26,0% | 26,0% |
| 2 | 37,0% | 15,0% |
| 3 | 43,5% | 10,5% |
| 5 | 51,2% | 6,7% |
| 8 | 57,7% | 5,1% |
| 10 | 60,0% | 5,0% |
Te same przebiegi, ten sam grader, te same dwadzieścia zadań. Jedna kolumna mówi, że system poprawia się przy większej liczbie prób, druga mówi, że się pogarsza, i obie mają rację, bo odpowiadają na inne pytania. pass@k jest właściwą metryką, gdy człowiek filtruje output — generowanie kodu, szkice, brainstorming — a dodatkowe próby są tanie. pass^k jest właściwą metryką, gdy agent działa bez filtra, czyli wtedy, gdy naprawdę mówimy „agent”. Publikowanie pierwszej tam, gdzie stosuje się druga, to najczęstsze zawyżenie w tej dziedzinie, a własny nagłówek τ-bench jest uczciwą wersją: gpt-4o przy około 61% pass^1 w retail spada do około 25% przy pass^8.4
Teraz haczyk w moich własnych liczbach. pass^10 na moich dwudziestu zadaniach wynosi 5,0%: dokładnie jedno zadanie z dwudziestu rozwiązane we wszystkich dziesięciu uruchomieniach. To zadanie to t19, „Czy deploy 42 się powiódł?”, a oto dwie z dziesięciu odpowiedzi, które rubryka oceniła jako poprawne:
run 2 "To check if 'deploy.log' succeeded in deploying 42, I will list the file
names in the working directory using the list_files function..."
run 8 "Yes, deploy 42 has successfully deployed. Deploying was successful for 41
as well."Pierwsza nigdy nie odpowiada. Druga dodaje twierdzenie fałszywe — deploy 41 został wycofany. Obie dopasowały /succe|yes/. Jedyne zadanie utrzymujące pass^10 powyżej zera jest artefaktem gradera, więc prawdziwa wartość to zero, a żaden agregat by mi tego nie pokazał. Próbkowanie transcriptów stojących za najlepiej ocenionym zadaniem to miejsce, gdzie gradery idą umrzeć.
I jeszcze jedna liczba, od której ta sekcja bierze nazwę. Dziesięć identycznych ewaluacji — ten sam system, te same dwadzieścia zadań, ten sam kod, nic niezmienione poza seedami:
per-run correct: 5 2 5 5 8 5 8 5 4 5 -> 10 % .. 40 %, mean 26.0 %, sd 8.8 pointsZakres trzydziestu punktów w systemie, który się nie zmienił. Jeśli uruchomisz suite raz przed wydaniem i raz po nim, ośmiopunktowa „poprawa” mieści się w tym rozrzucie, a ty wypuścisz ją z przekonaniem, że to twoja zasługa. Dlatego powyższy przedział łączony — 26,0% [20,4, 32,5] — jest zbyt wąski, by cytować go samodzielnie: traktuje dwieście skorelowanych prób jak dwieście niezależnych. Uczciwe podsumowanie ewaluacji agent to średnia i rozrzut między powtórzeniami, a prawie nikt nie publikuje tego drugiego.
Judge i jego własny złoty zestaw
Link do sekcji: Judge i jego własny złoty zestawRubryki nie skalują się do odpowiedzi otwartych, więc standardowy ruch to kazać modelowi oceniać output. Na frontier scale działa to wystarczająco dobrze, by być domyślne, i ma trzy nazwane tryby awarii: position bias, verbosity bias i self-enhancement bias.5
Zmierz to, zanim temu zaufasz. Te same sześćdziesiąt odpowiedzi — trzy z dziesięciu uruchomień — oznaczono na trzy sposoby. Etykieta ludzka jest moja: przeczytałem wszystkie sześćdziesiąt z otwartymi pięcioma plikami i zastosowałem jedną zapisaną regułę: pass wtedy i tylko wtedy, gdy odpowiedź podaje fakt, o który pytało pytanie, i nie zawiera niczego sprzecznego z plikami.
| grader | mówi pass | zgadza się z człowiekiem | false pass | false fail |
|---|---|---|---|---|
| rubryka słów kluczowych | 17/60 | 50/60 = 83,3% [72,0, 90,7] | 8 | 2 |
| model jako judge | 60/60 | 11/60 = 18,3% [10,6, 29,9] | 49 | 0 |
Judge powiedział PASS sześćdziesiąt razy na sześćdziesiąt. Zaraportowałby tego agent jako mającego 100% accuracy na zestawie, na którym człowiek daje mu 18%. Judge bez mocy dyskryminacyjnej nie jest szumiącym instrumentem; jest funkcją stałą, a funkcja stała daje twojemu najlepszemu systemowi i twojemu najgorszemu systemowi ten sam wynik.
Prompting go nie uratował. Cztery warianty, te same sześćdziesiąt elementów:
| prompt judge | mówi pass | zgodność z człowiekiem |
|---|---|---|
| „Odpowiedz PASS albo FAIL.” | 60/60 | 18,3% |
| „Odpowiedz FAIL albo PASS.” — etykiety zamienione miejscami | 56/60 | 25,0% |
| plus jawna lista tego, co liczy się jako porażka | 55/60 | 26,7% |
plus jeden przepracowany przykład FAIL i jeden przykład PASS | 56/60 | 25,0% |
Zamiana kolejności dwóch etykiet w instrukcji przesunęła cztery werdykty. To mierzalny efekt i jest to zły rodzaj efektu: judge reaguje na kształt prompt, a nie na odpowiedź przed sobą.
Czysta demonstracja jest parami. Dwadzieścia pytań, każde z jedną wyraźnie poprawną i jedną wyraźnie złą odpowiedzią kandydującą, pokazane w obu kolejnościach:
picked the FIRST option 40/40 = 100.0 %
order-consistent (same winner both ways) 0/20 = 0.0 % [Wilson 0.0, 16.1]
picked the CORRECT answer 20/40 = 50.0 %Wybrał pozycję A czterdzieści razy na czterdzieści. 50% poprawności nie jest częściową kompetencją — to arytmetyka, bo poprawna odpowiedź siedzi w pozycji A dokładnie w połowie prób. Spójność jest tu zdefiniowana tak, jak definiuje ją MT-Bench: „odsetek przypadków, w których judge daje spójne wyniki po zamianie kolejności dwóch assistantów”, co pozwala porównywać jabłka z jabłkami: GPT-4 osiąga 65,0% w tej mierze, a few-shot prompting podniósł to do 77,5%.5 Mój ma zero.
Standardowa mitigacja też pochodzi z tamtego artykułu: „wywołaj judge dwa razy, zamieniając kolejność dwóch odpowiedzi, i ogłoś zwycięstwo tylko wtedy, gdy odpowiedź jest preferowana w obu kolejnościach”.5 Zastosuj to tutaj, a judge produkuje zero użytecznych werdyktów z dwudziestu par — co jest wynikiem poprawnym i nieskończenie lepszym niż dwadzieścia pewnych werdyktów.
Uwaga metodologiczna warta więcej niż wynik. Uruchomiłem też test verbosity: ta sama poprawna odpowiedź, jedna kopia dopchana 36-wyrazowym zdaniem, które nic nie wnosi. Judge preferował dłuższą wersję dokładnie w 50% prób — co wygląda jak brak verbosity bias, ale wcale nim nie jest, bo judge, który zawsze wybiera pozycję A, osiąga 50% na dowolnym zbalansowanym parowaniu. Nie możesz mierzyć drugiego bias, dopóki pierwszy nie jest kontrolowany. Zamiana pozycji nie jest udoskonaleniem do dodania później; to ona czyni każdy inny pomiar interpretowalnym.
Do czego służy judge. Odpowiedzi otwarte bez formy dającej się sparsować: ton, pokrycie, czy cytat wspiera zdanie, czy odmowa była właściwa. Tani, szybki i mniej więcej tak dobry jak jego base model.
Czym judge nie jest. Ground truth. To system z accuracy, profilem bias i kosztem, który potrzebuje własnego złotego zestawu etykiet ludzkich — w tym znanych porażek — zanim którakolwiek produkowana przez niego liczba cokolwiek znaczy.
Uczciwe zastrzeżenie: ten judge to model o pół miliarda parametrów i nikt nie powinien nim oceniać. Nie chodzi o to, że judge są złe. Chodzi o to, że powyższe liczby kosztowały osiem minut, a bez nich werdykt tego judge w decyzji o wdrożeniu wyniósłby 100%.
Drugi panel: Python i sonda na contamination
Link do sekcji: Drugi panel: Python i sonda na contaminationTo trzeci i ostatni zadeklarowany panel Pythona w kursie, a powodem jest miejsce, z którego pochodzą publiczne liczby. lm-evaluation-harness obejmuje „ponad 60 standardowych akademickich benchmarków dla LLMs, z setkami zaimplementowanych podzadań i wariantów” i jest „backendem popularnego Open LLM Leaderboard Hugging Face”; HELM, SWE-bench i τ-bench są pakietami Pythona z pythonowymi entry points.6 Uruchomienie twojego modelu wobec opublikowanej liczby oznacza uruchomienie ich kodu, a w dniu, w którym chcesz porównać się z liczbą, którą ktoś zacytował, jesteś w tym ekosystemie:
lm_eval --model hf \
--model_args pretrained=EleutherAI/gpt-j-6B \
--tasks hellaswag \
--device cuda:0 \
--batch_size 8Drugim powodem jest to, że jeden pomiar w tym rozdziale jest niemożliwy przez HTTP. Contamination — wyciek zestawu testowego do danych treningowych — to awaria, która po cichu odbiera publicznemu benchmarkowi sens, a najostrzejsza sonda wymaga własnej straty modelu, której nie zwraca żadne chat API. To cross-entropy per token z rozdziału 8, skierowana na pytanie o pamięć:
def nll(text: str) -> float:
"""Mean negative log-likelihood per token, in nats."""
ids = tok(text, return_tensors="pt").input_ids.to(model.device)
with torch.no_grad():
out = model(ids, labels=ids)
return float(out.loss)Dziesięć par zdań: pięć obecnych w każdym crawl webu od jego powstania, pięć napisanych dziś rano do tego rozdziału, każde sparowane z przeredagowaną wersją niosącą tę samą treść.
| zestaw | kanoniczne brzmienie | przeredagowane | luka |
|---|---|---|---|
| słynne, średnia z 5 | 1.21 | 3.03 | +1.83 |
| świeże, średnia z 5 | 5.02 | 5.96 | +0.93 |
Model jest cztery razy bardziej zaskoczony zdaniem napisanym dziś rano niż takim, które widział milion razy, a przeredagowanie kosztuje dwa razy więcej na słynnych zdaniach — dodatkowy koszt to część zapamiętana, a nie zrozumiana. Bezwzględna strata miesza memorisation ze zwykłą naturalnością, więc luka jest lepszą statystyką, a test kontynuacji jest jeszcze lepszy. Daj mu pierwsze sześć słów:
famous "Permission is hereby granted, free of"
-> "charge, to any person obtaining a copy of this software and associated
documentation files (the "
famous "All human beings are born free"
-> "and equal in dignity and rights. The right to life, liberty, and security"
fresh "All evaluation harnesses are born tiny"
-> ", and the most common way to measure their size is by using a ruler."Trzy z pięciu słynnych stringów zostały dokończone słowo w słowo od sześciu słów; żaden z pięciu świeżych nie. To model o pół miliarda parametrów recytujący MIT License. Jeśli twój benchmark jest w publicznym webie, załóż, że jest w weights. To także argument za całym rozdziałem: złoty zestaw napisany przez ciebie z własnych danych, trzymany poza każdym repozytorium czytanym przez crawler, jest jedynym test setem, o którym możesz mieć pewność, że nigdy nie był użyty w treningu.
Co naprawdę mierzą publiczne benchmarki
Link do sekcji: Co naprawdę mierzą publiczne benchmarkiWciąż warto je czytać, pod warunkiem że czytasz to, co każdy z nich mierzy, a nie pojedynczą przypiętą do niego liczbę.
| benchmark | co mierzy | liczba z artykułu |
|---|---|---|
| MMLU | wiedza multiple-choice z 57 dziedzin | GPT-3 pobił losowy wybór o „prawie 20 punktów procentowych średnio”7 |
| HELM | wiele metryk × wiele scenariuszy, standaryzacja | pokrycie scenariuszy rdzeniowych wzrosło z 17,9% do 96,0%8 |
| Chatbot Arena | crowdsourcingowe parowe preferencje ludzi | ponad 240 tys. głosów; głosy tłumu „dobrze zgadzają się” z ekspertami9 |
| SWE-bench | rozwiązywanie prawdziwych issues GitHub, oceniane testami repo | 2,294 problemy; najlepszy wtedy model rozwiązał „zaledwie 1,96%”10 |
| τ-bench | użycie narzędzi z symulowanym użytkownikiem i polityką domeny | gpt-4o ≈ 61% pass^1, ≈ 25% pass^8 w retail4 |
| WebArena | long-horizon zadania na działających stronach | najlepszy agent GPT-4 14,41% wobec 78,24% dla ludzi11 |
| OSWorld | prawdziwe zadania desktopowe i OS w aplikacjach | 369 zadań; najlepszy model 12,24%, ludzie 72,36%12 |
| GAIA | pytania łatwe dla ludzi, trudne dla assistantów | 466 pytań; ludzie 92%, GPT-4 z pluginami 15%13 |
| AgentBench | rozumowanie agent w 8 różnych środowiskach | duża luka między modelami komercyjnymi i otwartymi14 |
| AgentHarm | czy agent wykona złośliwe wieloetapowe zadania | 110 złośliwych zadań w 11 kategoriach szkody15 |
Weź tabelę, nie dowolny pojedynczy wiersz. Benchmarki agentic wszystkie stawiają ludzi daleko nad modelami, co jest odwrotnością benchmarków wiedzy i najlepszym jednozdaniowym podsumowaniem tego, gdzie jest dziedzina; ich liczby starzeją się w miesiące, więc cytuj je z datą odczytu; i każdy z nich mierzy zadanie, które nie jest twoje.
Metryki, które decydują w produkcji
Link do sekcji: Metryki, które decydują w produkcjiAccuracy to metryka, o którą się kłócisz. Te decydują, czy rzecz trafia do release. Wszystkie cztery wypadają z dwustu przebiegów już zmierzonych.
Koszt za rozwiązane zadanie, nie za call. Agent kosztuje $0.001345 za próbę i $0.005172 za faktycznie rozwiązane zadanie — 3,85 raza więcej, bo trzy czwarte prób niczego nie produkuje. Latency zachowuje się tak samo: 1,213 ms za próbę, 4,667 ms za rozwiązane zadanie. Każdy retry, każde dopytanie, każda porzucona trajektoria jest w drugiej liczbie i niewidoczna w pierwszej.
Diagnostyka, która bije accuracy. W 123 z 200 prób agent odpowiedział bez wywołania ani jednego narzędzia — zgadywał zamiast sprawdzić. Podział według tego:
answered without reading anything 8/123 = 6.5 % [3.3, 12.3]
answered after reading something 44/77 = 57.1 % [46.0, 67.6]Przedziały nawet nie zbliżają się do zetknięcia. To warte więcej niż zbiorcze 26%, bo nazywa rzecz do naprawy — model nie zawodzi w rozumowaniu, zawodzi w patrzeniu — a poprawka jest w harness, nie w modelu. Jedno zastrzeżenie, które ten rozdział jest winien własnym standardom: dwie grupy to różne zadania, nie te same zadania w parach, więc część tej luki może wynikać z tego, że pomija narzędzia dokładnie przy pytaniach, które uważa za trudne. Podział jest diagnostyką, nie twierdzeniem przyczynowym.
Wskaźnik interwencji człowieka to metryka, o którą kupujący pyta jako pierwszą: jaka część przebiegów zatrzymała się na approval, guardrail albo handoff. Typowane przerwania z rozdziału 23 czynią ją policzalną, a liczona według typu zadania i tygodnia odróżnia agent uczącego się swojej pracy od takiego, który po cichu staje się kolejką.
Porzucenie to ta, której nie zobaczy żaden offline suite: użytkownik, który przeczytał odpowiedź, zamknął kartę i zrobił zadanie samodzielnie. Offline evaluation jest bramką; production evaluation to ciągła próbka realnego ruchu, oceniana tym samym graderem plus tymi czterema.
I zasada odziedziczona z rozdziału 17: nigdy nie rób assert na dokładny output. Rób assert na właściwościach — valid JSON, poprawny schemat, wywołane właściwe narzędzie, liczba w tolerancji, obecny wymagany substring. Kolumna exact-match na początku tego rozdziału pokazuje, co dzieje się po złamaniu tej zasady.
Co wysyłasz stronie trzeciej
Link do sekcji: Co wysyłasz stronie trzeciejEwaluacja dostawcy nie dotyczy tylko accuracy i to jest druga połowa etyki tego kursu, z własnym nagłówkiem, a nie dodatkiem.
Mierz bias, nie zakładaj go. Cokolwiek sądzisz o zachowaniu modelu wobec imion, dialektów, płci czy narodowości, jest to mierzalna właściwość twojego pipeline, a instrument jest tym, który już masz: weź swój złoty zestaw, zmieniaj tylko atrybut, porównaj parami. HELM istnieje dokładnie dlatego, że raportowano samą accuracy tam, gdzie bias, toxicity, calibration i robustness również były rozstrzygalne.8 Model card dostawcy to punkt wyjścia, nie dowód dotyczący twoich danych wejściowych.
Contamination jest też pytaniem do dostawcy. Powyższa sonda jest powodem, by zapytać, na czym zmierzono opublikowaną liczbę i kiedy odcięto dane modelu.
Retencja, trening i residency, czytane 7 września 2026. To się zmienia, więc zapisz datę obok odpowiedzi. Strona polityki Anthropic stwierdza: „Domyślnie nie będziemy używać twoich inputs ani outputs z naszych produktów komercyjnych (np. Claude for Work, Anthropic API, Claude Gov itd.) do trenowania naszych modeli”, z wyjątkiem treści, które jawnie prześlesz jako feedback, przechowywanych „do 5 lat”.16 Dokumentacja kontroli danych OpenAI stwierdza, że „dane wysyłane do OpenAI API nie są używane do trenowania ani ulepszania modeli OpenAI (chyba że jawnie zgodzisz się udostępniać nam dane)”, opisuje domyślną trzydziestodniową retencję logów monitorowania nadużyć i oferuje Zero Data Retention, które „wyklucza treści klienta z logów monitorowania nadużyć”, plus konfigurowalne data residency na liście regionów.17
Cztery pytania, które trzeba dostać na piśmie przed pierwszym production call, bo każde ma innego właściciela: czy moje dane są używane do treningu; jak długo są przechowywane i przez kogo; gdzie są przetwarzane i przechowywane; oraz co dzieje się z tym wszystkim, jeśli używam resellera, gateway albo agregatora zamiast bezpośrednio provider. To ostatnie jest miejscem większości niespodzianek i nie powie ci tego żaden benchmark.
Dokąd to prowadzi dalej
Link do sekcji: Dokąd to prowadzi dalejMasz już instrument: własny złoty zestaw, przedział przy każdej liczbie, test sparowany dla każdego porównania, pass^k dla przebiegów, których nikomu nie pokazałeś, zmierzonego judge i sondę sprawdzającą, czy publiczny wynik cokolwiek znaczy. Końcowe twierdzenie z rozdziału 23 można teraz sprawdzić zamiast ogłaszać — harness czyni agent sterowalnym, nie poprawnym — a sprawdzenie tego zajęło dwieście przebiegów i osiem minut.
Jest jedna właściwość agent, której nic z tego nie mierzy, a właśnie ona zwalnia ludzi z pracy.
Każde zadanie w złotym zestawie tego rozdziału napisałem ja i każdy plik czytany przez agent napisałem ja. Nic w tym katalogu nie próbowało nic zrobić. Zmień jedną linię w jednym pliku, który agent ma przeczytać — linię kończącą się instrukcją skierowaną do tego, co przeczyta ją następne — a agent, który uzyskał 26%, wykona ją tymi samymi narzędziami, z tymi samymi uprawnieniami i tym samym czystym trace, a każda liczba w tym rozdziale pozostanie dokładnie taka sama. Evaluation suite mierzy, jak często system osiąga twój cel. Nie mierzy, jak łatwo ktoś inny może podstawić swój.
Rozdział 30 jest właśnie o tym: prompt injection, śmiertelna triada prywatnych danych, niezaufanej treści i komunikacji zewnętrznej oraz koszt nadania agent prawdziwych uprawnień. Otwiera go obserwacja, której ten rozdział unikał — że ten sam passing score jest zgodny z agent, który robi dokładnie to, co attacker wpisał w pliku, który kazano mu przeczytać.
Źródła i metoda
Link do sekcji: Źródła i metodaKażda liczba powyżej została wyprodukowana na jednej maszynie i żadna nie dotknęła płatnego endpointu. Agent to pętla z rozdziału 23 z dwoma z czterech narzędzi nad katalogiem pięciu plików; model za portem to Qwen/Qwen2.5-0.5B-Instruct, wystawiony przez mały serwer o takim samym kształcie jak endpoint chat completions dokładnie jak w rozdziale 23, ale w half precision na jednej konsumenckiej GPU zamiast CPU z tamtego rozdziału. Koszty używają stawek z rozdziału 16 — $2.00 za milion input tokens i $12.00 za milion output — zastosowanych do zmierzonych liczników token. Powtarzane przebiegi używają temperatury 0.7 ze stałymi seedami, więc cały zestaw jest odtwarzalny; tabela czterech ramion jest greedy. Przedziały to Wilson przy 95%, porównania sparowane to dwustronne dokładne testy znaków na parach niezgodnych; przedział Wilsona jest z rozdziału 4, a dokładny sparowany test znaków z rozdziału 15, oba użyte bez zmian. Etykiety ludzkie są moje, zastosowane do sześćdziesięciu odpowiedzi według pisemnej reguły cytowanej w tekście. Czytaj każdą wielkość tutaj jako właściwość modelu o pół miliarda parametrów, a każdą metodę jako przenośną: większy model podnosi wszystkie liczby i nie zmienia żadnego instrumentu.
Przypisy
Link do sekcji: Przypisy-
OpenAI, A practical guide to building agents (PDF), strona 8, czytane 7 września 2026. Źródło cytowanej wyżej trzyetapowej kolejności oraz towarzyszącej rady, by „build your agent prototype with the most capable model for every task to establish a performance baseline. From there, try swapping in smaller models to see if they still achieve acceptable results.” Rozdziały 22 i 25 cytują jego strony definicyjne i orchestration. ↩
-
Schaeffer, R., Miranda, B. i Koyejo, S. Are Emergent Abilities of Large Language Models a Mirage? arXiv:2304.15004 (2023). Argument, że nieciągłe metryki wszystko-albo-nic produkują pozorne skoki z gładkich ulepszeń bazowych, z audytem BIG-Bench cytowanym w rozdziale 10. Warto powtórzyć ich własne zastrzeżenie: nic w artykule nie twierdzi, że duże modele nie mogą wykazywać emergent abilities. ↩
-
Kalai, A. T., Nachum, O., Vempala, S. S. i Zhang, E. Why Language Models Hallucinate. arXiv:2509.04664 (2025). Argument, że benchmarki punktujące poprawne-albo-błędne nagradzają zgadywanie ponad abstencję, oraz proponowane lekarstwo: „modifying the scoring of existing benchmarks that are misaligned but dominate leaderboards, rather than introducing additional hallucination evaluations”. Rozdział 19 cytuje to od strony retrieval; tutaj jest strona ewaluacji tego samego twierdzenia. ↩
-
Yao, S., Shinn, N., Razavi, P. i Narasimhan, K. τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains. arXiv:2406.12045 (2024). Źródło
pass^k, zdefiniowanego jak zacytowano wyżej, z oboma estymatorami wydrukowanymi w artykule obok siebie; nagłówek abstraktu mówi, że state-of-the-art function-calling agents „succeed on <50% of the tasks, and are quite inconsistent (pass^8 <25% in retail)”, a sekcja 1 podaje wartości gpt-4o ≈61%pass^1i ≈25%pass^8na τ-retail. Estymatorpass@k, z którym to kontrastuje, pochodzi z Chen, M. et al., Evaluating Large Language Models Trained on Code, arXiv:2107.03374 (2021). ↩ ↩2 ↩3 -
Zheng, L. et al. Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena. arXiv:2306.05685 (2023). Źródło trzech nazwanych bias, definicji spójności użytej wyżej („odsetek przypadków, w których judge daje spójne wyniki po zamianie kolejności dwóch assistantów”), ustalenia, że „only GPT-4 outputs consistent results in more than 60% of cases”, z 65,0% rosnącym do 77,5% przy few-shot, oraz cytowanej dosłownie mitigacji swap-and-require-agreement. Jego pozytywny wynik też ma znaczenie: GPT-4 judges osiągają „an agreement rate exceeding 80%” z ocenami ludzi, „the same level of human-human agreement” — i dlatego w ogóle warto używać judge oraz dlatego trzeba zmierzyć własnego. ↩ ↩2 ↩3
-
EleutherAI, Language Model Evaluation Harness, README projektu czytane 7 września 2026: „over 60 standard academic benchmarks for LLMs, with hundreds of subtasks and variants implemented” oraz „the backend for Hugging Face's popular Open LLM Leaderboard”. Wywołanie
lm_evalzacytowane wyżej jest własnym przykładem README. Liang, P. et al., Holistic Evaluation of Language Models, arXiv:2211.09110 (2022), to drugi standardowy runner i lepsza lektura o projektowaniu ewaluacji. ↩ -
Hendrycks, D., Burns, C., Basart, S., Zou, A., Mazeika, M., Song, D. i Steinhardt, J. Measuring Massive Multitask Language Understanding. arXiv:2009.03300 (2020). 57 zadań; twierdzenie z abstraktu, że największy model GPT-3 „improves over random chance by almost 20 percentage points on average”, jest użytecznym przypomnieniem, jak niedawne jest nasycenie tego benchmarku. ↩
-
Liang, P. et al. Holistic Evaluation of Language Models. arXiv:2211.09110 (2022). Siedem metryk — accuracy, calibration, robustness, fairness, bias, toxicity i efficiency — w 16 scenariuszach rdzeniowych i 30 modelach, z cytowanymi wyżej wartościami pokrycia. Powód, by to czytać, jest ramujący: to, którą z siedmiu raportujesz, samo jest wyborem. ↩ ↩2
-
Chiang, W.-L. et al. Chatbot Arena: An Open Platform for Evaluating LLMs by Human Preference. arXiv:2403.04132 (2024). Ponad 240 tys. głosów w chwili pisania, crowdsourcingowe preferencje parami oraz twierdzenie, że „the crowdsourced human votes are in good agreement with those of expert raters”. ↩
-
Jimenez, C. E., Yang, J., Wettig, A., Yao, S., Pei, K., Press, O. i Narasimhan, K. SWE-bench: Can Language Models Resolve Real-World GitHub Issues? arXiv:2310.06770 (2023). 2,294 problemy z 12 repozytoriów Pythona, oceniane własnymi testami repozytoriów, z najlepszym modelem tamtego czasu rozwiązującym „a mere 1.96%”. Rozdział 23 używa go dla innego znaczenia słowa „harness”. ↩
-
Zhou, S. et al. WebArena: A Realistic Web Environment for Building Autonomous Agents. arXiv:2307.13854 (2023). Działające strony w czterech domenach, z najlepszym agent GPT-4 na poziomie 14,41% wobec 78,24% dla ludzi. ↩
-
Xie, T. et al. OSWorld: Benchmarking Multimodal Agents for Open-Ended Tasks in Real Computer Environments. arXiv:2404.07972 (2024). 369 zadań na prawdziwych systemach operacyjnych; ludzie ponad 72,36%, najlepszy model 12,24%, z GUI grounding nazwanym główną luką. ↩
-
Mialon, G., Fourrier, C., Swift, C., Wolf, T., LeCun, Y. i Scialom, T. GAIA: A Benchmark for General AI Assistants. arXiv:2311.12983 (2023). 466 pytań, ludzie na 92% wobec 15% dla GPT-4 z pluginami — najczystsze opublikowane stwierdzenie luki między tym, co łatwe dla człowieka, a tym, co łatwe dla assistant. ↩
-
Liu, X. et al. AgentBench: Evaluating LLMs as Agents. arXiv:2308.03688 (2023). Osiem różnych środowisk i znacząca rozbieżność między czołowymi modelami komercyjnymi a open-source o porównywalnym rozmiarze. ↩
-
Andriushchenko, M. et al. AgentHarm: A Benchmark for Measuring Harmfulness of LLM Agents. arXiv:2410.09024 (2024). 110 jawnie złośliwych zadań agent (440 z augmentacjami) w 11 kategoriach szkody, z ustaleniem, że wiodące modele są „surprisingly compliant with malicious agent requests without jailbreaking” oraz że proste uniwersalne szablony jailbreak przenoszą się na agents, zachowując ich capabilities. To most do rozdziału 30: capability benchmark i harm benchmark mierzą ten sam system i nie zgadzają się co do tego, czy jest gotowy. ↩
-
Anthropic, Is my data used for model training?,
privacy.claude.com, czytane 7 września 2026. Cytowane dosłownie wyżej, w tym wyjątek dla feedbacku i pięcioletnie okno przechowywania przesłanego feedbacku. ↩ -
OpenAI, Your data (dokumentacja kontroli danych API),
developers.openai.com, czytane 7 września 2026. Źródło domyślnego stwierdzenia o braku treningu, trzydziestodniowej retencji abuse-monitoring, opisu Zero Data Retention i listy kwalifikujących się endpointów oraz regionów data residency. ↩