Naar inhoud springen
29/30Hoofdstuk 29 van 30

LLM-evaluatie: van openbare benchmarks naar je golden set

Dezelfde agent, dezelfde taak, tien runs. Zeven successen lijken 70%, tot je pass^10 berekent: exact nul.

Op deze pagina

Hier is een demonstratie. De agent uit Hoofdstuk 23 — dezelfde loop, twee van zijn vier tools — wordt op een map met vijf log- en configuratiebestanden gezet en krijgt één vraag.

TEXT
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."

Correct, en het bewijst helemaal niets — want dat transcript is er één van tien die ik draaide, en ik koos het nadat ik alle tien had gezien.

Draai dezelfde taak tien keer, verander niets behalve de sampling seed, en de agent heeft het zeven keer goed. Zeventig procent, het getal dat op de slide zou belanden. Stel nu de vraag waar een klant echt om geeft — werkt het elke keer? — en het antwoord is een heel ander getal:

TEXT
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 %

De agent heeft deze taak nooit tien keer achter elkaar opgelost en, op basis van dit bewijs, mag je dat ook niet verwachten. Dat getal — pass^10 — is het eerlijke getal, het wordt bijna nooit gepubliceerd, en aan het eind van dit hoofdstuk weet je hoe je het berekent, wat het kost om te berekenen, en waarom het interval naast de 70% belangrijker is dan de 70%.

Details tonen

Wat dit hoofdstuk nodig heeft uit de eerdere hoofdstukken.

  • Hoofdstuk 4 voor de statistiek: het Wilson-interval op een proportie, de reden waarom zeventien goed van de twintig niets onderscheidt, en de domme baseline als eerste vereiste.
  • Hoofdstuk 15 voor de bench: de harness van vijftig regels, de paired sign test over de cases waarin twee systemen verschillen, en de regel dat een prompt wordt gemeten, niet bediscussieerd.
  • Hoofdstuk 23 voor wat gemeten wordt: de loop, de vijf uitwegen, de kostenboekhouding, en de slotobservatie dat een harness een agent bestuurbaar maakt maar niet correct.

Twee panelen hier. TypeScript voor je eigen evaluatie, omdat die in je continuous integration naast je code hoort. Python voor het tweede paneel, omdat de openbare benchmarks daar leven en een van de metingen hieronder de logits nodig heeft.

Bijna elke discussie over evaluatie is twee mensen die verschillende dingen meten. Er zijn drie projecten en ze delen geen instrument.

wat je evalueertde vraaghet instrumentwie is eigenaar
het modelis dit model in het algemeen beter dan dat andere?openbare benchmarks, leaderboardsde community
je applicatiewerken mijn prompt, mijn retrieval, mijn schema op mijn inputs?je golden setjij
je agentbereikt de hele loop, met tools en bijeffecten, betrouwbaar het doel?taaksucces plus pass^kjij

De verwarring is in één richting duur. Een leaderboard vertelt je dat een model sterk is in redeneervragen op masterniveau; het kan je niet vertellen of het je supporttickets zal routeren. En een applicatie-evaluatie die één antwoord per input scoort, kan een agent helemaal niet zien, omdat een agent een verdeling van trajecten heeft en één antwoord daar één sample uit is. Hoofdstuk 22 benoemde die derde rij en liet hem leeg: de prestatiemaat, het ene onderdeel van de specificatie van een agent dat teams als laatste opschrijven of helemaal nooit.

De volgorde doet er ook toe, en de vendor die je het model verkoopt zegt dat zelf. OpenAI's agent-gids reduceert modelselectie tot drie stappen, in deze volgorde: "Set up evals to establish a performance baseline", "Focus on meeting your accuracy target with the best models available", "Optimize for cost and latency by replacing larger models with smaller ones where possible".1 Evaluatie komt eerst, omdat stap twee en drie zonder getal betekenisloos zijn.

De golden set, en wat twintig cases echt opleveren

Link naar de sectie: De golden set, en wat twintig cases echt opleveren

Een golden set is een lijst met inputs, elk met het antwoord erbij geschreven, en een grader die beslist of een output overeenkomt. Het is saai, het is klein, en het is het enige artefact in dit hoofdstuk dat van jou is. De set die hier wordt gebouwd heeft twintig taken over een map met vijf bestanden — niet de drie uit Hoofdstuk 23, dus de antwoorden zijn niet dezelfde antwoorden — en de grader wordt geschreven voordat de agent draait:

golden.tsTS
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
];

Twee eigenschappen dragen de last. De lijst mustNot bestaat omdat een model dat drie bestanden noemt waaronder het juiste, niet heeft geantwoord. En answer is zowel in proza als in patronen geschreven, omdat een mens en een judge het later allebei nodig hebben — en hetzelfde feit twee keer in twee notaties opschrijven is hoe je ontdekt dat je het niet met jezelf eens was over wat de taak was.

Nu de tabel die beslist. Vier kandidaatsystemen, dezelfde twintig taken, accuracy met interval, en de twee kolommen die een tabel met alleen accuracies altijd verbergt:

systemcorrectaccuracy, 95% Wilsoncost per solved taskmean latency
A — geen tools, greedy2/2010.0% [2.8, 30.1]$0.004649663 ms
B — tools, korte prompt5/2025.0% [11.2, 46.9]$0.0055761,362 ms
C — tools, begeleide prompt2/2010.0% [2.8, 30.1]$0.013071930 ms
D — C, best of 3 bij T = 0.71/205.0% [0.9, 23.6]$0.0735322,628 ms

Lees de intervallen vóór de winnaar. Arm B loopt van 11% tot 47%; arm A van 3% tot 30%. Ze overlappen over het grootste deel van hun lengte, precies de bevinding uit Hoofdstuk 4 op de plek waar die was beloofd: twintig cases kunnen vier systemen niet rangschikken. Hoofdstuk 15 maakte dit scherper door in plaats daarvan de gepaarde vraag te stellen — van de cases waarin twee armen verschillen, hoe scheef is de verdeling? — omdat de gedeelde moeilijkheid van de set wegvalt. Hier is elk paar:

TEXT
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

Geen van de zes vergelijkingen is vastgesteld. De beste arm verslaat de arm zonder tools met vijftien punten, en dat rust op drie discordante cases. Twintig cases tonen een mechanisme en kunnen geen leverancier kiezen; in een vergadering iets anders zeggen is hoe een slecht model wordt gekocht.

Er is één ding dat deze tabel wel vaststelt, en het is de kolom die niemand opneemt. Arm D kost dertien keer zoveel als arm B per opgeloste taak, omdat drie trajecten samplen en het modale antwoord nemen de rekening verdrievoudigt, of het de accuracy nu verdrievoudigt of niet. Accuracy-tabellen die kosten weglaten maken die afweging onzichtbaar.

Nu de bevinding die verandert hoe je elke benchmark leest die je ooit zult zien. Neem dezelfde tweehonderd transcripts — twintig taken, tien runs, niet één token opnieuw gegenereerd — en scoor ze op drie manieren:

gradercorrectaccuracy, 95% Wilson
exacte match met het opgeschreven antwoord0/2000.0% [0.0, 1.9]
het opgeschreven antwoord verschijnt als substring26/20013.0% [9.0, 18.4]
de keyword rubric hierboven52/20026.0% [20.4, 32.5]

Nul, dertien, zesentwintig. Het systeem veranderde niet. De grader veranderde. Exact match geeft nul terug, niet omdat de agent nutteloos is, maar omdat geen enkel vrijetekstantwoord ooit byte-identiek is aan een referentie: het meet opmaak en rapporteert dat als capability.

Dat is geen curiositeit, het is een mechanisme, en het heeft een naam. Een hard-cutoff metric scoort een taak alles-of-niets over meerdere deelfeiten, en componeert dus. Taak t12 vraagt tegelijk naar drie statuscodes. Over de tien runs:

TEXT
per-code presence   200: 9/10    429: 6/10    500: 8/10    (mean 0.77 per fact)
all three at once   5/10

Elk feit is ongeveer driekwart van de tijd goed; alle drie tegelijk eisen halveert de score, en 0.773=0.4570.77^3 = 0.457 ligt dicht genoeg bij de gemeten 0.50 om te laten zien waar de daling vandaan kwam. Generaliseer:

per-fact accuracy ppk=1k=1k=2k=2k=3k=3k=5k=5k=10k=10
0.6060.0%36.0%21.6%7.8%0.6%
0.8080.0%64.0%51.2%32.8%10.7%
0.9090.0%81.0%72.9%59.0%34.9%
0.9595.0%90.3%85.7%77.4%59.9%

Lees de rij 0.90 naast de rij 0.95 bij k=10k = 10: een per-fact verbetering van vijf punten wordt vijfentwintig punten op de conjunctie. Er gebeurde niets discontinu met het model. Een gladde curve die door een alles-of-niets metric wordt gelezen, lijkt op een sprong — precies het argument dat Schaeffer, Miranda en Koyejo maakten over emergent abilities, en dat Hoofdstuk 10 naar hier doorschoof.2 Hun audit vond dat hoogstens 5 van de 39 voorkeursmetrics van BIG-Bench überhaupt emergence tonen, waarbij twee discontinue metrics verantwoordelijk zijn voor meer dan 92% van de geclaimde gevallen.

Dus de discipline, in één zin: een sprong in een grafiek is bewijs over de metric totdat het tegendeel is aangetoond. Voordat je gelooft dat er een capability verscheen, plot je dezelfde runs met een metric die gedeeltelijke credit geeft en kijk je of de afgrond blijft bestaan.

Er is een tweede-ordeversie hiervan waarvan Kalai en collega's betogen dat die stroomopwaarts schade aanricht: benchmarks die als goed-of-fout worden gescoord belonen gokken boven zeggen "ik weet het niet", dus een model dat daarop wordt geoptimaliseerd leert gokken. Hun voorgestelde oplossing is niet nog een hallucination benchmark, maar "modifying the scoring of existing benchmarks that are misaligned but dominate leaderboards".3 Je golden set heeft dezelfde hendel, en die is één regel: bepaal of een abstention telt als failure of als eigen categorie. De meeste mensen beslissen dat nooit, dus telt het stilzwijgend als failure, en het systeem dat ze shippen gokt.

pass^k, en de variantie die niemand publiceert

Link naar de sectie: pass^k, en de variantie die niemand publiceert

Tot nu toe scoorde alles één poging per taak. Een agent is niet één poging. Hoofdstuk 17 stelde vast dat je zelfs bij temperatuur nul geen determinisme hebt, dus dezelfde input produceert een verdeling van trajecten en een benchmark die elke taak één keer draait rapporteert één sample daaruit.

De bijdrage van τ-bench is de metric daarvoor. Het paper definieert die helder: "we propose a new metric – pass^k (pass hat k), defined as the chance that all k i.i.d. task trials are successful, averaged across tasks."4 Draai elke taak nn keer, tel de cc successen, en de onbevooroordeelde schatters zijn:

passk=Etask ⁣[(ck)(nk)]pass@k=1Etask ⁣[(nck)(nk)]\text{pass}^k = \mathbb{E}_{\text{task}}\!\left[\frac{\binom{c}{k}}{\binom{n}{k}}\right] \qquad \text{pass@}k = 1 - \mathbb{E}_{\text{task}}\!\left[\frac{\binom{n-c}{k}}{\binom{n}{k}}\right]

De tweede is de vertrouwde pass@k uit codegeneratie: de kans dat minstens één van kk pogingen slaagt. Zet ze naast elkaar op dezelfde gemeten aantallen en ze bewegen in tegengestelde richting:

kkpass@k — minstens éénpass^k — allemaal
126.0%26.0%
237.0%15.0%
343.5%10.5%
551.2%6.7%
857.7%5.1%
1060.0%5.0%

Dezelfde runs, dezelfde grader, dezelfde twintig taken. De ene kolom zegt dat het systeem verbetert met meer pogingen en de andere zegt dat het slechter wordt, en allebei kloppen, omdat ze verschillende vragen beantwoorden. pass@k is de juiste metric wanneer een mens de output filtert — codegeneratie, drafts, brainstormen — en de extra pogingen goedkoop zijn. pass^k is de juiste metric wanneer de agent zonder filter handelt, wat precies is wat "agent" betekent. De eerste publiceren waar de tweede geldt, is de meest voorkomende overdrijving in dit vakgebied, en τ-bench's eigen headline is de eerlijke versie: gpt-4o op ongeveer 61% pass^1 op retail daalt naar ongeveer 25% bij pass^8.4

Nu de angel in mijn eigen cijfers. pass^10 over mijn twintig taken is 5.0%: exact één taak van de twintig opgelost op alle tien runs. Die taak is t19, "Did deploy 42 succeed?", en hier zijn twee van de tien antwoorden die de rubric als correct scoorde:

TEXT
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."

Het eerste antwoordt nooit. Het tweede voegt een claim toe die onwaar is — deploy 41 was rolled back. Beide matchten /succe|yes/. De enige taak die pass^10 boven nul houdt is een grader-artefact, dus het echte cijfer is nul, en geen aggregate had me dat laten zien. De transcripts achter je best scorende taak samplen is waar graders gaan sterven.

En nog één getal, het getal waar deze sectie naar is vernoemd. Tien identieke evaluaties — hetzelfde systeem, dezelfde twintig taken, dezelfde code, niets veranderd behalve de seeds:

TEXT
per-run correct: 5 2 5 5 8 5 8 5 4 5   ->  10 % .. 40 %,  mean 26.0 %,  sd 8.8 points

Een bereik van dertig punten op een systeem dat niet veranderde. Als je je suite één keer vóór een release draait en één keer erna, valt een "verbetering" van acht punten binnen die spreiding en ship je die in de overtuiging dat jij hem hebt veroorzaakt. Daarom is het gepoolde interval hierboven — 26.0% [20.4, 32.5] — te smal om op zichzelf te citeren: het behandelt tweehonderd gecorreleerde trials als tweehonderd onafhankelijke. De eerlijke samenvatting van een agent-evaluatie is een gemiddelde en een spreiding over herhalingen, en bijna niemand publiceert dat tweede.

De judge, en de eigen golden set van de judge

Link naar de sectie: De judge, en de eigen golden set van de judge

Rubrics schalen niet naar open antwoorden, dus de standaardzet is om een model de output te laten beoordelen. Op frontier-schaal werkt dat goed genoeg om de default te zijn, en het heeft drie benoemde failure modes: position bias, verbosity bias en self-enhancement bias.5

Meet het voordat je het vertrouwt. Dezelfde zestig antwoorden — drie van de tien runs — kregen op drie manieren een label. Het menselijke label is van mij: ik las alle zestig met de vijf bestanden open en paste één geschreven regel toe, pass als en alleen als het antwoord het feit noemt waar de vraag om vroeg en niets bevat dat door de bestanden wordt tegengesproken.

graderzegt passeens met de mensfalse passfalse fail
keyword rubric17/6050/60 = 83.3% [72.0, 90.7]82
het model als judge60/6011/60 = 18.3% [10.6, 29.9]490

De judge zei PASS zestig keer van de zestig. Hij zou deze agent rapporteren op 100% accuracy op een set waarop de mens hem op 18% scoort. Een judge zonder onderscheidend vermogen is geen lawaaiig instrument; het is een constante functie, en een constante functie geeft je beste systeem en je slechtste systeem dezelfde score.

Prompting redde het niet. Vier varianten, dezelfde zestig items:

judge promptzegt passovereenstemming met de mens
"Reply PASS or FAIL."60/6018.3%
"Reply FAIL or PASS." — labels omgewisseld56/6025.0%
plus een expliciete lijst van wat als failure telt55/6026.7%
plus één uitgewerkt FAIL-voorbeeld en één PASS-voorbeeld56/6025.0%

De volgorde van de twee labels in de instructie omwisselen verplaatste vier oordelen. Dat is een meetbaar effect en het verkeerde soort effect: de judge reageert op de vorm van de prompt in plaats van op het antwoord dat voor hem ligt.

De schone demonstratie is pairwise. Twintig vragen, elk met één duidelijk correcte en één duidelijk foute kandidaat, gepresenteerd in beide volgorden:

TEXT
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 %

Hij koos positie A veertig keer van de veertig. De 50% op correctheid is geen gedeeltelijke competentie — het is rekenkunde, omdat het correcte antwoord in precies de helft van de trials op positie A staat. Consistency is hier gedefinieerd zoals MT-Bench die definieert, "the percentage of cases where a judge gives consistent results when swapping the order of two assistants", waardoor de vergelijking appels met appels wordt: GPT-4 scoort 65.0% op die maat, en few-shot prompting tilde dat naar 77.5%.5 Die van mij scoort nul.

De standaardmitigatie komt ook uit dat paper: "call a judge twice by swapping the order of two answers and only declare a win when an answer is preferred in both orders."5 Pas dat hier toe en de judge produceert nul bruikbare oordelen uit twintig paren — wat de juiste uitkomst is, en oneindig veel beter dan twintig zelfverzekerde.

Een methodologische opmerking die meer waard is dan het resultaat. Ik draaide ook een verbosity-test: hetzelfde correcte antwoord, één kopie opgevuld met een zin van 36 woorden die niets toevoegt. De judge gaf in precies 50% van de trials de voorkeur aan de langere versie — wat lijkt op afwezigheid van verbosity bias en niets van dien aard is, omdat een judge die altijd positie A kiest op elke gebalanceerde pairing 50% scoort. Je kunt geen tweede bias meten voordat de eerste is gecontroleerd. Posities omwisselen is geen verfijning voor later; het is wat elke andere meting interpreteerbaar maakt.

Waar een judge voor is. Open antwoorden zonder parseerbare vorm: toon, dekking, of een citaat zijn zin ondersteunt, of een weigering passend was. Goedkoop, snel, en ongeveer zo goed als zijn basismodel.

Wat een judge niet is. Een ground truth. Het is een systeem met een accuracy, een biasprofiel en een kostprijs, en het heeft zijn eigen golden set met menselijke labels nodig — inclusief bekende failures — voordat een getal dat het produceert iets betekent.

De eerlijke caveat: deze judge is een model met een half miljard parameters, en niemand zou daarmee moeten beoordelen. Het punt is niet dat judges slecht zijn. Het punt is dat de cijfers hierboven acht minuten kostten om te produceren, en zonder die cijfers zou het oordeel van deze judge over een shipping-beslissing 100% zijn geweest.

Tweede paneel: Python, en een probe voor contamination

Link naar de sectie: Tweede paneel: Python, en een probe voor contamination

Dit is het derde en laatste aangekondigde Python-paneel van de cursus, en de reden is waar de openbare cijfers vandaan komen. lm-evaluation-harness dekt "over 60 standard academic benchmarks for LLMs, with hundreds of subtasks and variants implemented" en is "the backend for Hugging Face's popular Open LLM Leaderboard"; HELM, SWE-bench en τ-bench zijn Python-pakketten met Python-entrypoints.6 Je model tegen een gepubliceerd cijfer draaien betekent hun code draaien, en op de dag dat je wilt vergelijken met een getal dat iemand citeerde, is dit het ecosysteem waarin je zit:

terminalBASH
lm_eval --model hf \
    --model_args pretrained=EleutherAI/gpt-j-6B \
    --tasks hellaswag \
    --device cuda:0 \
    --batch_size 8

De tweede reden is dat één meting in dit hoofdstuk onmogelijk is via HTTP. Contamination — de testset die in de trainingsdata is gelekt — is de failure die een openbare benchmark stilletjes betekenisloos maakt, en de scherpste probe daarvoor heeft de eigen loss van het model nodig, die geen chat API teruggeeft. Het is de cross-entropy per token uit Hoofdstuk 8, gericht op een vraag over geheugen:

contamination.pyPYTHON
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)

Tien zinsparen: vijf in elke crawl van het web sinds het bestaat, vijf vanochtend voor dit hoofdstuk geschreven, elk gepaard met een herformulering met dezelfde inhoud.

setcanonieke formuleringherformuleringgap
beroemd, gemiddelde van 51.213.03+1.83
vers, gemiddelde van 55.025.96+0.93

Het model is vier keer zo verrast door een zin die vanochtend is geschreven als door een zin die het een miljoen keer heeft gezien, en herformuleren kost op de beroemde zinnen twee keer zoveel — de extra kost is het deel dat gememoriseerd was in plaats van begrepen. Absolute loss verwart memorisatie met gewone natuurlijkheid, dus de gap is de betere statistiek en de continuation-test is nog beter. Geef het de eerste zes woorden:

TEXT
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."

Drie van de vijf beroemde strings werden vanaf zes woorden woordperfect voortgezet; geen van de vijf verse deed dat. Dat is een model met een half miljard parameters dat de MIT License opzegt. Als je benchmark op het openbare web staat, neem aan dat hij in de weights zit. Het is ook het argument voor het hele hoofdstuk: een golden set die je uit je eigen data hebt geschreven, buiten elke repository gehouden die een crawler leest, is de enige testset waarvan je zeker kunt zijn dat er nooit op is getraind.

Ze zijn nog steeds het lezen waard, zolang je leest wat elke benchmark meet in plaats van het ene getal dat eraan hangt.

benchmarkwat hij meeteen getal uit het paper
MMLUmultiple-choice kennis over 57 vakgebiedenGPT-3 versloeg kansniveau met "almost 20 percentage points on average"7
HELMveel metrics × veel scenario's, gestandaardiseerddekking van kernscenario's ging van 17.9% naar 96.0%8
Chatbot Arenacrowdsourced pairwise menselijke voorkeurmeer dan 240K stemmen; crowdstemmen "in good agreement" met experts9
SWE-benchechte GitHub-issues oplossen, beoordeeld door de tests van de repo2,294 problemen; beste model op dat moment loste "a mere 1.96%" op10
τ-benchtoolgebruik met een gesimuleerde gebruiker en domeinbeleidgpt-4o ≈ 61% pass^1, ≈ 25% pass^8 op retail4
WebArenalong-horizon taken op werkende websitesbeste GPT-4 agent 14.41% tegenover 78.24% voor mensen11
OSWorldechte desktop- en OS-taken over applicaties369 taken; beste model 12.24%, mensen 72.36%12
GAIAvragen die makkelijk zijn voor mensen, moeilijk voor assistants466 vragen; mensen 92%, GPT-4 met plugins 15%13
AgentBenchagent-redeneren over 8 verschillende omgevingeneen grote kloof tussen commerciële en open modellen14
AgentHarmof een agent kwaadaardige meerstapstaken uitvoert110 kwaadaardige taken over 11 harm-categorieën15

Neem de tabel, niet één rij. De agentic benchmarks zetten mensen allemaal ver boven modellen, wat het tegenovergestelde is van de kennisbenchmarks en de beste samenvatting in één zin van waar het veld staat; hun cijfers verouderen binnen maanden, dus citeer ze met de datum waarop je ze las; en elk ervan meet een taak die niet de jouwe is.

Accuracy is de metric waar je over discussieert. Dit zijn de metrics die bepalen of het ding wordt geshipt. Alle vier vallen uit de tweehonderd runs die al gemeten zijn.

Kosten per opgeloste taak, niet per call. De agent kost $0.001345 per poging en $0.005172 per daadwerkelijk opgeloste taak — 3.85 keer zoveel, omdat driekwart van de pogingen niets oplevert. Latency gedraagt zich hetzelfde: 1,213 ms per poging, 4,667 ms per opgeloste taak. Elke retry, elke opnieuw gestelde vraag, elk verlaten traject zit in het tweede getal en is onzichtbaar in het eerste.

Een diagnostiek die accuracy verslaat. In 123 van de 200 pogingen antwoordde de agent zonder ook maar één tool aan te roepen — hij gokte in plaats van te kijken. Gesplitst daarop:

TEXT
answered without reading anything   8/123  =  6.5 %  [3.3, 12.3]
answered after reading something   44/77   = 57.1 %  [46.0, 67.6]

De intervallen komen niet in de buurt van elkaar. Dat is meer waard dan de aggregate 26%, omdat het benoemt wat je moet fixen — het model faalt niet in redeneren, het faalt in kijken — en de fix zit in de harness, niet in het model. Eén caveat die dit hoofdstuk aan zijn eigen standaarden verschuldigd is: de twee groepen zijn verschillende taken, niet dezelfde taken gepaard, dus een deel van die kloof kan zijn dat het de tools juist overslaat op de vragen die het moeilijk vindt. De split is een diagnose, geen causale claim.

Human intervention rate is de metric waar een koper als eerste om vraagt: welk deel van de runs stopte bij een approval, een guardrail of een handoff. De getypeerde onderbrekingen uit Hoofdstuk 23 maken het telbaar, en geteld per taaktype en per week is het wat een agent die zijn werk leert onderscheidt van een agent die stilletjes een wachtrij wordt.

Abandonment is de metric die geen enkele offline suite kan zien: de gebruiker die het antwoord las, het tabblad sloot en de taak zelf deed. Offline evaluatie is een poort; productie-evaluatie is een continue sample van echt verkeer, gescoord op dezelfde grader plus deze vier.

En een regel geërfd uit Hoofdstuk 17: assert nooit op exacte output. Assert op eigenschappen — geldige JSON, correct schema, de juiste tool aangeroepen, een getal binnen tolerantie, een vereiste substring aanwezig. De exact-match-kolom bovenaan dit hoofdstuk is wat er gebeurt wanneer die regel wordt gebroken.

Een leverancier evalueren gaat niet alleen over accuracy, en dit is de tweede helft van de ethiek van deze cursus, met een eigen kop in plaats van een appendix.

Meet de bias, neem hem niet aan. Wat je ook gelooft over het gedrag van een model op namen, dialecten, genders of nationaliteiten, het is een meetbare eigenschap van jouw pipeline, en het instrument is het instrument dat je al hebt: neem je golden set, varieer alleen het attribuut, vergelijk gepaard. HELM bestaat precies omdat alleen accuracy werd gerapporteerd waar bias, toxiciteit, calibration en robustness ook bepaalbaar waren.8 De model card van een vendor is een startpunt, geen bewijs over jouw inputs.

Contamination is ook een leveranciersvraag. De probe hierboven is de reden om te vragen waarop een gepubliceerd getal is gemeten, en wanneer de data van het model is afgekapt.

Retention, training en residency, gelezen op 7 september 2026. Deze veranderen, dus noteer de datum naast het antwoord. Anthropic's beleidspagina stelt: "By default, we will not use your inputs or outputs from our commercial products (e.g. Claude for Work, Anthropic API, Claude Gov, etc.) to train our models", met als uitzondering content die je expliciet als feedback indient, die "for up to 5 years" wordt bewaard.16 OpenAI's documentatie over datacontroles stelt dat "data sent to the OpenAI API is not used to train or improve OpenAI models (unless you explicitly opt in to share data with us)", beschrijft een standaardretentie van dertig dagen voor abuse-monitoring logs, en biedt Zero Data Retention, dat "excludes customer content from abuse monitoring logs", plus configureerbare data residency over een lijst met regio's.17

Vier vragen om schriftelijk te krijgen vóór de eerste productie-call, omdat elke vraag een andere eigenaar heeft: wordt mijn data gebruikt voor training; hoe lang wordt die bewaard en door wie; waar wordt die verwerkt en opgeslagen; en wat gebeurt er met al die dingen als ik een reseller, een gateway of een aggregator gebruik in plaats van de provider direct. In die laatste vraag zitten de meeste verrassingen, en geen benchmark vertelt je dat.

Je hebt nu het instrument: een golden set die van jou is, een interval op elk getal, een paired test voor elke vergelijking, pass^k voor de runs die je niemand liet zien, een gemeten judge, en een probe voor de vraag of een openbare score iets betekent. De slotclaim van Hoofdstuk 23 kan nu worden gecontroleerd in plaats van beweerd — een harness maakt een agent bestuurbaar, niet correct — en die controle kostte tweehonderd runs en acht minuten.

Er is één eigenschap van een agent die dit allemaal niet meet, en het is de eigenschap waardoor mensen ontslagen worden.

Elke taak in de golden set van dit hoofdstuk is door mij geschreven, en elk bestand dat de agent las is door mij geschreven. Niets in die map probeerde iets te doen. Verander één regel in één bestand dat de agent moet lezen — een regel die eindigt met een instructie gericht aan wat het daarna ook leest — en de agent die 26% scoorde zal die volgen met dezelfde tools, dezelfde permissies en dezelfde schone trace, en elk getal in dit hoofdstuk blijft precies waar het is. Een evaluatiesuite meet hoe vaak een systeem jouw doel bereikt. Ze meet niet hoe makkelijk iemand anders zijn doel ervoor in de plaats kan zetten.

Hoofdstuk 30 gaat daarover: prompt injection, de dodelijke trifecta van private data, untrusted content en external communication, en wat het kost om een agent echte permissies te geven. Het opent met de observatie die dit hoofdstuk heeft vermeden — dat dezelfde passing score compatibel is met een agent die precies doet wat een aanvaller schreef in een bestand dat hij moest lezen.


Elk getal hierboven is geproduceerd op één machine en niets ervan raakte een betaald endpoint. De agent is de loop uit Hoofdstuk 23 met twee van zijn vier tools over een map met vijf bestanden; het model achter de poort is Qwen/Qwen2.5-0.5B-Instruct, beschikbaar gemaakt via een kleine server met dezelfde vorm als een chat-completions-endpoint precies zoals in Hoofdstuk 23, maar in half precision op één consumer-GPU in plaats van de CPU uit dat hoofdstuk. Kosten gebruiken de tarieven uit Hoofdstuk 16 — $2.00 per miljoen input tokens en $12.00 per miljoen output — toegepast op gemeten token-aantallen. De herhaalde runs gebruiken temperature 0.7 met vaste seeds zodat de hele set reproduceert; de tabel met vier armen is greedy. Intervallen zijn Wilson op 95%, paired comparisons zijn tweezijdige exacte sign tests over de discordante paren; het Wilson-interval is dat uit Hoofdstuk 4 en de exacte paired sign test die uit Hoofdstuk 15, allebei ongewijzigd hergebruikt. De menselijke labels zijn van mij, toegepast op zestig antwoorden onder de geschreven regel die in de tekst is geciteerd. Lees elke orde van grootte hier als een eigenschap van een model met een half miljard parameters en elke methode als overdraagbaar: een groter model schuift alle cijfers omhoog en verandert geen van de instrumenten.

  1. OpenAI, A practical guide to building agents (PDF), pagina 8, gelezen op 7 september 2026. Bron van de hierboven geciteerde driestappenvolgorde en van het begeleidende advies om "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." Hoofdstukken 22 en 25 citeren de definitie- en orchestratiepagina's.

  2. Schaeffer, R., Miranda, B. en Koyejo, S. Are Emergent Abilities of Large Language Models a Mirage? arXiv:2304.15004 (2023). Het argument dat discontinue, alles-of-niets metrics schijnbare sprongen maken uit gladde onderliggende verbeteringen, met de BIG-Bench-audit die in Hoofdstuk 10 is geciteerd. Hun eigen waarschuwing is het herhalen waard: niets in het paper beweert dat grote modellen geen emergent abilities kunnen vertonen.

  3. Kalai, A. T., Nachum, O., Vempala, S. S. en Zhang, E. Why Language Models Hallucinate. arXiv:2509.04664 (2025). Het argument dat benchmarks die goed-of-fout scoren gokken boven abstention belonen, en de voorgestelde remedie van "modifying the scoring of existing benchmarks that are misaligned but dominate leaderboards, rather than introducing additional hallucination evaluations". Hoofdstuk 19 citeert het vanaf de retrieval-kant; dit is de evaluatiekant van dezelfde claim.

  4. Yao, S., Shinn, N., Razavi, P. en Narasimhan, K. τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains. arXiv:2406.12045 (2024). De oorsprong van pass^k, gedefinieerd zoals hierboven geciteerd, met beide schatters naast elkaar afgedrukt in het paper; de headline van de abstract is dat state-of-the-art function-calling agents "succeed on <50% of the tasks, and are quite inconsistent (pass^8 <25% in retail)", en sectie 1 geeft de gpt-4o-cijfers van ≈61% pass^1 en ≈25% pass^8 op τ-retail. De pass@k-schatter waarmee het wordt vergeleken komt van Chen, M. et al., Evaluating Large Language Models Trained on Code, arXiv:2107.03374 (2021). 2 3

  5. Zheng, L. et al. Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena. arXiv:2306.05685 (2023). Bron van de drie benoemde biases, van de definitie van consistency die hierboven wordt gebruikt ("the percentage of cases where a judge gives consistent results when swapping the order of two assistants"), van de bevinding dat "only GPT-4 outputs consistent results in more than 60% of cases" met 65.0% oplopend naar 77.5% few-shot, en van de swap-and-require-agreement-mitigatie die letterlijk is geciteerd. Het positieve resultaat is ook belangrijk: GPT-4-judges bereiken "an agreement rate exceeding 80%" met menselijke evaluaties, "the same level of human-human agreement" — en dat is de reden om überhaupt een judge te gebruiken, en de reden om die van jou te meten. 2 3

  6. EleutherAI, Language Model Evaluation Harness, project-README gelezen op 7 september 2026: "over 60 standard academic benchmarks for LLMs, with hundreds of subtasks and variants implemented", en "the backend for Hugging Face's popular Open LLM Leaderboard". De lm_eval-aanroep die hierboven is geciteerd is het eigen voorbeeld uit de README. Liang, P. et al., Holistic Evaluation of Language Models, arXiv:2211.09110 (2022), is de andere standaardrunner en de betere tekst over evaluatieontwerp.

  7. Hendrycks, D., Burns, C., Basart, S., Zou, A., Mazeika, M., Song, D. en Steinhardt, J. Measuring Massive Multitask Language Understanding. arXiv:2009.03300 (2020). 57 taken; de claim uit de abstract dat het grootste GPT-3-model "improves over random chance by almost 20 percentage points on average" is een nuttige herinnering aan hoe recent de verzadiging van deze benchmark is.

  8. Liang, P. et al. Holistic Evaluation of Language Models. arXiv:2211.09110 (2022). Zeven metrics — accuracy, calibration, robustness, fairness, bias, toxicity en efficiency — over 16 kernscenario's en 30 modellen, met de hierboven geciteerde dekkingscijfers. De reden om het te lezen is het frame: welke van de zeven je rapporteert is zelf een keuze. 2

  9. Chiang, W.-L. et al. Chatbot Arena: An Open Platform for Evaluating LLMs by Human Preference. arXiv:2403.04132 (2024). Meer dan 240K stemmen op het moment van schrijven, crowdsourced pairwise preference, en de claim dat "the crowdsourced human votes are in good agreement with those of expert raters".

  10. Jimenez, C. E., Yang, J., Wettig, A., Yao, S., Pei, K., Press, O. en Narasimhan, K. SWE-bench: Can Language Models Resolve Real-World GitHub Issues? arXiv:2310.06770 (2023). 2,294 problemen uit 12 Python-repositories, beoordeeld door de eigen tests van die repositories, met het beste model van dat moment dat "a mere 1.96%" oploste. Hoofdstuk 23 gebruikt het voor de andere betekenis van het woord "harness".

  11. Zhou, S. et al. WebArena: A Realistic Web Environment for Building Autonomous Agents. arXiv:2307.13854 (2023). Werkende websites over vier domeinen, met een beste GPT-4 agent op 14.41% tegenover 78.24% voor mensen.

  12. Xie, T. et al. OSWorld: Benchmarking Multimodal Agents for Open-Ended Tasks in Real Computer Environments. arXiv:2404.07972 (2024). 369 taken op echte besturingssystemen; mensen boven 72.36%, beste model 12.24%, met GUI-grounding genoemd als de belangrijkste kloof.

  13. Mialon, G., Fourrier, C., Swift, C., Wolf, T., LeCun, Y. en Scialom, T. GAIA: A Benchmark for General AI Assistants. arXiv:2311.12983 (2023). 466 vragen, mensen op 92% tegenover 15% voor GPT-4 met plugins — de schoonste gepubliceerde uitspraak over de kloof tussen wat makkelijk is voor een mens en wat makkelijk is voor een assistant.

  14. Liu, X. et al. AgentBench: Evaluating LLMs as Agents. arXiv:2308.03688 (2023). Acht verschillende omgevingen, en een significant verschil tussen topmodellen van commerciële aanbieders en open-source modellen van vergelijkbare grootte.

  15. Andriushchenko, M. et al. AgentHarm: A Benchmark for Measuring Harmfulness of LLM Agents. arXiv:2410.09024 (2024). 110 expliciet kwaadaardige agent-taken (440 met augmentations) over 11 harm-categorieën, met de bevinding dat leidende modellen "surprisingly compliant with malicious agent requests without jailbreaking" zijn en dat simpele universele jailbreak-templates naar agents transfereren terwijl ze hun capabilities behouden. Het is de brug naar Hoofdstuk 30: een capability benchmark en een harm benchmark meten hetzelfde systeem en zijn het oneens over of het klaar is.

  16. Anthropic, Is my data used for model training?, privacy.claude.com, gelezen op 7 september 2026. Hierboven letterlijk geciteerd, inclusief de feedbackuitzondering en de bewaartermijn van vijf jaar voor ingediende feedback.

  17. OpenAI, Your data (API data controls-documentatie), developers.openai.com, gelezen op 7 september 2026. Bron van de default no-training-verklaring, de retentie van dertig dagen voor abuse-monitoring, de beschrijving van Zero Data Retention en de lijst met in aanmerking komende endpoints, en de data residency-regio's.

Klaar om LIA te laten kiezen?

Bouw met elk AI-model op één plek — begin vandaag nog gratis.