Blog

Benchmarki AI do programowania: jak oceniać wyniki

Markdown

Co mierzą HumanEval i SWE-bench oraz jak uwzględniać wrapper agenta, warunki, aktualność zadań, zmienność wyników i koszt podczas czytania rankingów AI do programowania.

Przeczytaj cały artykuł

Krótko mówiąc: liczba „rozwiązuje 76 procent zadań” sama w sobie prawie nic nie mówi. Liczy się to, jaki zestaw zadań dał taki wynik, jaki model i wrapper agenta oceniano razem, czy zadania są nowe czy stare oraz ile to kosztowało. Bez tych warunków procent nadaje się na reklamowy baner, ale nie do wyboru narzędzia.

Wyjaśnię prostym językiem, co mierzą dwa główne benchmarki programistyczne, gdzie kryje się haczyk w tabelach i jak w minutę sprawdzić dowolny ranking, zanim zacznie się na nim polegać. Poniżej omawiam historyczne definicje benchmarków. Nie odtwarzam tutaj aktualnego zapisu pary wyników rankingu; bieżące porównanie wyniku lub kosztu wymaga własnej podlinkowanej tabeli, daty i konfiguracji.

Więcej o pracy z modelami znajdziesz w dokumentacji Ailoot.

Co właściwie pokazuje procentowy wynik benchmarku?

Najważniejsza informacja

Procentowy wynik benchmarku to odsetek zadań z określonego zestawu, które narzędzie wykonało z działającym rezultatem w określonych warunkach. Zadania sprawdza się za pomocą testów automatycznych: kod albo przechodzi test, albo nie; ocena jest jednoznaczna i nie ma tu „mniej więcej”. Jednak zestaw zadań jest zawsze ograniczony i znany z góry, a warunki pomiaru różnią się między narzędziami. Wynik odpowiada więc na pytanie: „Ile z tych zadań narzędzie rozwiązało w ten sposób?”. Nie odpowiada na pytanie: „Czy poradzi sobie z moją pracą?”.

Benchmark działa w prosty sposób. Istnieje gotowa lista zadań programistycznych. Narzędzie otrzymuje każde zadanie i odsyła kod, a system uruchamia testy automatyczne, aby sprawdzić, czy rozwiązanie działa. Odsetek zadań zaliczonych w testach to procent widoczny w tabeli.

Zaletą jest obiektywność oceny. Test albo przechodzi, albo nie; nikt nie wystawia oceny „na oko”. Pod tym względem benchmarki są bardziej rzetelne niż jakiekolwiek recenzje czy opinie użytkowników.

Wada jest dokładnie taka sama. Zestaw zadań jest skończony i znany z góry wszystkim, również osobom trenującym modele. Każdy pomiar ma własne warunki. A zadania z zestawu niemal na pewno różnią się od tego, co robisz. To prowadzi do wszystkich pułapek, które omawiam poniżej. Procent opisuje zachowanie narzędzia na zamkniętej liście zadań przygotowanej przez kogoś innego i nie przekłada się bezpośrednio na twój projekt.

Co mierzy HumanEval i dlaczego nie można już na jego podstawie wybierać narzędzi?

Najważniejsza informacja

HumanEval to stary zestaw 164 niewielkich zadań w Pythonie: modele otrzymują opis funkcji, piszą kod, a testy automatyczne sprawdzają zadanie. Gdy benchmark opublikowano w 2021 roku, pierwszy Codex rozwiązywał 28,8 procent zadań w jednej próbie. Dziś mocne modele wykonują niemal wszystkie, więc zestaw nie pozwala już ich rozróżnić. Poza tym są to zadania zabawkowe: napisanie jednej funkcji na podstawie opisu niewiele ma wspólnego z pracą nad dużym, działającym projektem. Wysoki wynik HumanEval w 2026 roku prawie nic nie znaczy.

HumanEval powstał w OpenAI i został opublikowany w 2021 roku wraz z modelem Codex. Zawiera 164 niewielkie zadania w Pythonie: modelom podaje się opis funkcji słowami, a one piszą jej treść; następnie zestaw testów automatycznych sprawdza, czy działa poprawnie.

W tamtym czasie benchmark dobrze odróżniał modele. W swojej pracy autorzy podają następujący wynik: pierwszy Codex rozwiązał 28,8 procent zadań w jednej próbie, podczas gdy zwykły GPT-3 nie rozwiązał żadnego.

W HumanEval nasz model rozwiązuje 28,8 procent problemów, podczas gdy GPT-3 rozwiązuje 0 procent, a GPT-J 11,4 procent.

— OpenAI, artykuł „Evaluating Large Language Models Trained on Code”

Od tego czasu modele znacznie się rozwinęły i dziś te najmocniejsze wykonują niemal wszystkie zadania HumanEval. Gdy wyniki wszystkich zbliżają się do 100 procent, tabela przestaje cokolwiek rozróżniać: różnice między narzędziami znikają. Zjawisko to nazywa się nasyceniem benchmarku, a HumanEval znajduje się w takim stanie od dawna.

Druga wada jest poważniejsza. Zadania są drobne: trzeba napisać jedną funkcję na podstawie opisu. Rzeczywista praca wygląda inaczej — obejmuje duży projekt z historią, w którym trzeba zrozumieć cudzy kod, znaleźć usterkę i nie zepsuć sąsiedniego kodu. Między „napisz funkcję od zera” a „napraw błąd w działającym projekcie” zieje przepaść. Dlatego wysoki wynik HumanEval nie jest dziś powodem, by wybrać narzędzie; to raczej znak, że „podstawy są opanowane”.

Co mierzy SWE-bench i dlaczego jest bliższy rzeczywistej pracy?

Najważniejsza informacja

SWE-bench opiera się na rzeczywistych usterkach w popularnych projektach GitHub: obejmuje 2 294 zadania z 12 repozytoriów w Pythonie. Narzędzie dostaje opis problemu i modyfikuje kod, po czym system uruchamia testy, które nie przechodziły przed zmianą, a po poprawce powinny przechodzić. To znacznie bliższe rzeczywistej pracy niż HumanEval, dlatego benchmark służy do porównywania poważnych narzędzi. O jego trudności świadczy historia: pierwsze proste podejście rozwiązało mniej niż dwa procent zadań.

SWE-bench jest zasadniczo inny, a przez to ciekawszy. Zbudowano go na podstawie rzeczywistych zgłoszeń i pull requestów w popularnych projektach GitHub. Według autorów zawiera 2 294 zadania z 12 dużych repozytoriów w Pythonie i został opublikowany w październiku 2023 roku.

Zasady oceny są jasne. Wybiera się wersję projektu, w której występowała rzeczywista usterka, oraz zestaw testów, które wtedy nie przechodziły. Narzędzie otrzymuje opis problemu i modyfikuje kod. Następnie uruchamiane są te same testy: jeśli przechodzą, zadanie jest faktycznie rozwiązane; nikt nie polega tu na słownych zapewnieniach.

Zebraliśmy 2 294 zadania, analizując pull requesty i zgłoszenia z 12 popularnych repozytoriów w Pythonie. Każde zadanie opiera się na pull requeście powiązanym ze zgłoszeniem, który zmienia co najmniej jeden plik związany z testami.

— SWE-bench, oficjalna witryna benchmarku

Początkowe wyniki pokazują, o ile trudniejsze są te zadania od zadań zabawkowych. Pierwsze podejście bazowe uzyskało w SWE-bench zaledwie 1,96 procent, a pierwszy agent uzyskał 12,47 procent. Innymi słowy, nawet zbliżenie się do rzeczywistej pracy programistycznej było trudne. Później wyniki wzrosły, ale zaczynały niemal od zera.

Dlatego wysokie liczby widoczne dziś w rankingach agentów AI do programowania najczęściej pochodzą z SWE-bench lub jego zweryfikowanego przez ludzi podzbioru obejmującego 500 zadań, zwanego SWE-bench Verified. To rozsądny benchmark. On również ma jednak warunki, bez których procent może wprowadzać w błąd — o nich opowiem dalej.

Nawet najbardziej rzetelny benchmark w tabeli nie jest jeszcze wynikiem uzyskanym w twoim projekcie. Rezultat zależy od tego, jak pracujesz z narzędziem, a pozycja na szczycie rankingu niewiele przesądza. W pracy, na której można polegać, liczy się połączenie: klon AI, Second Brain i inżynieria kontekstu. Uporządkowany kontekst znacznie wyraźniej poprawia twoją skuteczność niż wybór modelu na podstawie tabeli.

Dlaczego ten sam model uzyskuje różne wyniki procentowe?

Najważniejsza informacja

Ponieważ wynik zależy od czegoś więcej niż sam model. Na każdy pomiar wpływają co najmniej trzy elementy: sam model, otaczający go wrapper agenta oraz włączony poziom rozumowania. Zmiana ustawienia rozumowania może tworzyć różne wiersze dla tego samego modelu i wrappera agenta. Bez nazwy konfiguracji, rewizji, ustawień i datowanego źródła takie wiersze nie uzasadniają porównania liczbowego. Trzeba więc porównywać pełne kombinacje — sama marka modelu nie przesądza o zbyt wielu rzeczach.

Właśnie tu kryje się najczęstszy błąd przy czytaniu benchmarków. Ludzie odczytują tabelę jako ranking modeli: ten model jest o dwa procent lepszy od tamtego. Na wynik procentowy wpływają jednak trzy rzeczy, a model jest tylko jedną z nich.

Po pierwsze, sam model. Po drugie, otaczający go wrapper agenta: program, który pozwala modelowi przeglądać pliki, wykonywać polecenia, odczytywać błędy i przepisywać kod. Ten sam model uzyska różne wyniki w sprytnym i prostym wrapperze, ponieważ to wrapper określa, jak model pracuje z projektem. Po trzecie, poziom rozumowania, czyli to, jak głęboko model analizuje każdy krok. Im dłużej się zastanawia, tym zwykle wyższy jest wynik procentowy — i tym wyższy koszt.

Odtwarzalne porównanie powinno zachować pełną konfigurację. To szablon raportu, a nie zmierzony ranking:

PolePróba APróba B
Model i dokładna wersjaZapisz sprawdzaną wersjęTa sama wersja dla kontrolowanego porównania
Program agenta i rewizjaZapisz repozytorium i commitTen sam program i commit
Zadania i ocenaZapisz podzbiór i rewizję ocenyTe same zadania i ocena
Ustawienie rozumowaniaZapisz ustawienie AZapisz ustawienie B
Wynik i dowodyLiczba rozwiązanych, mianownik, logi, dataLiczba rozwiązanych, mianownik, logi, data

Pozwala to zobaczyć zmianę i sprawdzić, czy porównanie rzeczywiście izoluje ustawienie rozumowania. Wcześniejszy przykład liczbowy bez źródła nie jest traktowany jako zmierzony wynik.

Zasada jest prosta: dobry ranking zawsze podaje, jakiego modelu, wrappera i poziomu rozumowania użyto. Jeśli tabela zawiera tylko nazwę modelu i procent, bez informacji o wrapperze, trudno jej ufać — nie wiadomo, co faktycznie zmierzono. Więcej o tym, z czego składa się kombinacja „model plus wrapper”, wyjaśnia artykuł o rankingu agentów AI do programowania.

To również wyjaśnia, dlaczego narzędzie z czołowym wynikiem czasem ma trudności w twojej pracy. Benchmark mierzy model działający wewnątrz dopracowanego przez kogoś innego wrappera i rozwiązujący zadania kogoś innego. Twój wrapper, projekt i kontekst przekazany modelowi są inne. W twoim projekcie wynik zależy od kontekstu; pozycja w tabeli ma drugorzędne znaczenie.

Dlaczego zadania „tracą aktualność” i czym jest wyciek danych treningowych?

Najważniejsza informacja

Modele są trenowane na ogromnych ilościach tekstu i kodu z internetu, a popularne benchmarki są publicznie dostępne. Jeśli zadania i ich rozwiązania trafiły do danych treningowych, model mógł je zapamiętać, a podczas oceny po prostu odtworzyć zamiast rozwiązywać. To zjawisko nazywa się wyciekiem zadań do danych treningowych. Im starszy i bardziej znany zestaw, tym większe ryzyko: stary benchmark częściej pokazuje pamięć modelu niż jego zdolność rozumowania. Nowe i zamknięte zestawy zadań są bardziej wiarygodne niż stare i publiczne.

Oto haczyk, którego nie widać w samym wyniku, a który podważa go bardziej niż cokolwiek innego. Modele są trenowane na ogromnych ilościach tekstu i kodu zebranych z internetu. Niemal wszystkie benchmarki programistyczne są publicznie dostępne: zadania, testy i rozwiązania referencyjne.

Mechanizm jest prosty. Jeśli zadanie i jego poprawne rozwiązanie trafiły do danych treningowych, model mógł je zapamiętać. Podczas oceny model nie tyle rozwiązuje wtedy zadanie, ile przywołuje z pamięci znaną odpowiedź. Wygląda to na rozwiązanie, ale jest tylko odtworzeniem z pamięci. Zjawisko to nazywa się wyciekiem danych treningowych lub skażeniem danych.

Im starszy i popularniejszy zestaw zadań, tym większe ryzyko. HumanEval jest dostępny w internecie od 2021 roku; wielokrotnie go przepisywano i analizowano, a także niezliczoną liczbę razy włączano do różnych zbiorów danych. Trudno oczekiwać, że współczesny model go „nie widział”. Dlatego aktualność zadań jest osobnym wskaźnikiem jakości benchmarku. Dobry zestaw jest regularnie aktualizowany albo zawiera zadania niepubliczne, których nie można wcześniej poznać.

Co zrobić, czytając ranking? Sprawdź datę zadań i to, czy zestaw jest aktualizowany. Jeśli benchmark opiera się na świeżych usterkach z ostatnich miesięcy, warto mu bardziej ufać. Jeśli to zestaw sprzed pięciu lat, wysoki wynik mówi więcej o dobrej pamięci modelu niż o jego zdolności do rozwiązania twojego nowego zadania. Ten efekt pokazano na konkretnym przykładzie w artykule o świeżym benchmarku FrontierCode, którego zadania celowo były nowe.

Dlaczego różnica kilku punktów procentowych często nic nie znaczy?

Najważniejsza informacja

Wyniki benchmarków są zmienne: to samo narzędzie uruchomione na tych samych zadaniach daje nieco inne rezultaty w kolejnych próbach, ponieważ model nie zawsze odpowiada tak samo. Dlatego różnica jednego lub dwóch punktów między sąsiednimi wierszami rankingu często ginie w szumie i nie świadczy o rzeczywistej przewadze. Sprawdź też osobno cenę: podobne wyniki mogą kosztować wiele razy więcej. Porównuj koszty tylko przy podaniu obu pełnych konfiguracji, skuteczności, założeń rozliczenia i mianownika kosztu.

Kolejny powód, dla którego pierwsze miejsce w tabeli może mylić, jest taki, że model nie odpowiada za każdym razem w ten sam sposób. Na ten sam prompt może zareagować nieco innym tokiem rozumowania. Jeśli więc uruchomisz jedno narzędzie kilka razy na tym samym zestawie zadań, procent wyniku będzie się lekko wahał. To wahanie nazywa się zmiennością.

Praktyczny wniosek jest prosty. Jeśli dwa wiersze rankingu różnią się o jeden lub dwa procenty, ta różnica może być zwykłym szumem. Gonienie za narzędziem, które uzyskało „o dwa procent więcej”, nie ma sensu: przy następnym uruchomieniu kolejność może się łatwo zmienić. Różnicę warto uznać za istotną dopiero wtedy, gdy jest wyraźna i utrzymuje się w dużym zestawie zadań; kilka punktów nie spełnia tego kryterium.

Jest jeszcze ostatnia kwestia, prawie zawsze ważniejsza niż sam procent: cena. Podobne wyniki mogą kosztować bardzo różne kwoty. Porównanie kosztu wymaga obu konfiguracji modelu i programu agenta oraz całych wydatków na oceniany zestaw, w tym nieudanych prób. Podziel przez wszystkie próby dla kosztu próby lub przez rozwiązane zadania dla kosztu rozwiązania i opisz mianownik. Artykuł nie podaje źródłowego pomiaru pary kosztów. Dlatego zawsze czytaj wiersz rankingu razem z ceną, bo sam procent niewiele znaczy. Artykuł o koszcie rozwiązania jednego zadania wyjaśnia, jak uczciwie porównywać koszty narzędzi.

Jak przeczytać dowolną tabelę benchmarku w minutę?

Najważniejsza informacja

Zanim zaufasz rankingowi, zadaj siedem pytań: Jaki zestaw zadań? Czy zadania są nowe czy stare? Jaki model? Jaki wrapper agenta? Jaki poziom rozumowania? Jaki jest koszt zadania? Jak duża jest zmienność? Jeśli tabela nie odpowiada przynajmniej na połowę z nich, nie można jej ufać — prawdopodobnie jest reklamą. Osobno sprawdź, czy zadania z zestawu przypominają twoją rzeczywistą pracę, bo nawet uczciwy wynik na cudzych zadaniach nie przekłada się na twój projekt.

Zbierzmy wszystko w krótką listę kontrolną. Otwórz dowolną tabelę rankingu i po kolei sprawdź te siedem punktów.

  1. Jaki zestaw zadań? HumanEval jest dziś słabym punktem odniesienia; SWE-bench lepiej odzwierciedla rzeczywistą pracę. Jeśli nazwa zestawu w ogóle nie została podana, nie ma sensu czytać dalej.
  2. Czy zadania są nowe czy stare? Nowy lub częściowo zamknięty zestaw jest bardziej wiarygodny niż stary publiczny zestaw, którego model mógł się nauczyć.
  3. Jaki model oceniano? Dokładna nazwa i wersja, a nie ogólne określenie „AI” czy nazwa rodziny modeli.
  4. Jaki wrapper agenta? Procent dotyczy połączenia „model plus wrapper”. Jeśli wrapper nie jest podany, nie wiadomo, co zmierzono.
  5. Jaki poziom rozumowania? Ten sam model daje różne wyniki procentowe i generuje różne koszty na różnych poziomach.
  6. Ile kosztuje zadanie? Podobne wyniki mogą różnić się ceną wielokrotnie. Czytaj procent razem z kosztem.
  7. Jaka jest zmienność? Różnica jednego lub dwóch punktów między wierszami często jest zwykłym szumem.

Jest jeszcze ósme pytanie, które dotyczy ciebie: Czy zadania w zestawie przypominają twoją pracę? Benchmark oparty na zadaniach w Pythonie niewiele mówi osobie, która tworzy stronę internetową lub bota przy użyciu innego zestawu narzędzi. Nawet rzetelny wynik na cudzych zadaniach nie gwarantuje rezultatu w twoim projekcie. Jest tylko jeden wiarygodny sposób, by to sprawdzić: zleć narzędziu kilka typowych dla siebie zadań i samodzielnie oceń wyniki. Artykuł o sprawdzaniu kodu wygenerowanego przez AI wyjaśnia, jak ustalić, czy kod działa, nawet jeśli sam nie programujesz.

Na co ostatecznie zwrócić uwagę?

Najważniejsza informacja

Patrz na warunki stojące za pierwszym miejscem, a nie tylko na samo pierwsze miejsce: zestaw zadań i jego aktualność, kombinację „model plus wrapper”, poziom rozumowania, koszt zadania i skalę zmienności. Sama liczba bez tych warunków niczego nie dowodzi. Pamiętaj też, że nawet uczciwy wynik procentowy na cudzych zadaniach nie przekłada się na twój projekt: ostateczny głos należy do testów na twoich własnych, rzeczywistych zadaniach, a twój wynik zależy bardziej od tego, jak pracujesz z narzędziem, niż od jego miejsca w rankingu.

Główna myśl całego artykułu jest krótka: miejsce w rankingu to powód, by bliżej przyjrzeć się narzędziu, ale dalsze sprawdzanie należy do ciebie. Wysoki wynik mówi tylko, że narzędzie dobrze poradziło sobie z konkretną, zamkniętą listą zadań w określonych warunkach. Procent nie pokazuje, czy te warunki odpowiadają twoim.

Czytaj więc informacje pod wierszem rankingu: jakie zadania wykorzystano, jak są aktualne, jaką kombinację modelu i wrappera zastosowano, jaki był poziom rozumowania, ile to kosztowało i czy różnica nie ginie w szumie. Tabela, która nie odpowiada na te pytania, nadaje się na reklamowy baner. Artykuł którego narzędzia używać do programowania w 2026 roku wyjaśnia, jak wybrać narzędzie do swoich zadań.

Jest jeszcze coś ważniejszego niż jakikolwiek benchmark. Nawet najlepsze narzędzie w rankingu ma problem z chaotycznym kontekstem i dobrze działa z czystym kontekstem. Twoja osobista skuteczność wynika z tego, co przekazujesz modelowi i jak określasz zadanie; wiersz w tabeli ma znaczenie drugorzędne. Ranking pomaga odrzucić wyraźnie słabe opcje, ale to ty tworzysz rezultat.

Źródła

Miejsce w rankingu pozwala odrzucić słabe opcje, ale wyniki w twoim projekcie zależą od metody: klon AI plus Second Brain plus inżynieria kontekstu.

Dalsza praca — Ailoot.

Więcej szczegółów

Pytania i odpowiedzi

Co zapisać przed porównaniem dwóch wierszy benchmarku?

Zapisz dokładny model, program agenta i rewizję, ustawienia rozumowania, podzbiór zadań, metodę oceny, datę i bezpośrednie źródło wyniku. Bez tych pól nie można przypisać różnicy jednemu zmienionemu ustawieniu.

Czy koszt podjętego zadania jest tym samym co koszt rozwiązanego zadania?

Nie. Dla pierwszej miary dziel całe wydatki oceny przez wszystkie podjęte zadania, a dla drugiej przez rozwiązane. Uwzględnij koszt nieudanych prób i przed porównaniem cen opisz mianownik.

Wszystkie artykuły