Spring til indhold
29/30Kapitel 29 af 30

LLM-evaluering: Fra offentlige benchmarks til dit golden set

Samme agent, samme opgave, ti kørsler. Syv succeser ligner 70 %, indtil du beregner pass^10: præcis nul.

På denne side

Her er en demonstration. Agenten fra kapitel 23 — samme loop, to af dens fire værktøjer — peges mod en mappe med fem log- og konfigurationsfiler og får ét spørgsmål.

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

Korrekt, og det er bevis på absolut ingenting — fordi den transskription er én af ti, jeg kørte, og jeg valgte den efter at have set alle ti.

Kør den identiske opgave ti gange, uden at ændre andet end sampling seed, og agenten får den rigtig syv gange. Halvfjerds procent, hvilket er tallet, der ville ende på sliden. Stil nu det spørgsmål, en kunde faktisk bekymrer sig om — virker det hver gang? — og svaret er et helt andet tal:

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 %

Agenten har aldrig løst denne opgave ti gange i træk og forventes, ud fra dette bevis, heller ikke at gøre det. Det tal — pass^10 — er det ærlige tal, det bliver næsten aldrig offentliggjort, og ved slutningen af dette kapitel ved du, hvordan du beregner det, hvad det koster at beregne, og hvorfor intervallet ved siden af 70 % betyder mere end de 70 %.

Vis detaljer

Hvad dette kapitel kræver fra de tidligere.

  • Kapitel 4 for statistikken: Wilson-intervallet på en andel, grunden til at sytten rigtige ud af tyve ikke adskiller noget, og den dumme baseline som første krav.
  • Kapitel 15 for bænken: det halvtreds linjer lange harness, den parrede fortegnstest over de cases, hvor to systemer er uenige, og reglen om, at en prompt måles, ikke diskuteres.
  • Kapitel 23 for det, der måles: loopet, de fem veje ud, omkostningsregnskabet og den afsluttende observation om, at et harness gør en agent styrbar, men ikke korrekt.

To paneler her. TypeScript til din egen evaluering, fordi den hører hjemme i din continuous integration ved siden af din kode. Python til det andet panel, fordi de offentlige benchmarks bor der, og en af målingerne nedenfor har brug for logits.

Næsten enhver diskussion om evaluering er to personer, der måler forskellige ting. Der er tre projekter, og de deler ikke instrument.

hvad du evaluererspørgsmåletinstrumentethvem ejer det
modellener denne model bedre end den dér, generelt?offentlige benchmarks, leaderboardsfællesskabet
din applikationvirker min prompt, min retrieval, mit schema på mine inputs?dit golden setdig
din agentnår hele loopet, med værktøjer og sideeffekter, målet pålideligt?opgavesucces plus pass^kdig

Forvirringen er dyr i én retning. Et leaderboard fortæller dig, at en model er stærk til ræsonnement på kandidatniveau; det kan ikke fortælle dig, om den vil route dine supporttickets. Og en applikationsevaluering, der scorer ét svar per input, kan slet ikke se en agent, fordi en agent har en distribution af forløb, og ét svar er en enkelt sample fra den. Kapitel 22 navngav den tredje række og lod den stå tom: performance-målet, den ene del af en agents specifikation, som teams skriver ned sidst eller aldrig.

Rækkefølgen betyder også noget, og leverandøren, der sælger dig modellen, siger det samme. OpenAI's agent-guide reducerer modelvalg til tre trin, i denne rækkefølge: »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 Evaluering kommer først, fordi trin to og tre er meningsløse uden et tal.

Golden set, og hvad tyve cases faktisk køber

Link til afsnittet: Golden set, og hvad tyve cases faktisk køber

Et golden set er en liste af inputs, hver med svaret skrevet ned, og en grader, der afgør, om et output matcher. Det er kedeligt, det er lille, og det er den eneste artefakt i dette kapitel, som er din. Det, der bygges her, har tyve opgaver over en mappe med fem filer — ikke kapitel 23's tre, så svarene er ikke de samme svar — og graderen skrives, før agenten kører:

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
];

To egenskaber bærer vægten. Listen mustNot findes, fordi en model, der nævner tre filer inklusive den rigtige, ikke har svaret. Og answer er skrevet i prosa såvel som i mønstre, fordi både et menneske og en judge får brug for den senere — og at skrive den samme kendsgerning to gange i to notationer er sådan, du opdager, at du ikke var enig med dig selv om, hvad opgaven var.

Nu tabellen, der afgør det. Fire kandidatsystemer, de samme tyve opgaver, accuracy med sit interval og de to kolonner, som en ren accuracy-tabel altid skjuler:

systemkorrektaccuracy, 95 % Wilsonomkostning per løst opgavegennemsnitlig latency
A — ingen værktøjer, greedy2/2010.0 % [2.8, 30.1]$0.004649663 ms
B — værktøjer, kort prompt5/2025.0 % [11.2, 46.9]$0.0055761,362 ms
C — værktøjer, guidet prompt2/2010.0 % [2.8, 30.1]$0.013071930 ms
D — C, best of 3 ved T = 0.71/205.0 % [0.9, 23.6]$0.0735322,628 ms

Læs intervallerne før vinderen. Arm B's kørsler går fra 11 % til 47 %; arm A's fra 3 % til 30 %. De overlapper over størstedelen af deres længde, hvilket er kapitel 4's fund, der ankommer præcis der, hvor det blev lovet: tyve cases kan ikke rangordne fire systemer. Kapitel 15 skærpede dette ved i stedet at stille det parrede spørgsmål — blandt de cases hvor to arme er uenige, hvor skæv er fordelingen? — fordi sættets fælles sværhedsgrad annulleres. Her er hvert par:

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

Ikke én af de seks sammenligninger er etableret. Den bedste arm slår armen helt uden værktøjer med femten point, og det hviler på tre diskordante cases. Tyve cases viser en mekanisme og kan ikke vælge en leverandør; at sige det modsatte i et møde er sådan, en dårlig model bliver købt.

Der er én ting, tabellen etablerer, og det er kolonnen, ingen tager med. Arm D koster tretten gange arm B per løst opgave, fordi sampling af tre forløb og valg af det modale svar tredobler regningen, uanset om det tredobler accuracy. Accuracy-tabeller, der udelader omkostning, gør den afvejning usynlig.

Nu fundet, der ændrer, hvordan du læser hvert benchmark, du nogensinde kommer til at se. Tag de samme to hundrede transskriptioner — tyve opgaver, ti kørsler, ikke én token regenereret — og scor dem på tre måder:

graderkorrektaccuracy, 95 % Wilson
exact match mod det skrevne svar0/2000.0 % [0.0, 1.9]
det skrevne svar optræder som substring26/20013.0 % [9.0, 18.4]
keyword-rubrikken ovenfor52/20026.0 % [20.4, 32.5]

Nul, tretten, seksogtyve. Systemet ændrede sig ikke. Graderen gjorde. Exact match returnerer nul, ikke fordi agenten er ubrugelig, men fordi intet fritekstsvar nogensinde er byte-identisk med en reference: det måler formatering og rapporterer det som capability.

Det er ikke en kuriositet, det er en mekanisme, og den har et navn. En hard-cutoff metric scorer en opgave alt-eller-intet over flere del-fakta, så den sammensætter effekten. Opgave t12 beder om tre statuskoder på én gang. Over de ti kørsler:

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

Hvert faktum er rigtigt omkring tre fjerdedele af tiden; at kræve alle tre på én gang halverer scoren, og 0.773=0.4570.77^3 = 0.457 er tæt nok på den målte 0.50 til at vise, hvor faldet kom fra. Generalisér:

accuracy per faktum 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 %

Læs 0.90-rækken mod 0.95-rækken ved k=10k = 10: en forbedring per faktum på fem point bliver til femogtyve point på konjunktionen. Der skete intet diskontinuert med modellen. En glat kurve læst gennem en alt-eller-intet-metrik ligner et spring — hvilket præcis er det argument, Schaeffer, Miranda og Koyejo fremførte om emergent abilities, og som kapitel 10 udsatte til her.2 Deres audit fandt, at højst 5 af BIG-Benchs 39 foretrukne metrics overhovedet viser emergence, hvor to diskontinuerte metrics står for over 92 % af de påståede tilfælde.

Så disciplinen, på én linje: et spring i en graf er bevis om metrikken, indtil andet er vist. Før du tror på, at en capability opstod, så plot de samme kørsler med en metrik, der giver delvis kredit, og se, om klippen overlever.

Der er en andenordens version af dette, som Kalai og kolleger argumenterer for skader opstrøms: benchmarks scoret som rigtigt-eller-forkert belønner gæt frem for at sige »jeg ved det ikke«, så en model optimeret mod dem lærer at gætte. Deres foreslåede løsning er ikke endnu et hallucination benchmark, men »modifying the scoring of existing benchmarks that are misaligned but dominate leaderboards«.3 Dit golden set har samme håndtag, og det er én linje: beslut, om abstention tæller som failure eller som sin egen kategori. De fleste beslutter det aldrig, så det tæller stiltiende som failure, og systemet, de shipper, gætter.

Alt indtil nu scorede ét forsøg per opgave. En agent er ikke ét forsøg. Kapitel 17 etablerede, at du ikke har determinisme selv ved temperature nul, så samme input producerer en distribution af forløb, og et benchmark, der kører hver opgave én gang, rapporterer én sample fra den.

τ-benchs bidrag er metrikken til det. Paperet definerer den klart: »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 Kør hver opgave nn gange, tæl de cc succeser, og de unbiased estimatorer er:

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]

Den anden er den velkendte pass@k fra kodegenerering: chancen for, at mindst ét af kk forsøg lykkes. Sæt dem side om side på de samme målte optællinger, og de bevæger sig i modsatte retninger:

kkpass@k — mindst étpass^k — alle sammen
126.0 %26.0 %
237.0 %15.0 %
343.5 %10.5 %
551.2 %6.7 %
857.7 %5.1 %
1060.0 %5.0 %

Samme kørsler, samme grader, samme tyve opgaver. Den ene kolonne siger, at systemet forbedres med flere forsøg, og den anden siger, at det bliver værre, og begge har ret, fordi de svarer på forskellige spørgsmål. pass@k er den rigtige metrik, når et menneske filtrerer outputtet — kodegenerering, udkast, brainstorming — og de ekstra forsøg er billige. pass^k er den rigtige metrik, når agenten handler uden filter, hvilket er det, »agent« betyder. At offentliggøre den første, hvor den anden gælder, er den mest almindelige overdrivelse i feltet, og τ-benchs egen overskrift er den ærlige version: gpt-4o på cirka 61 % pass^1 i retail falder til cirka 25 % ved pass^8.4

Nu brodden i mine egne tal. pass^10 over mine tyve opgaver er 5.0 %: præcis én opgave ud af tyve løst på alle ti kørsler. Den opgave er t19, »Lykkedes deploy 42?«, og her er to af de ti svar, rubrikken scorede som korrekte:

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

Det første svarer aldrig. Det andet tilføjer en påstand, der er falsk — deploy 41 blev rolled back. Begge matchede /succe|yes/. Den eneste opgave, der holder pass^10 over nul, er en grader-artefakt, så det sande tal er nul, og intet aggregat ville have vist mig det. Sampling af transskriptionerne bag din bedst scorende opgave er dér, graders går hen for at dø.

Og endnu et tal, det som dette afsnit er opkaldt efter. Ti identiske evalueringer — samme system, samme tyve opgaver, samme kode, intet ændret ud over seeds:

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

Et spænd på tredive point på et system, der ikke ændrede sig. Hvis du kører din suite én gang før en release og én gang efter, ligger en »forbedring« på otte point inde i det spænd, og du shipper den i den tro, at du forårsagede den. Det er derfor, det pooled interval ovenfor — 26.0 % [20.4, 32.5] — er for snævert til at citere alene: det behandler to hundrede korrelerede forsøg som to hundrede uafhængige. Den ærlige opsummering af en agent-evaluering er et gennemsnit og en spredning på tværs af gentagelser, og næsten ingen offentliggør det andet.

Rubrikker skalerer ikke til åbne svar, så standardgrebet er at få en model til at bedømme outputtet. Det virker godt nok på frontier-skala til at være default, og det har tre navngivne failure modes: position bias, verbosity bias og self-enhancement bias.5

Mål den, før du stoler på den. De samme tres svar — tre af de ti kørsler — blev labellet på tre måder. Den menneskelige label er min: jeg læste alle tres med de fem filer åbne og anvendte én skrevet regel, pass hvis og kun hvis svaret angiver det faktum, spørgsmålet bad om, og ikke indeholder noget, der modsiges af filerne.

gradersiger passenig med mennesketfalse passfalse fail
keyword-rubrik17/6050/60 = 83.3 % [72.0, 90.7]82
modellen som judge60/6011/60 = 18.3 % [10.6, 29.9]490

Judgen sagde PASS tres gange ud af tres. Den ville have rapporteret denne agent til 100 % accuracy på et sæt, hvor mennesket scorer den til 18 %. En judge uden diskriminativ kraft er ikke et støjende instrument; det er en konstant funktion, og en konstant funktion giver dit bedste system og dit værste system samme score.

Prompting reddede den ikke. Fire varianter, samme tres items:

judge promptsiger passagreement med mennesket
»Reply PASS or FAIL.«60/6018.3 %
»Reply FAIL or PASS.« — labels byttet om56/6025.0 %
plus en eksplicit liste over, hvad der tæller som failure55/6026.7 %
plus ét gennemarbejdet FAIL-eksempel og ét PASS-eksempel56/6025.0 %

At bytte rækkefølgen af de to labels i instruktionen flyttede fire verdicts. Det er en målbar effekt, og det er den forkerte slags effekt: judgen reagerer på formen af prompt snarere end på svaret foran den.

Den rene demonstration er parvis. Tyve spørgsmål, hver med én klart korrekt og én klart forkert kandidat, præsenteret i begge rækkefølger:

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 %

Den valgte position A fyrre gange ud af fyrre. De 50 % på korrekthed er ikke delvis kompetence — det er aritmetik, fordi det korrekte svar står i position A på præcis halvdelen af forsøgene. Konsistens her er defineret, som MT-Bench definerer det, »the percentage of cases where a judge gives consistent results when swapping the order of two assistants«, hvilket gør sammenligningen apples to apples: GPT-4 scorer 65.0 % på det mål, og few-shot prompting løftede den til 77.5 %.5 Min scorer nul.

Standardafhjælpningen er også fra det 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 Anvend den her, og judgen producerer nul brugbare verdicts fra tyve par — hvilket er det korrekte udfald og uendeligt bedre end tyve selvsikre.

En metodisk note, der er mere værd end resultatet. Jeg kørte også en verbosity-test: samme korrekte svar, én kopi polstret med en sætning på 36 ord, der ikke tilføjer noget. Judgen foretrak den længere version på præcis 50 % af forsøgene — hvilket ligner et fravær af verbosity bias og slet ikke er det, fordi en judge, der altid vælger position A, scorer 50 % på enhver balanceret parring overhovedet. Du kan ikke måle en anden bias, før den første er kontrolleret. At bytte positioner er ikke en forfinelse, man tilføjer senere; det er det, der gør enhver anden måling fortolkelig.

Hvad en judge er til. Åbne svar uden parsebar form: tone, dækning, om en citation understøtter sin sætning, om en refusal var passende. Billig, hurtig og omtrent lige så god som sin base model.

Hvad en judge ikke er. En ground truth. Den er et system med accuracy, en bias-profil og en omkostning, og den har brug for sit eget golden set af menneskelige labels — inklusive kendte failures — før noget tal, den producerer, betyder noget.

Det ærlige forbehold: denne judge er en model med en halv milliard parametre, og ingen bør grade med sådan en. Pointen er ikke, at judges er dårlige. Den er, at tallene ovenfor kostede otte minutter at producere, og uden dem ville denne judges verdict på en shipping-beslutning have været 100 %.

Andet panel: Python, og en probe for contamination

Link til afsnittet: Andet panel: Python, og en probe for contamination

Dette er kursets tredje og sidste erklærede Python-panel, og årsagen er dér, de offentlige tal kommer fra. lm-evaluation-harness dækker »over 60 standard academic benchmarks for LLMs, with hundreds of subtasks and variants implemented« og er »the backend for Hugging Face's popular Open LLM Leaderboard«; HELM, SWE-bench og τ-bench er Python-pakker med Python-entry points.6 At køre din model mod et offentliggjort tal betyder at køre deres kode, og den dag du vil sammenligne med et tal, nogen citerede, er det økosystemet, du er i:

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

Den anden grund er, at én måling i dette kapitel er umulig over HTTP. Contamination — at testsættet er lækket ind i træningsdata — er den failure, der gør et offentligt benchmark stille og roligt meningsløst, og den skarpeste probe for det har brug for modellens eget loss, som ingen chat API returnerer. Det er kapitel 8's cross-entropy per token, rettet mod et spørgsmål om hukommelse:

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)

Ti sætningspar: fem i enhver crawl af nettet, siden det fandtes, fem skrevet til dette kapitel i morges, hver parret med en omformuleret version med samme indhold.

sætkanonisk formuleringomformuleretgap
berømte, gennemsnit af 51.213.03+1.83
friske, gennemsnit af 55.025.96+0.93

Modellen bliver fire gange mere overrasket over en sætning skrevet i morges end over en, den har set en million gange, og omformulering koster dobbelt så meget på de berømte — den ekstra omkostning er den del, der blev memoriseret snarere end forstået. Absolut loss sammenblander memorisering med almindelig naturlighed, så gap er den bedre statistik, og continuation-testen er endnu bedre. Giv den de første seks ord:

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

Tre af de fem berømte strenge fortsatte ordperfekt fra seks ord; ingen af de fem friske gjorde. Det er en model med en halv milliard parametre, der reciterer MIT License. Hvis dit benchmark ligger på det offentlige web, så antag, at det er i vægtene. Det er også argumentet for hele kapitlet: et golden set, du skrev fra dine egne data og holdt ude af ethvert repository, en crawler læser, er det eneste testsæt, du kan være sikker på aldrig blev trænet på.

Hvad de offentlige benchmarks faktisk måler

Link til afsnittet: Hvad de offentlige benchmarks faktisk måler

De er stadig værd at læse, så længe du læser, hvad hver enkelt måler, frem for det ene tal, der er sat på den.

benchmarkhvad det måleret tal fra dets paper
MMLUmultiple-choice-viden på tværs af 57 fagGPT-3 slog tilfældighed med »almost 20 percentage points on average«7
HELMmange metrics × mange scenarier, standardiseretdækning af kernescenarier gik fra 17.9 % til 96.0 %8
Chatbot Arenacrowdsourcet parvis menneskelig præferenceover 240K stemmer; crowd-stemmer »in good agreement« med eksperter9
SWE-benchløsning af rigtige GitHub-issues, gradet af repoets tests2,294 problemer; bedste model dengang løste »a mere 1.96 %«10
τ-benchbrug af værktøjer med en simuleret bruger og domænepolitikgpt-4o ≈ 61 % pass^1, ≈ 25 % pass^8 på retail4
WebArenalanghorisont-opgaver på fungerende websitesbedste GPT-4 agent 14.41 % mod 78.24 % for mennesker11
OSWorldrigtige desktop- og OS-opgaver på tværs af applikationer369 opgaver; bedste model 12.24 %, mennesker 72.36 %12
GAIAspørgsmål, der er lette for mennesker, svære for assistants466 spørgsmål; mennesker 92 %, GPT-4 med plugins 15 %13
AgentBenchagent-ræsonnement på tværs af 8 distinkte miljøeret stort gap mellem kommercielle og åbne modeller14
AgentHarmom en agent vil udføre ondsindede flertrinsopgaver110 ondsindede opgaver over 11 skadekategorier15

Tag tabellen frem for en enkelt række. De agentic benchmarks placerer alle mennesker langt over modeller, hvilket er det modsatte af vidensbenchmarks og den bedste én-linjes opsummering af, hvor feltet er; deres tal ældes inden for måneder, så citér dem med datoen, du læste dem; og hver eneste måler en opgave, der ikke er din.

Accuracy er metrikken, du diskuterer. Disse er dem, der afgør, om tingen shipper. Alle fire falder ud af de to hundrede kørsler, der allerede er målt.

Omkostning per løst opgave, ikke per call. Agenten koster $0.001345 per forsøg og $0.005172 per faktisk løst opgave — 3.85 gange mere, fordi tre fjerdedele af forsøgene ikke producerer noget. Latency opfører sig på samme måde: 1,213 ms per forsøg, 4,667 ms per løst opgave. Hvert retry, hvert re-ask, hvert forladt forløb ligger i det andet tal og er usynligt i det første.

En diagnostik, der slår accuracy. I 123 af 200 forsøg svarede agenten uden at kalde et eneste værktøj — den gættede i stedet for at kigge. Split på det:

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]

Intervallerne er ikke i nærheden af at røre hinanden. Det er mere værd end de aggregerede 26 %, fordi det navngiver det, der skal fixes — modellen fejler ikke i at ræsonnere, den fejler i at kigge — og fixet er i harness, ikke modellen. Ét forbehold, som dette kapitel skylder sine egne standarder: de to grupper er forskellige opgaver, ikke de samme opgaver parret, så en del af gap'et kan være, at den springer værktøjerne over netop på de spørgsmål, den finder svære. Splittet er en diagnostik, ikke en kausal påstand.

Human intervention rate er den metrik, en køber spørger efter først: hvilken andel af kørsler stoppede ved en approval, en guardrail eller et handoff. Kapitel 23's typede interruptions gør det tælleligt, og talt per opgavetype og per uge er det dét, der adskiller en agent, der lærer sit job, fra en, der stille bliver til en kø.

Abandonment er den, ingen offline suite kan se: brugeren, der læste svaret, lukkede fanen og udførte opgaven selv. Offline-evaluering er en gate; produktionsevaluering er en kontinuerlig sample af rigtig trafik, scoret på samme grader plus disse fire.

Og en regel arvet fra kapitel 17: assert aldrig på exact output. Assert på egenskaber — valid JSON, korrekt schema, det rigtige værktøj kaldt, et tal inden for tolerance, en påkrævet substring til stede. Exact-match-kolonnen øverst i dette kapitel er det, der sker, når den regel brydes.

At evaluere en leverandør handler ikke kun om accuracy, og dette er anden halvdel af kursets etik, med sin egen overskrift frem for et appendiks.

Mål bias, antag den ikke. Hvad end du tror om en models adfærd på navne, dialekter, køn eller nationaliteter, er det en målbar egenskab ved din pipeline, og instrumentet er det, du allerede har: tag dit golden set, varier kun attributten, sammenlign parret. HELM findes præcis fordi accuracy alene blev rapporteret, hvor bias, toxicity, calibration og robustness også kunne afgøres.8 En leverandørs model card er et udgangspunkt, ikke bevis om dine inputs.

Contamination er også et leverandørspørgsmål. Proben ovenfor er grunden til at spørge, hvad et offentliggjort tal blev målt på, og hvornår modellens data blev cuttet.

Retention, træning og residency, læst 7. september 2026. Disse ændrer sig, så noter datoen ved siden af svaret. Anthropics policy-side siger: »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«, med undtagelse af indhold, du eksplicit indsender som feedback, som gemmes »for up to 5 years«.16 OpenAI's data controls-dokumentation siger, at »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)«, beskriver en default retention på tredive dage for abuse-monitoring logs og tilbyder Zero Data Retention, som »excludes customer content from abuse monitoring logs«, plus konfigurerbar data residency på tværs af en liste af regioner.17

Fire spørgsmål at få på skrift før det første produktionscall, fordi hvert har en forskellig ejer: bruges mine data til træning; hvor længe gemmes de og af hvem; hvor behandles og lagres de; og hvad sker der med alt det, hvis jeg bruger en reseller, en gateway eller en aggregator i stedet for provideren direkte. Det sidste er dér, de fleste overraskelser bor, og intet benchmark vil fortælle dig det.

Du har nu instrumentet: et golden set, du ejer, et interval på hvert tal, en parret test for hver sammenligning, pass^k for de kørsler du ikke viste nogen, en målt judge og en probe for, om en offentlig score betyder noget. Kapitel 23's afsluttende påstand kan nu tjekkes i stedet for at blive hævdet — et harness gør en agent styrbar, ikke korrekt — og at tjekke det tog to hundrede kørsler og otte minutter.

Der er én egenskab ved en agent, som intet af det måler, og det er den, folk bliver fyret for.

Hver opgave i dette kapitels golden set blev skrevet af mig, og hver fil agenten læste, blev skrevet af mig. Intet i den mappe prøvede at gøre noget. Ændr én linje i én fil, agenten får besked på at læse — en linje, der ender med en instruktion adresseret til hvad end der læser den næste gang — og agenten, der scorede 26 %, vil følge den med de samme værktøjer, de samme tilladelser og den samme rene trace, og hvert tal i dette kapitel vil blive stående præcis, hvor det er. En evaluation suite måler, hvor ofte et system når dit mål. Den måler ikke, hvor let en anden kan erstatte det med deres.

Kapitel 30 er det: prompt injection, den dødelige trifecta af private data, untrusted content og external communication, og hvad det koster at give en agent rigtige permissions. Det åbner med den observation, dette kapitel har undgået — at den samme passing score er kompatibel med en agent, der gør præcis det, en angriber skrev i en fil, den fik besked på at læse.


Hvert tal ovenfor blev produceret på én maskine, og intet af det ramte et betalt endpoint. Agenten er kapitel 23's loop med to af dens fire værktøjer over en fem-filers mappe; modellen bag porten er Qwen/Qwen2.5-0.5B-Instruct, eksponeret gennem en lille server med samme form som et chat completions-endpoint præcis som i kapitel 23, men i half precision på én consumer GPU snarere end kapitlets CPU. Omkostninger bruger kapitel 16's satser — $2.00 per million input tokens og $12.00 per million output — anvendt på målte token-optællinger. De gentagne kørsler bruger temperature 0.7 med faste seeds, så hele sættet kan reproduceres; fire-arms-tabellen er greedy. Intervaller er Wilson ved 95 %, parrede sammenligninger er tosidede eksakte fortegnstests over de diskordante par; Wilson-intervallet er kapitel 4's og den eksakte parrede fortegnstest er kapitel 15's, begge genbrugt uændret. De menneskelige labels er mine, anvendt på tres svar under den skrevne regel citeret i teksten. Læs hver størrelsesorden her som en egenskab ved en model med en halv milliard parametre og hver metode som overførbar: en større model flytter alle tallene op og flytter ingen af instrumenterne.

  1. OpenAI, A practical guide to building agents (PDF), side 8, læst 7. september 2026. Kilde til tretrinsrækkefølgen citeret ovenfor og til det ledsagende råd om at »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.« Kapitel 22 og 25 citerer dets definitions- og orchestration-sider.

  2. Schaeffer, R., Miranda, B. og Koyejo, S. Are Emergent Abilities of Large Language Models a Mirage? arXiv:2304.15004 (2023). Argumentet om, at diskontinuerte alt-eller-intet metrics fremstiller tilsyneladende spring fra glatte underliggende forbedringer, med BIG-Bench-auditten citeret i kapitel 10. Deres egen advarsel er værd at gentage: intet i paperet hævder, at store modeller ikke kan vise emergent abilities.

  3. Kalai, A. T., Nachum, O., Vempala, S. S. og Zhang, E. Why Language Models Hallucinate. arXiv:2509.04664 (2025). Argumentet om, at benchmarks, der scorer rigtigt-eller-forkert, belønner gæt frem for abstention, og det foreslåede middel: »modifying the scoring of existing benchmarks that are misaligned but dominate leaderboards, rather than introducing additional hallucination evaluations«. Kapitel 19 citerer det fra retrieval-siden; dette er evaluationssiden af samme påstand.

  4. Yao, S., Shinn, N., Razavi, P. og Narasimhan, K. τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains. arXiv:2406.12045 (2024). Oprindelsen til pass^k, defineret som citeret ovenfor, med begge estimatorer trykt side om side i paperet; abstractets headline er, at state-of-the-art function-calling agents »succeed on <50 % of the tasks, and are quite inconsistent (pass^8 <25 % in retail)«, og afsnit 1 giver gpt-4o-tallene på ≈61 % pass^1 og ≈25 % pass^8 på τ-retail. pass@k-estimatoren, det kontrasterer med, kommer fra 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). Kilde til de tre navngivne biases, til definitionen af konsistens brugt ovenfor (»the percentage of cases where a judge gives consistent results when swapping the order of two assistants«), til fundet om, at »only GPT-4 outputs consistent results in more than 60 % of cases« med 65.0 %, der stiger til 77.5 % few-shot, og til den swap-and-require-agreement-afhjælpning, der citeres verbatim. Dets positive resultat betyder også noget: GPT-4-judges når »an agreement rate exceeding 80 %« med menneskelige evalueringer, »the same level of human-human agreement« — hvilket er grunden til overhovedet at bruge en judge, og grunden til at måle din. 2 3

  6. EleutherAI, Language Model Evaluation Harness, projekt-README læst 7. september 2026: »over 60 standard academic benchmarks for LLMs, with hundreds of subtasks and variants implemented«, og »the backend for Hugging Face's popular Open LLM Leaderboard«. lm_eval-invokationen citeret ovenfor er README'ets eget eksempel. Liang, P. et al., Holistic Evaluation of Language Models, arXiv:2211.09110 (2022), er den anden standard-runner og den bedre læsning om evalueringsdesign.

  7. Hendrycks, D., Burns, C., Basart, S., Zou, A., Mazeika, M., Song, D. og Steinhardt, J. Measuring Massive Multitask Language Understanding. arXiv:2009.03300 (2020). 57 opgaver; abstractets påstand om, at den største GPT-3-model »improves over random chance by almost 20 percentage points on average«, er en nyttig påmindelse om, hvor nylig satureringen af dette benchmark er.

  8. Liang, P. et al. Holistic Evaluation of Language Models. arXiv:2211.09110 (2022). Syv metrics — accuracy, calibration, robustness, fairness, bias, toxicity og efficiency — over 16 kernescenarier og 30 modeller, med dækningsfigurerne citeret ovenfor. Grunden til at læse det er framing: hvilken af de syv du rapporterer, er i sig selv et valg. 2

  9. Chiang, W.-L. et al. Chatbot Arena: An Open Platform for Evaluating LLMs by Human Preference. arXiv:2403.04132 (2024). Over 240K stemmer ved skrivningen, crowdsourcet parvis præference og påstanden om, at »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. og Narasimhan, K. SWE-bench: Can Language Models Resolve Real-World GitHub Issues? arXiv:2310.06770 (2023). 2,294 problemer fra 12 Python-repositories, gradet af repositoriernes egne tests, med tidens bedste model, der løste »a mere 1.96 %«. Kapitel 23 bruger det til den anden betydning af ordet »harness«.

  11. Zhou, S. et al. WebArena: A Realistic Web Environment for Building Autonomous Agents. arXiv:2307.13854 (2023). Fungerende websites på tværs af fire domæner, med en bedste GPT-4 agent på 14.41 % mod 78.24 % for mennesker.

  12. Xie, T. et al. OSWorld: Benchmarking Multimodal Agents for Open-Ended Tasks in Real Computer Environments. arXiv:2404.07972 (2024). 369 opgaver på rigtige operativsystemer; mennesker over 72.36 %, bedste model 12.24 %, med GUI-grounding nævnt som det største gap.

  13. Mialon, G., Fourrier, C., Swift, C., Wolf, T., LeCun, Y. og Scialom, T. GAIA: A Benchmark for General AI Assistants. arXiv:2311.12983 (2023). 466 spørgsmål, mennesker på 92 % mod 15 % for GPT-4 med plugins — den reneste offentliggjorte formulering af gap'et mellem det, der er let for en person, og det, der er let for en assistant.

  14. Liu, X. et al. AgentBench: Evaluating LLMs as Agents. arXiv:2308.03688 (2023). Otte distinkte miljøer og en betydelig forskel mellem topkommercielle modeller og open-source-modeller af sammenlignelig størrelse.

  15. Andriushchenko, M. et al. AgentHarm: A Benchmark for Measuring Harmfulness of LLM Agents. arXiv:2410.09024 (2024). 110 eksplicit ondsindede agent-opgaver (440 med augmentations) over 11 skadekategorier, med fundet om, at førende modeller er »surprisingly compliant with malicious agent requests without jailbreaking«, og at simple universelle jailbreak-templates transfer til agents, mens de bevarer deres capabilities. Det er broen til kapitel 30: et capability benchmark og et harm benchmark måler samme system og er uenige om, hvorvidt det er klar.

  16. Anthropic, Is my data used for model training?, privacy.claude.com, læst 7. september 2026. Citeret verbatim ovenfor, inklusive feedback-undtagelsen og femårs-lagringsvinduet for indsendt feedback.

  17. OpenAI, Your data (API data controls-dokumentation), developers.openai.com, læst 7. september 2026. Kilde til default no-training-erklæringen, tredive dages abuse-monitoring retention, beskrivelsen af Zero Data Retention og listen over eligible endpoints samt data residency-regionerne.


Skabt af

David Vicente Campos

Grundlægger af NeuraLIA Labs og medstifter af MyRealFood

Jeg er dataingeniør fra Universitetet i León. Jeg var med til at stifte MyRealFood, hvor jeg som CTO byggede den app, som millioner af mennesker har brugt til at spise bedre, og jeg grundlagde NeuraLIA Labs, hvor jeg bygger AI-produkter. Her skriver jeg om det, jeg har måttet forstå undervejs, sådan som jeg ville ønske, nogen havde forklaret det for mig.

Mere om forfatteren

Udgivet af NeuraLIA Labs.

Få nye indlæg i din indbakke

AI-nyheder, guides og produktopdateringer — en kort mail, når vi udgiver noget, der er værd at bruge tid på.

Vil du hellere have beskeder? De samme indlæg, her:WhatsApp-fællesskab (åbnes i en ny fane)Telegram-kanal (åbnes i en ny fane)

Kursusindeks

Abstract software decision engine with branching paths, probability nodes, and glowing gates.
jev11 min læsning

Jev AI-modellen er bygget til beslutninger, ikke prosa

TypeSafe AI’s Jev får opmærksomhed, fordi den behandler softwareintelligens som et sandsynlighedsproblem: vælg den rigtige gren, tilføj tillid, og undgå at betale en LLM for at skrive tekst, når kode har brug for en beslutning.

Abstract agent runtime sorting documents, memory blocks and pointer nodes inside a bounded context frame.
context-engineering11 min læsning

Kontekstteknik til langsigtede AI-agenter

Langvarige agenter fejler ikke kun, fordi vinduet er lille. De fejler, når filer, tool-outputs og forældet historik fortrænger den opgave, agenten skulle færdiggøre.

Klar til at lade LIA vælge for dig?

Byg med alle AI-modeller ét sted — kom gratis i gang i dag.