Näin luet AI-koodausbenchmarkeja ja vältät paperilla parhaan valitsemisen
MarkdownMitä HumanEval ja SWE-bench mittaavat ja miten agentin wrapper, olosuhteet, tehtävien ajantasaisuus, vaihtelu ja kustannukset kannattaa huomioida AI-koodausrankingeja luettaessa.
Lue koko artikkeli
Lyhyesti: luku ”ratkaisee 76 prosenttia tehtävistä” ei kerro yksinään juuri mitään. Olennaista on, millä tehtäväjoukolla tulos saatiin, mikä malli ja agentin wrapper arvioitiin yhdessä, ovatko tehtävät uusia vai vanhoja ja kuinka paljon arviointi maksoi. Ilman näitä ehtoja prosenttiluku sopii mainosbanneriin, mutta ei työkalun valintaan.
Seuraavaksi selitän selkokielellä, mitä kaksi tärkeintä koodausbenchmarkia mittaavat, missä taulukoiden sudenkuoppa piilee ja miten voit tarkistaa minkä tahansa rankingin minuutissa ennen kuin luotat siihen. Alla käsitellään historiallisia benchmark-määritelmiä. Tässä ei toisteta ajantasaista paritettua tulostaulukkotallennetta. Nykyinen piste- tai kuluvertailu tarvitsee oman linkitetyn taulukon, päivämäärän ja kokoonpanon.
Lue lisää mallien kanssa työskentelystä Ailoot-dokumentaatiosta.
Mitä benchmarkin prosenttiluku oikeastaan kertoo?
Tärkein huomio
Benchmarkin prosenttiluku kertoo, kuinka suuren osuuden tietyn joukon tehtävistä työkalu suoritti toimivalla tuloksella määrätyissä olosuhteissa. Tehtävät tarkistetaan automaattisilla testeillä: koodi joko läpäisee testin tai ei läpäise; arviointi on rehellistä, eikä tulos ole ”sinne päin”. Tehtäväjoukko on kuitenkin aina rajallinen ja kaikkien tiedossa etukäteen, ja mittausolosuhteet vaihtelevat. Siksi luku vastaa kysymykseen ”Kuinka monta näistä tehtävistä työkalu ratkaisi tällä tavalla?” Se ei vastaa kysymykseen ”Selviääkö se minun työstäni?”
Benchmark toimii yksinkertaisesti. Käytössä on valmis lista ohjelmointitehtäviä. Työkalu saa jokaisen tehtävän ja palauttaa koodia, minkä jälkeen järjestelmä suorittaa automaattiset testit ja tarkistaa, toimiiko ratkaisu. Läpäistyjen tehtävien osuus on taulukossa näkyvä prosenttiluku.
Vahvuutena on arvioinnin objektiivisuus. Testi on joko vihreä tai punainen; kukaan ei anna arvosanaa silmämääräisesti. Tässä mielessä benchmarkit ovat rehellisempiä kuin mitkään arvostelut tai suositukset.
Heikkous on aivan sama. Tehtäväjoukko on rajallinen ja kaikkien tiedossa etukäteen, myös mallien kouluttajien. Jokaisessa mittauksessa on omat ehtonsa. Ja joukon tehtävät ovat lähes varmasti erilaisia kuin sinun työsi. Tästä syntyvät kaikki jäljempänä käsittelemäni sudenkuopat. Prosenttiluku kuvaa työkalun toimintaa jonkun toisen suljetussa tehtävälistassa, eikä tulosta voi siirtää suoraan sinun projektiisi.
Mitä HumanEval mittaa, ja miksi sen perusteella ei voi enää valita?
Tärkein huomio
HumanEval on vanha joukko, jossa on 164 pientä Python-tehtävää: malleille annetaan funktion kuvaus, ne kirjoittavat koodin, ja automaattiset testit tarkistavat tehtävän. Kun HumanEval julkaistiin vuonna 2021, ensimmäinen Codex ratkaisi yhdellä yrityksellä 28.8 prosenttia tehtävistä. Nykyään vahvat mallit suoriutuvat lähes kaikista tehtävistä, joten benchmark ei enää erottele niitä toisistaan. Lisäksi tehtävät ovat leikkiongelmia: yhden funktion kirjoittaminen kuvauksen pohjalta on kaukana työskentelystä suuren, käytössä olevan projektin parissa. Korkea HumanEval-tulos vuonna 2026 ei juuri merkitse mitään.
HumanEval luotiin OpenAI:ssa ja julkaistiin vuonna 2021 Codex-mallin yhteydessä. Siinä on 164 pientä Python-tehtävää: malleille annetaan sanallinen funktion kuvaus, ne kirjoittavat funktion rungon, ja automaattisten testien joukko tarkistaa, toimiiko se oikein.
Tuolloin benchmark erotteli malleja hyvin. Tekijöiden omassa artikkelissa annetaan tämä tulos: ensimmäinen Codex ratkaisi yhdellä yrityksellä 28.8 prosenttia tehtävistä, kun tavallinen GPT-3 ei ratkaissut yhtäkään.
HumanEvalissa mallimme ratkaisee 28.8 prosenttia ongelmista, kun taas GPT-3 ratkaisee 0 prosenttia ja GPT-J 11.4 prosenttia.
Sen jälkeen mallit ovat kehittyneet, ja nykyään vahvat mallit suoriutuvat lähes kaikista HumanEval-tehtävistä. Kun kaikkien tulos on lähellä 100 prosenttia, taulukko ei enää erottele mitään: työkalujen väliset erot katoavat. Tätä kutsutaan benchmarkin saturoitumiseksi, ja HumanEval on ollut siinä tilassa jo pitkään.
Toinen puute on vakavampi. Tehtävät ovat hyvin pieniä: kirjoita yksi funktio kuvauksen perusteella. Todellinen työsi on erilaista – se tapahtuu suuressa, pitkän historian omaavassa projektissa, jossa sinun on ymmärrettävä jonkun toisen koodia, löydettävä virhe ja vältettävä viereisen koodin rikkomista. ”Kirjoita funktio alusta asti” ja ”korjaa virhe käytössä olevassa projektissa” ovat kaukana toisistaan. Siksi korkea HumanEval-tulos ei ole nykyään syy valita työkalua; se kertoo lähinnä, että ”perusteet ovat hallussa”.
Mitä SWE-bench mittaa, ja miten se vastaa paremmin todellista työtä?
Tärkein huomio
SWE-bench perustuu suosittujen GitHub-projektien todellisiin virheisiin: 2,294 tehtävää 12 Python-repositoriosta. Työkalulle annetaan ongelman kuvaus, se muokkaa koodia, ja järjestelmä suorittaa testit, jotka epäonnistuivat ennen muutosta ja joiden pitäisi läpäistä testit korjauksen jälkeen. Tämä vastaa todellista työtä paljon paremmin kuin HumanEval, minkä vuoksi benchmarkia käytetään vakavasti otettavien työkalujen vertailuun. Sen vaikeus näkyy historiasta: ensimmäinen yksinkertainen lähestymistapa ratkaisi alle kaksi prosenttia tehtävistä.
SWE-bench on pohjimmiltaan erilainen ja siksi kiinnostavampi. Se koottiin suosittujen GitHub-projektien todellisista issueista ja pull requesteista. Tekijöiden mukaan se sisältää 2,294 tehtävää 12 suuresta Python-repositoriosta, ja se julkaistiin lokakuussa 2023.
Arviointitapa on rehellinen. He ottavat projektista kohdan, jossa oli todellinen virhe, sekä testijoukon, joka epäonnistui tuolloin. Työkalu saa ongelman kuvauksen ja muokkaa koodia. Sitten samat testit suoritetaan uudelleen: jos ne menevät läpi, tehtävä on todella ratkaistu; täällä kukaan ei luota sanallisiin lupauksiin.
Keräsimme 2,294 tehtävää käymällä läpi pull requesteja ja issueita 12 suositussa Python-repositoriossa. Jokainen tehtävä perustuu pull requestiin, joka liittyy issueen ja muuttaa vähintään yhtä testaukseen liittyvää tiedostoa.
Ensimmäiset tulokset osoittavat, kuinka paljon leikkiongelmia vaikeampia nämä tehtävät ovat. Ensimmäinen baseline-lähestymistapa sai SWE-benchissä vain 1.96 prosenttia, ja ensimmäinen agentti sai 12.47 prosenttia. Toisin sanoen todellisen koodaustyön lähestyminenkin oli vaikeaa. Prosenttiluvut kasvoivat myöhemmin, mutta lähtötaso oli lähes nolla.
Siksi nykyisissä AI-koodausagenttien rankinglistoissa näkyvät korkeat luvut perustuvat useimmiten SWE-benchiin tai sen 500 tehtävän ihmisvarmennettuun osajoukkoon, jonka nimi on SWE-bench Verified. Se on kohtuullinen benchmark. Siihenkin liittyy kuitenkin ehtoja, joita ilman prosenttiluku on harhaanjohtava, ja käsittelen niitä seuraavaksi.
Taulukon rehellisinkään benchmark ei vielä kerro tuloksesta sinun projektissasi. Lopputulos riippuu siitä, miten työskentelet työkalun kanssa, eikä rankingin kärkirivi kerro juuri mitään. Luotettavan työn kannalta ratkaiseva on yhdistelmä: AI-klooni, Second Brain ja kontekstisuunnittelu. Puhdas konteksti parantaa henkilökohtaista onnistumisprosenttiasi paljon näkyvämmin kuin mallin valitseminen taulukosta.
Miksi sama malli saa eri prosenttiluvun?
Tärkein huomio
Koska tulokseen vaikuttaa muukin kuin malli. Jokaisessa mittauksessa on mukana vähintään kolme asiaa: itse malli, sen ympärillä oleva agentin wrapper ja käyttöön valittu päättelytaso. Päättelyasetuksen muuttaminen voi tuottaa eri rivit samalle mallille ja agentin suoritusympäristölle. Ilman suoritusympäristön nimeä, versiota, asetuksia ja päivättyä lähdettä rivit eivät tue numeerista vertailua. Siksi sinun on verrattava kokonaisia yhdistelmiä; pelkkä mallin nimi ei ratkaise juuri mitään.
Tässä piilee yleisin benchmarkien lukemiseen liittyvä virhe. Ihmiset lukevat taulukkoa mallien rankinglistana: tämä malli on kaksi prosenttia fiksumpi kuin tuo toinen. Prosenttilukuun vaikuttaa kuitenkin kolme asiaa, ja malli on niistä vain yksi.
Ensimmäinen on itse malli. Toinen on sen ympärillä oleva agentin wrapper: ohjelma, jonka avulla malli voi selata tiedostoja, suorittaa komentoja, lukea virheitä ja kirjoittaa koodia uudelleen. Sama malli älykkäässä wrapperissa ja yksinkertaisessa wrapperissa saa erilaisia tuloksia, koska wrapper määrittää, miten malli työskentelee projektin kanssa. Kolmas on päättelytaso eli se, kuinka perusteellisesti malli miettii jokaisen vaiheen. Mitä kauemmin se miettii, sitä korkeampi prosenttiluku yleensä on ja sitä suuremmat kustannukset.
Toistettavan vertailun pitää säilyttää koko kokoonpano. Käytä tätä raportointimallina, älä mitattuna tulostaulukkona:
| Kenttä | Ajo A | Ajo B |
|---|---|---|
| Malli ja täsmällinen versio | Kirjaa testattu versio | Sama versio kontrolloidussa vertailussa |
| Agentin suoritusympäristö ja versio | Kirjaa repositorio ja commit | Sama suoritusympäristö ja commit |
| Tehtäväjoukko ja pisteytys | Kirjaa osajoukko ja arviointiversio | Sama tehtäväjoukko ja pisteytys |
| Päättelyasetus | Kirjaa asetus A | Kirjaa asetus B |
| Tulos ja näyttö | Ratkaistujen määrä, nimittäjä, lokit, päivämäärä | Ratkaistujen määrä, nimittäjä, lokit, päivämäärä |
Näin näet, mikä muuttui ja eristääkö vertailu todella päättelyasetuksen. Aiemmin linkittämätöntä numeroesimerkkiä ei käsitellä mitattuna tuloksena.
Sääntö on tämä: hyvä ranking kertoo aina, mitä mallia ja wrapperia käytettiin sekä millä päättelytasolla. Jos taulukossa on vain mallin nimi ja prosenttiluku eikä wrapperia mainita, siihen on vaikea luottaa: et tiedä, mitä oikeastaan mitattiin. Artikkelissa AI-koodausagenttien rankingista kerrotaan lisää siitä, mistä ”malli plus wrapper” -yhdistelmä koostuu.
Tämä selittää myös, miksi huippupisteet saanut työkalu voi tuottaa sinulle vaikeuksia. Benchmark mittaa mallia jonkun toisen hiotussa wrapperissa ja jonkun toisen tehtävillä. Sinun wrapperisi, projektisi ja mallille antamasi konteksti ovat erilaisia. Projektissasi tulos riippuu kontekstista; taulukon rivi on toissijainen.
Miksi tehtävät ”vanhenevat”, ja mitä koulutusdatan vuotaminen tarkoittaa?
Tärkein huomio
Malleja koulutetaan valtavilla määrillä internetistä kerättyä tekstiä ja koodia, ja suositut benchmarkit ovat julkisesti saatavilla. Jos tehtävät ja niiden ratkaisut ovat päätyneet koulutusdataan, malli on voinut opetella ne ulkoa ja toistaa arvioinnissa muistamansa sen sijaan, että ratkaisisi tehtävät. Tätä kutsutaan tehtävien vuotamiseksi koulutusdataan. Mitä vanhempi ja tunnetumpi joukko on, sitä suurempi riski: vanha benchmark kertoo todennäköisemmin mallin muistista kuin päättelykyvystä. Uudet ja suljetut tehtäväjoukot ovat luotettavampia kuin vanhat ja julkiset.
Tässä on se kuvasta näkymätön ansa, joka heikentää luotettavuutta enemmän kuin mikään muu. Malleja koulutetaan valtavilla määrillä internetistä kerättyä tekstiä ja koodia. Lähes kaikki koodausbenchmarkit ovat julkisesti saatavilla: tehtävät, testit ja malliratkaisut.
Mekanismi on yksinkertainen. Jos tehtävä ja sen oikea ratkaisu päätyivät koulutusdataan, malli on voinut opetella ne ulkoa. Arvioinnin aikana se ei silloin niinkään ratkaise tehtävää kuin hakee muististaan tutun vastauksen. Se näyttää ratkaisulta, mutta on pelkkää muistamista. Tätä kutsutaan koulutusdatan vuotamiseksi tai datakontaminaatioksi.
Mitä vanhempi ja suositumpi tehtäväjoukko on, sitä suurempi riski. HumanEval on ollut verkossa vuodesta 2021; sitä on kirjoitettu uudelleen ja analysoitu ja se on sisällytetty lukemattomiin dataset-aineistoihin monta kertaa. Olisi outoa odottaa, ettei moderni malli olisi ”nähnyt sitä”. Siksi tehtävien ajantasaisuus on benchmarkin erillinen laatumittari. Hyvää tehtäväjoukkoa päivitetään säännöllisesti tai osa tehtävistä pidetään suljettuina, jotta niitä ei voi opetella etukäteen.
Mitä sinun pitäisi tehdä rankingia lukiessasi? Tarkista tehtävien ajankohta ja se, päivitetäänkö joukkoa. Jos benchmark perustuu viime kuukausien tuoreisiin virheisiin, siihen kannattaa luottaa enemmän. Jos se perustuu viisi vuotta vanhaan tehtäväjoukkoon, korkea prosenttiluku kertoo enemmän mallin hyvästä muistista kuin kyvystä ratkaista uusi tehtäväsi. Tämä ilmiö havainnollistetaan konkreettisesti artikkelissa, joka käsittelee uutta FrontierCode-benchmarkia: sen tehtävät olivat tarkoituksella uusia.
Miksi parin prosenttiyksikön ero ei usein merkitse mitään?
Tärkein huomio
Benchmarkeissa esiintyy vaihtelua: sama työkalu saa samoilla tehtävillä hieman erilaisia tuloksia eri ajokerroilla, koska malli ei aina vastaa samalla tavalla. Siksi rankingin vierekkäisten rivien yhden tai kahden prosenttiyksikön ero hukkuu usein kohinaan eikä osoita todellista paremmuutta. Tarkista hinta erikseen: samankaltaiset prosenttiluvut voivat maksaa moninkertaisesti eri verran. Vertaa kustannuksia vain, kun molemmat kokonaiset kokoonpanot, onnistumisasteet, laskutusoletukset ja kustannuksen nimittäjä on kerrottu.
Rankingtaulukon kärkipaikkaa voi tehdä harhaanjohtavaksi myös se, ettei malli vastaa joka kerta samalla tavalla. Sama prompt voi johtaa hieman erilaiseen päättelypolkuun. Kun ajat samaa työkalua samalla tehtäväjoukolla useita kertoja, prosenttiluku siis vaihtelee hieman ajosta toiseen. Tätä vaihtelua kutsutaan varianssiksi.
Käytännön johtopäätös on yksinkertainen. Kun kaksi rankingin riviä eroaa yhdellä tai kahdella prosentilla, ero voi helposti johtua kohinasta. Kahden prosentin parannusta tavoittelevan työkalun jahtaaminen on typerää: seuraavalla ajokerralla niiden järjestys voi helposti vaihtua. Eroa kannattaa pitää merkittävänä, kun se on selvä ja säilyy laajassa tehtäväjoukossa; parin prosenttiyksikön ero ei täytä tätä vaatimusta.
Viimeinen asia on lähes aina itse prosenttilukua tärkeämpi: hinta. Samankaltaiset tulokset voivat maksaa hyvin eri verran. Kuluvertailu tarvitsee molemmat malli- ja agenttikokoonpanot sekä koko arvioidun tehtäväjoukon kulut epäonnistuneet yritykset mukaan lukien. Jaa kulut yritetyillä tehtävillä saadaksesi yrityshinnan tai ratkaistuilla tehtävillä saadaksesi ratkaistun tehtävän hinnan. Nimeä käytetty mittari. Artikkeli ei tarjoa lähteistettyä paritettua kustannusmittausta. Lue rankingrivi aina yhdessä hinnan kanssa, sillä prosenttiluku ei kerro juuri mitään yksinään. Artikkelissa yhden ratkaistun tehtävän hinnasta kerrotaan, miten työkaluja voi vertailla kustannusten perusteella reilusti.
Miten luet minkä tahansa benchmarktaulukon minuutissa?
Tärkein huomio
Esitä rankingille seitsemän kysymystä ennen kuin luotat siihen: Mikä tehtäväjoukko? Ovatko tehtävät uusia vai vanhoja? Mikä malli? Mikä agentin wrapper? Mikä päättelytaso? Paljonko yksi tehtävä maksaa? Kuinka suuri varianssi on? Jos taulukko ei vastaa vähintään puoleen näistä kysymyksistä, siihen ei voi luottaa: kyseessä on luultavasti mainos. Tarkista erikseen, muistuttavatko joukon tehtävät todellista työtäsi, sillä edes jonkun toisen tehtävistä saatu rehellinen prosenttiluku ei siirry projektiisi.
Tiivistän nyt kaiken lyhyeksi tarkistuslistaksi. Avaa mikä tahansa rankingtaulukko ja käy nämä seitsemän kohtaa läpi järjestyksessä.
- Mikä tehtäväjoukko? HumanEval on nykyään heikko; SWE-bench vastaa paremmin todellista työtä. Jos joukkoa ei nimetä lainkaan, lukemista ei kannata jatkaa.
- Ovatko tehtävät uusia vai vanhoja? Uusi tai osittain suljettu joukko on luotettavampi kuin vanha julkinen joukko, jonka malli on voinut oppia.
- Mikä malli arvioitiin? Tarkka nimi ja versio, ei epämääräinen ”AI” tai malliperheen nimi.
- Mikä agentin wrapper? Prosenttiluku koskee ”malli plus wrapper” -yhdistelmää. Jos wrapperia ei mainita, et tiedä, mitä mitattiin.
- Mikä päättelytaso? Saman mallin eri tasot tuottavat eri prosenttilukuja ja eri kustannuksia.
- Mitä yksi tehtävä maksaa? Samankaltaisten tulosten hinnat voivat erota moninkertaisesti. Lue prosenttiluku yhdessä hinnan kanssa.
- Kuinka suuri varianssi on? Rankingrivien yhden tai kahden prosenttiyksikön ero on usein pelkkää kohinaa.
On vielä kahdeksas kysymys, ja se koskee sinua: Muistuttavatko joukon tehtävät omaa työtäsi? Python-tehtäviä sisältävä benchmark ei kerro paljon ihmiselle, joka rakentaa verkkosivustoa tai bottia erilaisilla työkaluilla. Edes rehellinen luku jonkun toisen tehtävistä ei takaa tulosta sinun projektissasi. On vain yksi luotettava tapa tarkistaa: aja pari tyypillistä tehtävääsi työkalulla ja tarkastele tulosta itse. Artikkelissa AI:n tuottaman koodin tarkistamisesta selitetään, miten voit arvioida koodin toimivuutta, vaikka et itse ohjelmoi.
Mitä sinun siis kannattaa lopulta tarkastella?
Tärkein huomio
Tarkastele kärkirivin alla olevia ehtoja, älä pelkkää kärkiriviä: tehtäväjoukkoa ja sen ajantasaisuutta, ”malli plus wrapper” -yhdistelmää, päättelytasoa, tehtäväkohtaista kustannusta ja varianssin määrää. Pelkkä luku ilman näitä ehtoja ei todista mitään. Muista myös, ettei edes jonkun toisen tehtävistä saatu rehellinen prosenttiluku siirry sinun projektiisi: lopullisen vastauksen antavat testit omilla todellisilla tehtävilläsi, ja tuloksesi riippuu niissä enemmän siitä, miten työskentelet työkalun kanssa, kuin sen sijoituksesta rankingissa.
Koko artikkelin tärkein ajatus on lyhyt: sijoitus rankingissa on syy tutustua työkaluun tarkemmin, mutta sinun on itse perehdyttävä siihen. Suuri luku kertoo vain, että työkalu suoriutui kohtalaisesti tietystä suljetusta tehtävälistasta tietyissä olosuhteissa. Prosenttiluku ei kerro, sopivatko nämä olosuhteet sinulle.
Lue siis, mitä rankingrivin alla kerrotaan: mitkä tehtävät, kuinka tuoreita ne ovat, mitä malli- ja wrapper-yhdistelmää käytettiin, mikä päättelytaso valittiin, paljonko käyttö maksaa ja hukkuuko ero kohinaan. Taulukko, joka ei vastaa näihin kysymyksiin, kuuluu mainosbanneriin. Arvostelussa millä työkalulla koodata vuonna 2026 kerrotaan, mikä työkalu kannattaa ylipäätään valita omiin tehtäviin.
Tässä on vielä benchmarkejakin tärkeämpi asia. Rankinglistan paras työkalu kompastelee sekavaan kontekstiin ja toimii hyvin selkeässä kontekstissa. Henkilökohtainen onnistumisprosenttisi syntyy siitä, mitä syötät mallille ja miten muotoilet tehtävän; taulukkorivi on toissijainen. Ranking auttaa karsimaan selvästi heikot vaihtoehdot, mutta sinä tuotat tuloksen.
Lähteet
- HumanEval - dataset openai/openai_humaneval (huggingface.co) - 164 Python-tehtävän joukko, joka tarkistetaan automaattisilla testeillä
Ranking-sijoitus karsii heikot vaihtoehdot, mutta projektisi tulokset riippuvat menetelmästä: AI-klooni plus Second Brain plus kontekstisuunnittelu.
Jatkotyöhön – Ailoot.
Lisätietoja
Kysymyksiä tästä oppaasta: Näin luet AI-koodausbenchmarkeja ja vältät paperilla parhaan valitsemisen
Mitä on kirjattava ennen kahden benchmark-rivin vertaamista?
Kirjaa täsmällinen malli, agentin suoritusympäristö ja versio, päättelyasetukset, tehtäväosajoukko, pisteytysmenetelmä, päivämäärä ja suora tuloslähde. Ilman niitä pistemäärän eroa ei voi kohdistaa yhteen muutettuun asetukseen.
Onko hinta yritettyä tehtävää kohti sama kuin hinta ratkaistua tehtävää kohti?
Ei. Jaa arvioinnin kokonaiskulut kaikilla yritetyillä tehtävillä ensimmäistä mittaria tai ratkaistuilla tehtävillä toista varten. Laske epäonnistuneiden yritysten kulut mukaan ja nimeä nimittäjä ennen hintojen vertailua.