Miért nem méri már az SWE-bench Verified az élvonalbeli kódolási képességeket?
A SWE-bench Verified egyre szennyezettebb. Az SWE-bench Pro használatát javasoljuk.
Amióta 2024 augusztusában először publikáltuk az SWE-bench Verified benchmarkot, az iparágban elterjedt a használata a modellek autonóm szoftvermérnöki feladatok esetén történő fejlődésének mérésére. A megjelenést követően a SWE-bench Verified erős jelzést adott a képességek fejlődéséről, és az élvonalbeli modellkiadások jelentéseiben szereplő standard mérőszámmá vált. Az e képességek nyomon követése és előrejelzése terén elért előrehaladás szintén fontos része az OpenAI felkészültségi keretrendszerének. Amikor először létrehoztuk a Verified benchmarkot, megpróbáltuk megoldani az eredeti értékelésben felmerülő problémákat, amelyek bizonyos feladatok elvégzését ellehetetlenítették az SWE-bench adathalmazban(új ablakban nyílik meg).
A kezdeti gyors előrelépéseket követően az SWE-bench Verified benchmarkkal kapcsolatos legmagasabb színvonalú fejlesztések lelassultak, az előző 6 hónapban 74,9%-ról 80,9%-ra javulva(új ablakban nyílik meg). Ez felveti a kérdést: a fennmaradó hibák a modell korlátait tükrözik, vagy inkább magának az adathalmaznak a tulajdonságait?
Egy új elemzés során két jelentős problémát azonosítottunk a Verified halmazban, amelyek arra utalnak, hogy a benchmark a mai teljesítményszintek mellett már nem alkalmas az autonóm szoftvermérnöki képességek során elért előrehaladás mérésére az élvonalbeli bevezetések esetén:
- A tesztek a helyes megoldásokra fals negatív eredményt adnak: Auditáltuk az adathalmaznak a modellek által gyakran nem megoldható 27,6%-os részhalmazát, és azt találtuk, hogy az auditált feladatok legalább 59,4%-ában hibás tesztesetek szerepelnek, amelyek fals eredményt adnak a funkcionálisan helyes beküldésekre, hiába próbáltuk ezt javítani az SWE-bench Verified első létrehozásakor.
- Megoldásokon való betanítás: Mivel a nagy élvonalbeli modellek a betanításuk során információkat tanulhatnak meg, fontos, hogy soha ne az őket kiértékelő feladatokon és megoldásokon legyenek betanítva. Ez olyan, mintha a dolgozat előtt megosztanád a diákokkal a közelgő dolgozat feladatait és megoldásait – lehet, hogy nem magolják be a választ, de azok a diákok, akik már látták a válaszokat, biztosan jobban fognak teljesíteni, mint azok, akik nem. A SWE-bench problémák olyan nyílt forráskódú adattárakból származnak, amelyeket sok modellszolgáltató betanítási célokra használ. Elemzésünk során azt találtuk, hogy az összes általunk tesztelt élvonalbeli modell képes volt reprodukálni a valós referenciaként használt eredeti, ember által írt hibajavítást (arany javítás), illetve bizonyos feladatok esetében szó szerint a probléma megállapításának konkrét részleteit, ami arra utal, hogy a betanítás során mindegyikük találkozott már legalább néhány problémával és megoldással.
Azt is megállapítottuk, hogy azok a modellek, amelyek a betanítás során már látták a problémákat, nagyobb valószínűséggel járnak sikerrel, mert rendelkeznek a nem kellő alapossággal meghatározott tesztek teljesítéséhez szükséges további információkkal.
Ez azt jelenti, hogy a SWE-bench Verified teljesítményében elért javulások már nem tükrözik a modellek valós szoftverfejlesztési képességeinek érdemi javulását. Ehelyett egyre inkább azt tükrözik, hogy a modell milyen mértékben volt kitéve a benchmarknak a betanítási idő alatt. Ezért hagytuk abba a SWE-bench Verified pontszámok jelentését, és azt javasoljuk, hogy más modellfejlesztők is kövessék ezt a példát.
Új, nem szennyezett értékeléseket készítünk a kódolási képességek jobb nyomon követéséhez, és úgy gondoljuk, hogy ez egy olyan fontos terület, amellyel érdemes foglalkoznia a tágabb kutatói közösségnek. Amíg ezek nem állnak rendelkezésre, az OpenAI az SWE-bench Pro eredményeinek jelentését javasolja.
Az eredeti SWE-bench(új ablakban nyílik meg) kiértékelést 2023-ban adták ki. Minden probléma a 12 nyílt forráskódú Python-adattár egyikében található, megoldott GitHub-esetből származik, és a hozzá tartozó pull requesttel (PR) van párosítva. Annak eldöntésére, hogy a modell által generált kódmódosítás helyes-e, minden probléma két tesztkészlettel rendelkezik:
- Olyan tesztek, amelyek a módosítatlan kódbázison sikertelen (fail), a hiba megfelelő kijavítása esetén pedig sikeres (pass) eredményt adnak
- Regressziós tesztek, amelyek a javítás előtt és után is sikeresen lefutnak, biztosítva, hogy a nem kapcsolódó funkciók érintetlen maradjanak.
A modell nem látja a teszteket. Kódmódosítást kell előállítania, kizárólag az eredeti hibaleírás szövege és az adattár javítás előtti állapota alapján. Egy probléma megoldását csak akkor tekinti sikeresnek, ha a kódmódosítás alkalmazása után az összes teszt sikeres.
Számos olyan problémát találtunk az értékeléssel kapcsolatban, amelyek a modellek képességeinek alulbecsléséhez vezethetnek.
- Egyes unit tesztek túl-specifikáltak voltak vagy nem illeszkedtek megfelelően a feladathoz, ezért a helyes javítások is sikertelen eredményt adtak.
- Számos feladatleírás alulspecifikált volt, ami több érvényes interpretációt is lehetővé tett – miközben a tesztek csak egy adott értelmezést fedtek le.
- A környezet beállításától (például a Linux, a Windows, vagy a python verziója) függően egyes tesztek tévesen sikertelen eredményt adhatnak
Az SWE-bench Verified benchmarkot 2024-ben hoztuk létre ezeknek a problémáknak a kezelésére. Szakértő szoftvermérnökökkel együttműködve 1 699 SWE-bench problémát tekintettünk át, és kiszűrtük azokat, amelyek ezeket a hibákat tartalmazták. Minden problémát három szakértő vizsgált át egymástól függetlenül. Ez a felülvizsgálati folyamat eredményezte az SWE-bench Verified benchmarkot, egy gondosan összeállított, 500 problémából álló készletet.
Bár a SWE-bench Verified nagy előrelépés a kezdeti verzióhoz képest, maradtak még benne problémák. 138 SWE-bench Verified problémát auditáltunk, amelyeket az OpenAI o3 modell 64 egymástól független futtatás során nem tudott konzisztensen megoldani. Minden egyes esetet egymástól függetlenül legalább hat tapasztalt szoftvermérnök vizsgált felül. Ha egy szakértő problémát jelzett, azt egy további csapat újraellenőrizte.
Azt találtuk, hogy a 138 probléma 59,4%-a lényeges hibákat tartalmazott a tesztdizájnban és/vagy a feladatleírásban, ami rendkívüli módon megnehezítette vagy akár lehetetlenné is tette a megoldásukat még a legképzettebb modell vagy ember számára is.
- Az auditált feladatok 35,5%-a szigorú teszteseteket használ, amelyek konkrét implementációs részleteket kényszerítenek ki, és emiatt sok funkcionálisan helyes megoldást érvénytelenítenek; ezeket szűk teszteseteknek nevezzük.
- Az auditált feladatok 18,8%-ában olyan tesztek találhatók, amelyek a feladatleírásban nem szereplő további funkcionalitást ellenőriznek; ezeket tág teszteseteknek nevezzük.
- A fennmaradó 5,1% feladat vegyes jellegű problémákat tartalmazott, amelyek nem illeszkedtek jól ebbe a taxonómiába.
Az első hibamód egy szemléltető példája a pylint-dev__pylint-4551(új ablakban nyílik meg), ahol a PR egy új `get_annotation` függvényt vezet be az átfogó megoldás részeként. Ez a függvénynév nem szerepel a probléma leírásában, hanem közvetlenül a tesztek importálják. Bár egyes modellek intuitívan létrehozhatnak egy ilyen függvényt, nem feltétlenül szükséges pontosan ezzel a névvel definiált függvényt implementálni a probléma helyes megoldásához. Sok érvényes megoldás importálási hibák miatt elbukik a teszteken.
Problémaleírás
PR-tesztrészlet
PR teszthibák (az olvashatóság kedvéért csonkolva)
Példa a túl széles tesztesetekre: sympy__sympy-18199(új ablakban nyílik meg). Ez a feladat egy pull requestből (PR) származik, amely az `nthroot_mod` függvény három különálló problémáját kezelte, nevezetesen a #17373(új ablakban nyílik meg), a #17377(új ablakban nyílik meg) és a #18212(új ablakban nyílik meg) számú problémákat. A SWE-bench Verified feladatleírása azonban csak a következő végső hibát fedi le: #18212(új ablakban nyílik meg). Ez inkonzisztenciát okoz: a PR tesztjei mindhárom problémát lefedik, miközben a leírás csak az egyiket részletezi. A futtatásaink során a modellek gyakran helyesen implementálják a leírt javítást, majd elbuknak azokon a teszteken, amelyek a másik két probléma implementációját ellenőrzik.
Eredeti PR-leírás (a GitHub PR-ből)
#18212 számú probléma leírása
SWE-bench Verified task problémaleírása (csak #18212-től):
A SWE-bench Verified és az adattárak (kódbázisok és kiadási megjegyzések) egyaránt nyílt forráskódúak, és széles körben használt és aktívan tárgyalt anyagok, ami megnehezíti a szennyeződés elkerülését a modellfejlesztők számára.
Először a saját modelljeinkben észleltük a szennyeződés jeleit. Például a GPT‑5.2 megoldott 31 olyan feladatot, amit szinte megoldhatatlanként tartottunk számon. A django__django-14725(új ablakban nyílik meg) esetében a tesztek egy konkrét új `edit_only` paramétert igényelnek, amelyet a feladatleírás nem ír elő egyértelműen. A probléma megoldása közben a GPT‑5.2 a gondolatmenetében arra utal, hogy vannak információi a kiadási megjegyzésekről, amelyek a kódbázis változásait részletezik, és helyesen azonosítja, hogy az `edit_only` paramétert a Django 4.1 modellben került bevezetésre.
GPT‑5.2 CoT
Annak érdekében, hogy szélesebb körben felmérjük, hogy mennyire jelentős a szennyezettség, létrehoztunk egy automatizált „piros csapatos tesztelés” rendszert. Minden egyes SWE-bench Verified kérdésnél a GPT‑5‑öt bíztuk meg azzal, hogy szennyezettség szempontjából tesztelje a GPT‑5.2‑Chat, a Claude Opus 4.5 és a Gemini 3 Flash Preview modelleket. Ezeket a modelleket úgy választottuk ki, hogy kizárjuk az érvelési modelleket, ugyanakkor elismerjük, hogy a közöttük meglévő képességbeli különbség valószínűleg nem elhanyagolható.
A szennyezettség vizsgálatához a GPT‑5 megkapta az SWE-bench Verified feladat azonosítóját, leírását, az arany javítást és a PR-teszteket. 15 körön keresztül engedélyeztük a GPT‑5‑nek, hogy változtassa a rendszer/fejlesztői utasítást, a felhasználói utasítást és az asszisztens előzetes kitöltését, valamint a különböző előhívási stratégiákat. Minden forduló után egy bírói modell megcímkézte, hogy mennyi új, feladatspecifikus információ jelent meg, és minden választ a szennyeződés súlyossága szerint „none” (nincs) értéktől a „strong” (erős) értékig osztályozott. A GPT‑5 számára engedélyezett volt, hogy a korábbi fordulók alapján adaptálja a stratégiáját, és iteratív módon visszanyerje a feladatspecifikus részleteket. A súlyos szennyezettség minden egyes példájánál egy másik bíróval ellenőriztük, hogy a GPT‑5 nem szivárogtatott-e túl sok információt a célmodell felé. Végül manuálisan is átnéztük az ebben a bejegyzésben szereplő átiratokat alkotó „strong” példákat.
Az alábbiakban példák láthatók a különböző modellszolgáltatók közötti jelentős szennyezettségre.
A feladatleírásból származó rövid részlet alapján a GPT‑5.2 a pontos arany javítást adja meg kimenetként. Különösen fontos, hogy ismeri a pontos osztály- és metódusnevet, valamint a bevezetett új korai visszatérési feltételt: `if username is None or password is None`.
Feladatazonosító: django__django-11451(új ablakban nyílik meg)
Szennyezettség feltárása
Arany javítás
Az Opus nemcsak a PR által bevezetett pontos, négysoros funkcionális módosítást képes felidézni, a konkrét fájlnévvel és érintett metódussal együtt, hanem szó szerint idézi a diff részét képező inline megjegyzéseket is.
Feladatazonosító: astropy__astropy-13236(új ablakban nyílik meg)
Szennyezettség feltárása
Arany javítás
A Gemini 3 Flash, amikor a feladatról az azonosítón kívül semmilyen további információt nem kap, szó szerint vissza tudja adni a feladatleírás és az arany javítás részleteit. Ez magában foglalja a felhasználónév-ellenőrzéshez használt új regex képletet és a módosítás pontos sorszámait.
Feladatazonosító: django__django-11099(új ablakban nyílik meg)
Szennyezettség feltárása
Arany javítás
Az SWE-bench Verified auditjából két általánosabb tanulság rajzolódik ki a kiértékelés tervezésére vonatkozóan. Először is, a nyilvánosan elérhető anyagokból származó benchmarkok szennyezettségi kockázatot hordoznak, mivel a betanítási adatoknak való kitettség észrevétlenül megnövelheti a pontszámokat. Ha a benchmark összeállításához nyilvánosan feltérképezett adatokat használnak, a modell fejlesztőinek további teszteket kell végezniük a szennyeződés ellenőrzésére. A nyilvánosan közzétett benchmarkok, sőt azok megoldásai is, bekerülhetnek a betanítási adatokba. Alapos körültekintéssel kell eljárni mind az adathalmazok publikálásának módjában (pl. jelszóval védett hozzáférés), mind a betanítási adatok szűrésében (pl. a canary string alapú szűrés következetes alkalmazása).
Másodszor, az automatizált kiértékelés nehéz feladat; az ideális teszteseteknek teljes körűen igazolniuk kell a helyes működést, miközben függetlennek kell maradniuk a nem lényeges implementációs részletekkel szemben, és egyben ellenállónak kell lenniük a kerülő jellegű megoldások esetében. Ezek a problémák eleve összetettek és nehezen megoldhatók. Az ilyen problémák kiszűrése több, kiterjedt humán annotációs kampányt igényelt.
Ezeket a megállapításokat beépítettük a legutóbbi értékelési folyamataikba. Az elmúlt hónapokban úgy döntöttünk, hogy a SWE-Bench Pro nyilvános adatszeletéből származó eredményeket jelentjük. Azt javasoljuk, hogy más modellfejlesztők is tegyenek így. A SWE-bench Pro nem tökéletes, de a tapasztalatok alapján úgy tűnik, kevésbé kitett a szennyezettségi problémáknak. Szennyezési folyamatunk során találtunk néhány szennyeződési esetet, de ezek az esetek az SWE-bench Verified által végzett vizsgálatoknál lényegesen ritkábbak és kevésbé kirívóak voltak, és egyetlen modell sem tudott teljes, szó szerinti arany javítást létrehozni.
Továbbra is invesztálunk eredeti, privát módon készített benchmarkokba, és arra kérjük az iparági és akadémiai szereplőket, hogy tegyenek hasonlóan. A GDPVal esetében a feladatokat területi szakértők privát módon készítik, ami csökkenti az expozíciós kockázatot, a megoldásokat pedig képzett felülvizsgálók értékelik holisztikus szemléletben. Ez a megközelítés erőforrás-igényes, de egyre inkább szükséges a valódi képességfejlődés méréséhez.


