Blog

Sådan læser du benchmarks for AI-kodning og undgår at kåre en papirvinder

Markdown

Hvad HumanEval og SWE-bench måler, og hvordan du bør tage højde for agent-wrapperen, betingelserne, opgavernes aktualitet, variationen og prisen, når du læser ranglister over AI-kodning.

Læs hele artiklen

Kort sagt: Tallet “løser 76 procent af opgaverne” siger næsten ingenting i sig selv. Det afgørende er, hvilket opgavesæt tallet stammer fra, hvilken model og agent-wrapper der blev målt sammen, om opgaverne er nye eller gamle, og hvad det kostede. Uden disse betingelser er procentsatsen god til et reklamebanner, men ikke til at vælge et værktøj.

Nu forklarer jeg i almindelige vendinger, hvad de to vigtigste benchmarks for kodning måler, hvor hagen gemmer sig i tabellerne, og hvordan du kan tjekke enhver rangliste på et minut, før du stoler på den. Historiske benchmarkdefinitioner gennemgås nedenfor. Der gengives ikke noget live, parvist ranglisteøjebliksbillede her; en aktuel score- eller prissammenligning kræver sin egen tilknyttede tabel, dato og konfiguration.

Læs mere om at arbejde med modeller i Ailoot-dokumentationen.

Hvad viser en benchmark-procentsats egentlig?

Vigtigste pointe

En benchmark-procentsats er andelen af opgaver fra et bestemt sæt, som et værktøj har løst med et fungerende resultat under bestemte betingelser. Opgaverne kontrolleres med automatiserede tests: Koden består enten testen eller også gør den ikke; evalueringen er ærlig, og der er ikke noget “mere eller mindre”. Men opgavesættet er altid begrænset og kendt på forhånd, og målebetingelserne er forskellige fra gang til gang. Derfor besvarer tallet spørgsmålet: “Hvor mange af disse opgaver løste værktøjet på denne måde?” Det besvarer ikke spørgsmålet: “Kan det håndtere mit arbejde?”

En benchmark fungerer enkelt. Der findes en færdig liste med programmeringsopgaver. Værktøjet får hver opgave og sender kode tilbage, hvorefter systemet kører automatiserede tests for at se, om løsningen virker. Andelen af opgaver, der består, er procentsatsen, som vises i tabellen.

Styrken er, at evalueringen er objektiv. En test er enten grøn eller rød; ingen giver en score efter et hurtigt skøn. I den forstand er benchmarks mere ærlige end anmeldelser og anbefalinger.

Svagheden er præcis den samme. Opgavesættet er begrænset og kendt på forhånd af alle, også dem, der træner modellerne. Hver måling har sine egne betingelser. Og opgaverne i sættet ligner næsten med sikkerhed ikke det, du arbejder med. Det fører til alle de faldgruber, jeg gennemgår nedenfor. Procentsatsen beskriver et værktøjs adfærd på en andens lukkede liste over opgaver, og den kan ikke overføres direkte til dit projekt.

Hvad måler HumanEval, og hvorfor kan du ikke længere vælge ud fra den?

Vigtigste pointe

HumanEval er et gammelt sæt med 164 små Python-opgaver: Modellerne får en beskrivelse af en funktion, skriver koden, og automatiserede tests kontrollerer opgaven. Da sættet blev udgivet i 2021, løste den første Codex 28,8 procent af opgaverne i ét forsøg. I dag løser stærke modeller næsten alle opgaverne, så sættet kan ikke længere skelne mellem dem. Desuden er opgaverne legetøjsproblemer: Én funktion ud fra en beskrivelse er langt fra arbejdet med et stort projekt i drift. En høj HumanEval-score i 2026 betyder næsten ingenting.

HumanEval blev skabt hos OpenAI og udgivet i 2021 sammen med Codex-modellen. Det indeholder 164 små Python-opgaver: Modellerne får en funktionsbeskrivelse formuleret med ord, skriver funktionens kode, og et sæt automatiserede tests kontrollerer, om den virker korrekt.

Dengang var det godt til at skelne modellerne fra hinanden. I deres egen artikel angiver forfatterne dette tal: Den første Codex løste 28,8 procent af opgaverne i ét forsøg, mens almindelig GPT-3 løste nul.

På HumanEval løser vores model 28,8 procent af problemerne, mens GPT-3 løser 0 procent, og GPT-J løser 11,4 procent.

— OpenAI, artiklen “Evaluating Large Language Models Trained on Code,”

Siden da er modellerne blevet bedre, og i dag løser de stærke modeller næsten alle opgaver i HumanEval. Når alle scorer tæt på 100 procent, holder tabellen op med at skelne mellem noget: Forskellene mellem værktøjerne forsvinder. Det kaldes, at en benchmark er mættet, og HumanEval har været i den tilstand længe.

Den anden fejl er mere alvorlig. Opgaverne er bittesmå: Skriv én funktion ud fra en beskrivelse. Dit virkelige arbejde er anderledes – det foregår i et stort projekt med en historik, hvor du skal forstå andres kode, finde en fejl og undgå at ødelægge kode i nærheden. Der er en afgrund mellem “skriv en funktion fra bunden” og “ret en fejl i et projekt i drift”. Derfor er en høj HumanEval-score i dag ikke længere en grund til at vælge et værktøj; den er snarere et tegn på, at “det grundlæggende er på plads”.

Hvad måler SWE-bench, og hvordan ligger den tættere på virkeligt arbejde?

Vigtigste pointe

SWE-bench bygger på virkelige fejl i populære GitHub-projekter: 2.294 opgaver fra 12 Python-repositorier. Værktøjet får en problembeskrivelse, redigerer koden, og systemet kører tests, der fejlede før ændringen, og som skal bestå efter rettelsen. Det ligger meget tættere på virkeligt arbejde end HumanEval, og derfor bruges det til at sammenligne seriøse værktøjer. Historikken viser tydeligt, hvor svært det er: Den første enkle metode løste færre end to procent af opgaverne.

SWE-bench er grundlæggende anderledes og derfor mere interessant. Den blev skabt ud fra virkelige issues og pull requests i populære GitHub-projekter. Ifølge forfatterne indeholder den 2.294 opgaver fra 12 store Python-repositorier og blev udgivet i oktober 2023.

Evalueringslogikken er ærlig. De tager udgangspunkt i et sted i et projekt, hvor der var en reel fejl, og et sæt tests, der fejlede på det tidspunkt. Værktøjet får problembeskrivelsen og redigerer koden. Derefter køres de samme tests: Hvis de bliver grønne, er opgaven faktisk løst; her stoler ingen på mundtlige løfter.

Vi indsamlede 2.294 opgaver ved at gennemgå pull requests og issues fra 12 populære Python-repositorier. Hver opgave bygger på en pull request, der er knyttet til et issue og ændrer mindst én fil med relation til tests.

— SWE-bench, benchmarkens officielle websted

De første tal viser, hvor meget sværere dette er end legetøjsopgaver. Den første baseline-metode scorede kun 1,96 procent på SWE-bench, og den første agent scorede 12,47 procent. Med andre ord var det svært overhovedet at komme tæt på virkeligt kodningsarbejde, og procentsatserne steg senere, men de begyndte tæt på nul.

Når du i dag ser høje tal på en rangliste over AI-kodningsagenter, stammer de derfor oftest fra SWE-bench eller den menneskeligt verificerede delmængde på 500 opgaver, som kaldes SWE-bench Verified. Det er en rimelig benchmark. Men også den har betingelser, som procentsatsen bliver misvisende uden, og det er det, jeg gennemgår nu.

Selv den mest ærlige benchmark i en tabel er endnu ikke et resultat på dit projekt. Resultatet afhænger af, hvordan du arbejder med værktøjet, og den øverste række på ranglisten siger meget lidt. Kombinationen er vigtig for pålideligt arbejde: AI-klon, Second Brain og kontekstteknik. Ren kontekst forbedrer din personlige succesrate langt mere mærkbart end at vælge en model fra en tabel.

Hvorfor viser den samme model forskellige procentsatser?

Vigtigste pointe

Fordi resultatet afhænger af mere end modellen. Mindst tre ting indgår i enhver måling: selve modellen, agent-wrapperen omkring den og det aktiverede ræsonneringsniveau. En ændring af ræsonneringsindstillingen kan give forskellige rækker for samme model og agent-wrapper. Uden testmiljøets navn, revision, indstillinger og en dateret kilde kan rækkerne ikke underbygge en numerisk sammenligning. Derfor skal du sammenligne de fulde kombinationer; modelnavnet alene betyder ikke ret meget.

Det er her, den mest almindelige fejl ved læsning af benchmarks gemmer sig. Folk læser en tabel som en modelrangliste: Denne model er to procent klogere end den anden. Men tre ting påvirker procentsatsen, og modellen er kun én af dem.

For det første selve modellen. For det andet agent-wrapperen omkring den: et program, der lader modellen navigere i filer, køre kommandoer, læse fejl og omskrive kode. Den samme model i en smart wrapper og en simpel wrapper giver forskellige resultater, fordi wrapperen bestemmer, hvordan modellen arbejder med projektet. For det tredje ræsonneringsniveauet – altså hvor grundigt modellen tænker hvert trin igennem. Jo længere den tænker, desto højere bliver procentsatsen som regel, og desto højere bliver prisen.

En reproducerbar sammenligning skal bevare hele opsætningen. Brug dette som rapporteringsskabelon, ikke en målt rangliste:

FeltKørsel AKørsel B
Model og præcis versionRegistrér den testede versionSamme version til en kontrolleret sammenligning
Agentens testmiljø og revisionRegistrér repository og commitSamme testmiljø og commit
Opgavesæt og scoringRegistrér delmængde og evalueringsrevisionSamme opgavesæt og scoring
RæsonneringsindstillingRegistrér indstilling ARegistrér indstilling B
Resultat og evidensAntal løste, nævner, logs og datoAntal løste, nævner, logs og dato

Så kan du se, hvad der ændrede sig, og om sammenligningen faktisk isolerer ræsonneringsindstillingen. Det tidligere numeriske eksempel uden link behandles ikke som et målt resultat.

Reglen er denne: En god rangliste angiver altid, hvilken model, hvilken wrapper og hvilket ræsonneringsniveau der blev brugt. Hvis tabellen kun indeholder et modelnavn og en procentsats uden at angive wrapperen, er den svær at stole på: Du ved ikke, hvad der faktisk blev målt. Artiklen om ranglisten over AI-kodningsagenter forklarer mere om, hvad kombinationen “model plus wrapper” består af.

Det forklarer også, hvorfor et værktøj med en topplacering nogle gange har svært ved dine opgaver. Benchmarken måler en model i en andens finjusterede wrapper på en andens opgaver. Din wrapper, dit projekt og den kontekst, du giver modellen, er anderledes. I dit projekt afhænger resultatet af konteksten; tabelrækken kommer i anden række.

Hvorfor “udløber” opgaver, og hvad er lækage af træningsdata?

Vigtigste pointe

Modeller trænes på enorme mængder tekst og kode fra internettet, og populære benchmarks er offentligt tilgængelige. Hvis opgaverne og deres løsninger er kommet med i træningsdataene, kan modellen have memoreret dem og blot gengive det, den husker, under evalueringen i stedet for at løse dem. Det kaldes lækage af opgaver ind i træningen. Jo ældre og mere kendt sættet er, desto større er risikoen: En gammel benchmark viser sandsynligvis mere af modellens hukommelse end dens evne til at ræsonnere. Nye og lukkede opgavesæt er mere pålidelige end gamle og offentlige.

Her er hagen, som ikke kan ses i selve tallet, men som underminerer det mere end noget andet. Modeller trænes på enorme mængder tekst og kode indsamlet fra internettet. Og næsten alle benchmarks for kodning er offentligt tilgængelige: opgaverne, testene og referenceløsningerne.

Mekanismen er enkel. Hvis en opgave og dens korrekte løsning kom med i træningsdataene, kan modellen have memoreret dem. Under evalueringen løser den så ikke så meget opgaven, som den henter et velkendt svar fra hukommelsen. Det ligner en løsning, men er kun hukommelse. Det kaldes lækage af træningsdata eller datakontaminering.

Jo ældre og mere populært opgavesættet er, desto større er risikoen. HumanEval har været online siden 2021; det er blevet omskrevet, analyseret og inkluderet i utallige datasæt mange gange. Det ville være mærkeligt at forvente, at en moderne model ikke har “set det”. Derfor er opgavernes aktualitet en selvstændig kvalitetsindikator for en benchmark. Et godt sæt bliver enten opdateret regelmæssigt eller holder nogle opgaver lukkede, så de ikke kan læres på forhånd.

Hvad skal du gøre, når du læser en rangliste? Tjek opgavernes dato, og om sættet bliver opdateret. Hvis en benchmark bygger på friske fejl fra de seneste måneder, fortjener den større tillid. Hvis den består af et sæt fra fem år siden, fortæller en høj procentsats mere om modellens gode hukommelse end om dens evne til at løse din nye opgave. Denne konkrete effekt vises i artiklen om den nye benchmark FrontierCode, hvor opgaverne bevidst var nye.

Hvorfor betyder en forskel på et par procentpoint ofte ingenting?

Vigtigste pointe

Benchmarks varierer: Det samme værktøj på de samme opgaver giver lidt forskellige resultater i forskellige kørsler, fordi modellen ikke altid svarer på samme måde. Derfor forsvinder en forskel på et eller to procentpoint mellem nærliggende rækker på en rangliste ofte i støjen og er ikke tegn på reel overlegenhed. Tjek også prisen separat: Lignende procentsatser kan koste mange gange mere. Sammenlign kun priser, når begge komplette opsætninger, succesrater, faktureringsantagelser og nævneren i prisberegningen er angivet.

En anden ting, der gør topplaceringen i en tabel misvisende, er, at en model ikke svarer på samme måde hver gang. På den samme prompt kan den følge en lidt anden tankegang. Hvis du derfor kører et værktøj flere gange på det samme opgavesæt, svinger procentsatsen en smule fra kørsel til kørsel, og dette udsving kaldes varians.

Den praktiske konklusion er enkel. Når to rækker på en rangliste er én eller to procent fra hinanden, kan forskellen nemt være støj. Det er tåbeligt at jagte et værktøj, der er “to procent bedre”: De kan nemt bytte plads ved næste kørsel. En forskel er værd at betragte som betydelig, når den er mærkbar og holder på tværs af et stort sæt opgaver; et par procentpoint opfylder ikke det krav.

Og det sidste, som næsten altid er vigtigere end selve procentsatsen, er prisen. Lignende resultater kan koste meget forskellige beløb. En prissammenligning kræver begge model- og agentkonfigurationer samt det fulde forbrug på det evaluerede opgavesæt inklusive fejlslagne forsøg. Divider med forsøgte opgaver for pris pr. forsøg eller med løste opgaver for pris pr. løst opgave, og angiv hvilken størrelse du bruger. Artiklen leverer ingen kildeunderbygget parvis prismåling. Læs derfor altid en række på ranglisten sammen med prisen, for procentsatsen siger ikke meget alene. Artiklen om prisen på én løst opgave forklarer, hvordan du sammenligner værktøjer retfærdigt ud fra pris.

Hvordan kan du læse en hvilken som helst benchmarktabel på et minut?

Vigtigste pointe

Stil syv spørgsmål, før du stoler på en rangliste: Hvilket opgavesæt? Er opgaverne nye eller gamle? Hvilken model? Hvilken agent-wrapper? Hvilket ræsonneringsniveau? Hvad koster hver opgave? Hvor stor er variansen? Hvis tabellen ikke besvarer mindst halvdelen af dem, kan du ikke stole på den: Den er sandsynligvis reklame. Tjek også særskilt, om opgaverne ligner dit virkelige arbejde, for selv en ærlig procentsats på en andens opgaver kan ikke overføres til dit projekt.

Lad mig samle det hele i en kort tjekliste. Åbn en hvilken som helst ranglistetabel, og gennemgå disse syv punkter i rækkefølge.

  1. Hvilket opgavesæt? HumanEval er svag i dag; SWE-bench ligger tættere på virkeligt arbejde. Hvis sættet slet ikke er navngivet, er der ingen grund til at læse videre.
  2. Er opgaverne nye eller gamle? Et nyt eller delvist lukket sæt er mere pålideligt end et gammelt, offentligt sæt, som modellen kan have lært.
  3. Hvilken model blev målt? Det præcise navn og den præcise version, ikke et vagt “AI” eller navnet på en modelserie.
  4. Hvilken agent-wrapper? Procentsatsen gælder kombinationen “model plus wrapper”. Hvis wrapperen ikke er angivet, ved du ikke, hvad der blev målt.
  5. Hvilket ræsonneringsniveau? Den samme model på forskellige niveauer giver forskellige procentsatser og forskellige priser.
  6. Hvad koster en opgave? Lignende resultater kan koste flere gange så meget. Læs procentsatsen sammen med prisen.
  7. Hvor stor er variansen? En forskel på et eller to procentpoint mellem rækker er ofte bare støj.

Der er et ottende spørgsmål, og det handler om dig: Ligner opgaverne i sættet dit arbejde? En benchmark med Python-opgaver siger ikke meget til en, der bygger et websted eller en bot med en anden samling værktøjer. Selv et ærligt tal på en andens opgaver garanterer ikke et resultat på dit projekt. Der er kun én pålidelig måde at tjekke det på: Kør et par af dine typiske opgaver gennem værktøjet, og se selv på resultatet. Artiklen om hvordan du tjekker AI-genereret kode forklarer, hvordan du kan se, om koden virker, selvom du ikke selv programmerer.

Hvad skal du så se på til sidst?

Vigtigste pointe

Se på betingelserne under topplaceringen, ikke kun på selve topplaceringen: opgavesættet, og hvor nyt det er, kombinationen “model plus wrapper”, ræsonneringsniveauet, prisen per opgave og omfanget af variansen. Et enkelt tal uden disse betingelser beviser ingenting. Husk også, at selv en ærlig procentsats på en andens opgaver ikke kan overføres til dit projekt: Det sidste ord tilhører altid test med dine egne, virkelige opgaver, og dit resultat afhænger mere af, hvordan du arbejder med værktøjet, end af dets placering på ranglisten.

Hovedpointen i hele artiklen er kort: En placering på ranglisten er en grund til at se nærmere på et værktøj, men du må selv undersøge det nærmere. Et højt tal siger kun, at et værktøj klarede sig rimeligt godt på en bestemt, lukket liste med opgaver under bestemte betingelser. Procentsatsen viser ikke, om de betingelser passer til dig.

Læs derfor, hvad der står under rækken på ranglisten: hvilke opgaver, hvor nye de er, hvilken kombination af model og wrapper der blev brugt, hvilket ræsonneringsniveau, hvad det koster, og om forskellen forsvinder i støjen. En tabel, der ikke besvarer disse spørgsmål, hører hjemme på et reklamebanner. Anmeldelsen hvilket værktøj du skal kode med i 2026 forklarer, hvilket værktøj du overhovedet bør vælge til dine opgaver.

Og her er det, der betyder mere end enhver benchmark. Selv det bedste værktøj på ranglisten har svært ved rodet kontekst og fungerer godt med ren kontekst. Din personlige succesrate afhænger af, hvad du giver modellen, og hvordan du formulerer opgaven; tabelrækken kommer i anden række. Ranglisten hjælper med at sortere de klart svage muligheder fra, men det er dig, der skaber resultatet.

Kilder

En placering på ranglisten sorterer de svage muligheder fra, men resultaterne i dit projekt afhænger af metoden: AI-klon plus Second Brain plus kontekstteknik.

Til det videre arbejde – Ailoot.

Flere oplysninger

Spørgsmål og svar

Hvad skal registreres, før to benchmarkrækker sammenlignes?

Registrér præcis model, agentens testmiljø og revision, ræsonneringsindstillinger, opgavedelmængde, scoringmetode, dato og direkte resultatkilde. Uden disse felter kan en scoreforskel ikke tilskrives én ændret indstilling.

Er pris pr. forsøgt opgave det samme som pris pr. løst opgave?

Nej. Divider samlet evalueringsforbrug med alle forsøgte opgaver for første mål eller med løste opgaver for det andet. Medregn forbrug fra fejlslagne forsøg, og angiv nævneren, før du sammenligner priser.

Alle artikler