Odvtedy Open AI, Anthropic a Google vydali vylepšené verzie svojich modelov a objavili sa noví hráči ako Deepseek a xAI.Mnohé modely sú teraz uvádzané na trh ako schopné písať kód, čo nebolo prípadom predtým. Pred rokom, ukázal, že Large Language Models (LLMs) mohli riešiť algoritmické kódovanie výzvy na Leetcode. Avšak ich schopnosť bola obmedzená na podskupinu známych, "populárnych" problémov. Nové problémy, ktoré nikdy neboli súčasťou ich školiacich dátových súborov, predstavovali ťažkosti. Zatiaľ čo najjednoduchšie boli väčšinou vyriešené modelmi, najťažšie zostali nedosiahnuteľné. my benchmark môj referenčný bod môj referenčný bod Motivačné hodnotenie Existujú existujúce referenčné hodnoty pre LLM na posúdenie ich kódovacích schopností. sa zameriava na riešenie problémov so softvérom v reálnom živote - je založený na problémoch Github existujúcich projektov s otvoreným zdrojovým kódom. SWE-bench SWE-bench SWE-bench referenčné hodnoty lepšie odrážajú algoritmické schopnosti riešenia problémov LLMs. OpenAI testoval modely o1 a o3 na problémy Codeforces a zdieľal podrobné výsledky ( , ), zatiaľ čo ostatní konkurenti to neurobili. To znemožnilo priame porovnanie. Codeforces 1 2 Codeforces Codeforces 1 1 2 2 Toto viedlo k vytvoreniu novej referenčnej hodnoty, ktorá umožňuje priame porovnanie LLM. A nakoniec, prečo to neurobiť len pre zábavu? Výsledky referenčného návrhu Myšlienkou je napodobňovať ľudské akcie pri riešení algoritmických problémov, ale použiť LLM na písanie kódu: Stiahnite si popis problému. Vytvorte výzvu z popisu. Vytvorte kód s LLM. Podajte kód na overenie. Počkajte na výsledky. Stiahnite si popis problému. Vytvorte výzvu z popisu. Generovať kód s LLM. Odoslať kód na overenie. Čakať na výsledky. Tieto kroky by sa mali vykonať pre každý problém v našom testovacom súbore a pre každý LLM. Kvôli jednoduchosti existuje len jeden pokus pre LLM napísať kód na každý problém, bez toho, aby sa opakovala spätná väzba na zlepšenie riešenia.< Br > Prečo Leetcode? Leetcode sa ukázal ako dobrá voľba pre benchmarking z niekoľkých dôvodov: Problémy Leetcode sa používajú v skutočných rozhovoroch pre pozície softvérového inžiniera. Študenti počítačových vied sa naučia riešiť podobné problémy počas svojho vzdelávania. Má on-line sudcu, ktorý môže skontrolovať, či je riešenie správne v sekundách. Mnohé populárne programovacie jazyky sú podporované. Je k dispozícii aj výkonnosť ľudského používateľa pri tomto probléme. Leetcode problémy sa používajú v skutočných rozhovoroch pre pozície softvérového inžiniera. Študenti počítačových vied sa naučia riešiť podobné problémy počas vzdelávania. Má on-line sudcu, ktorý môže skontrolovať, či je riešenie správne za niekoľko sekúnd. Mnohé populárne programovacie jazyky sú podporované. Je k dispozícii aj správa ľudského používateľa o tomto probléme. Ako funguje Leetcode Ak ste sa nikdy nezaoberali konkurenčným programovaním alebo riešením algoritmických výziev, tu je stručné vysvetlenie. Vzhľadom na množinu celých čísel a cieľ celých čísel vráťte indexy dvoch čísel tak, aby sa pridali k cieľu. Môžete predpokladať, že každý vstup by mal presne jedno riešenie a nemôžete použiť ten istý prvok dvakrát. Vzhľadom na množinu celých čísel a cieľ celých čísel vráťte indexy dvoch čísel tak, aby sa pridali k cieľu.Môžete predpokladať, že každý vstup by mal presne jedno riešenie a nemôžete použiť ten istý prvok dvakrát. Súťažiaci programátor musí napísať kúsok kódu, ktorý tento problém vyrieši.Na začiatok je tu „snippet“ – nedokončená funkcia, s názvom a argumentmi, ale prázdnym telom: class Riešenie: def twoSum(self, nums: List[int], target: int) -> List[int]: # váš kód tu class Riešenie: def twoSum(self, nums: List[int], target: int) -> List[int]: # váš kód tu Zvyčajne sa v popise uvádza niekoľko vzoriek vstupu a výstupu (testovacie prípady): Input: čísla = [2,7,11,15], cieľ = 9 Výstup: [0,1] Input: čísla = [2,7,11,15], cieľ = 9 Výstup: [0,1] Problém môže mať desiatky testovacích prípadov, ktoré sú k dispozícii iba pre online rozhodcu.Problém je vyriešený (alebo riešenie sa považuje za prijaté) ak a len ak kód produkuje očakávané výstupy pre všetky testovacie prípady v primeranom čase a pamäťových obmedzeniach.Riešenie môže byť napísané v akomkoľvek programovacom jazyku, ktorý je podporovaný rozhodcom. Každý problém má "miera prijatia", pomer prijatých riešení predložených používateľmi Leetcode.Všimnite si, že jeden používateľ môže odoslať svoj kód neobmedzený počet krát, a každý pokus sa počíta smerom k miere prijatia. Tieto pravidlá neboli vynájdené Leetcode; boli bežne používané v počítačových vedeckých súťažiach po pomerne dlhú dobu. Súbory údajov Rovnako ako v predchádzajúcom kritériu som chcel spustiť LLM na dvoch súboroch problémov: "známe" problémy nie sú len publikované dávno, ale sú tiež najčastejšie používané pre softvérové rozhovory - preto riešenia sú široko dostupné. "Neviditeľné" problémy, ktoré boli publikované nedávno, a ich riešenia neboli pravdepodobne pozorované testovanými LLM. „známe“ problémy nie sú len publikované dávno, ale sú tiež najčastejšie používané pre softvérové rozhovory – preto sú riešenia široko dostupné. „Neviditeľné“ problémy, ktoré boli nedávno publikované a ich riešenia neboli pravdepodobne pozorované testovanými LLM. Zatiaľ čo väčšina problémov má jednoduché textové popisy a vyžaduje len rozšírenie danej funkcie kódom, iné sú odlišné. Niektoré vyžadujú implementáciu rozhrania, t. j. rozšírenie viacerých funkcií v jednom probléme. Iné majú externé odkazy a obrázky, ktoré môžu predstavovať ťažkosti pre LLM, pretože len málo modelov podporuje vstupy obrázkov alebo prehliadanie internetu. Rozhodol som sa oslobodiť od problémov s obrázkami, odkazmi a tými, ktoré vyžadujú implementáciu viacerých funkcií. Leetcode ponúka tri zoznamy problémov: , a , , a Môj súbor údajov o "dobre znám "Leetcode 75" "Top interview 150" "Leetcode 75" "Top 100 Páči sa mi" "Top rozhovor 150" "Leetcode 75" "Top 100 Páči sa mi to" Pre "neviditeľné" problémy som vybral 99 z najnovších publikovaných problémov: 33 jednoduchých, 33 stredných a 33 ťažkých. Nedávnosť bola určená na základe identifikátorov problémov, ktoré sú inkrementálne. Hoci Leetcode nezobrazuje dátum publikovania problémov, možno ho zhrnúť z komentárov a diskusií. Najskoršie z týchto "neviditeľných" problémov boli pravdepodobne publikované okolo novembra 2024. Úrovne obtiažnosti sú čisto subjektívne a podľa uváženia redaktorov.Nechcel som zhodovať počet problémov pre každú obtiažnosť alebo dátovú sadu. Nastavenie problému Nastavenie problémov Nastavenie problémov Nastavenie problémov < Br > Dobre známy Dobre známy Dobre známy Neviditeľné (23 Mar 2025) Neviditeľné (23 Mar 2025) Neviditeľné (23 Mar 2025) Total 133 99 Celkové hodnotenie Celkom Celková hodnota 133 133 99 99 Easy 41 33 Náročný Náročný Jednoduché 41 41 33 33 Medium 78 33 Medium Mediálne Mediálne Ťažký Ťažký Ťažký Ťažký Ťažký Ťažký Ťažký 78 78 33 33 Hard 14 33 Hrdý Tvrdý 14 14 33 33 Rozsah akceptácie používateľov Leetcode 53.44% 37,05% Miera akceptácie používateľov Leetcode Miera akceptácie používateľov Leetcode Miera akceptácie používateľov Leetcode 53.44% 53.44 % 53,44 % 37,05% 37,05% 37,05% Problémové vyhlásenia a kódy boli získané pomocou môjho benchmarkingového nástroja, ktorý je publikovaný na Github: https://github.com/whisk/leetgptsolver https://github.com/whisk/leetgptsolver https://github.com/whisk/leetgptsolver Prompt, výber jazyka a generovanie kódu Benchmark bol navrhnutý takto: LLM robí len jeden pokus o generovanie kódu bez akýchkoľvek predchádzajúcich informácií o probléme (alebo akýchkoľvek iných problémoch) a bez toho, aby poznal jeho testovacie prípady, s výnimkou tých, ktoré boli v samotnom popise. Použil som rovnakú výzvu pre každý LLM a každý problém: Dobrý deň, toto je rozhovor o kódovaní. Dostanete: * Vyhlásenie o probléme (s prípadmi testovania vzoriek, ak sú k dispozícii). * Snímanie štartovacieho kódu (s podpismi pevných funkcií). Prosím, napíšte svoje riešenie v programovacom jazyku {language}. Váš kód musí: * vyriešiť problém úplne a správne. * Prejsť všetky poskytnuté prípady testovania vzoriek. * Spustiť v rámci prijateľných časových a pamäťových limitov (pripustiť veľké vstupy, ak nie sú špecifikované). * Dodržiavať dobré postupy kódovania (jasná logika, čitateľná štruktúra, vhodné používanie jazykových funkcií). Tu je vyhlásenie o probléme: {otázka} Tu je Dobrý deň, toto je rozhovor s kódovaním. Dostanete: * Vyhlásenie o probléme (s prípadmi testovania vzoriek, ak sú k dispozícii). * Odstránenie štartovacieho kódu (s podpismi pevných funkcií). Prosím, napíšte svoje riešenie v programovacom jazyku {language}. Váš kód musí: * vyriešiť problém úplne a správne. * Prejsť všetky poskytnuté prípady testovania vzoriek. * Spustiť v rámci prijateľných časových a pamäťových limitov (pripustiť veľké vstupy, ak nie sú špecifikované). * Dodržiavať dobré postupy kódovania (jasná logika, čitateľná štruktúra, vhodné používanie jazykových funkcií). Tu je vyhlásenie o probléme: {otázka} Tu je kódový od Prompt bol "polírovaný" s ChatGPT4 od môjho prvého návrhu, ale bez implementácie akýchkoľvek techník "prompt-engineering". Popis problému bol odstránený z HTML tagov pred jeho použitím v príkaze. Pre programovací jazyk som si vybral Python (verzia 3). LLMs boli požiadaní, aby vydali iba pracovný kód bez akéhokoľvek predchádzajúceho textu, ale to nebolo pravda v mnohých prípadoch. Modely a parametre Modely použité v referenčnej hodnote sú uvedené v tabuľke nižšie, pričom sú uvedené všetky parametre, ktoré nie sú predvolené. Predávajúci Knowledge cutoff date < Predávajúci Predávajúci Predávajúci Model Základné informácie Výsledok Dátum ukončenia znalostí Dátum ukončenia znalostí Dátum ukončenia znalostí "Pozornosť" Pozornosť „Rozumenie“ Parametre Parametre a parametre Parametre a parametre Anthropic claude-3-7-sonnet-20250219 Nov 2024 No teplota = 0.0 max_tokens = 4096 Anthropický Prírodné prostredie kľúč 3-7-sonnet-20250219 symbolizácia 3-7-sonnet-20250219 pohľadnice-3-7-sonet-20250219 November 2024 November 2019 Nie Nie Nie teplota = 0.0 max_tokens = 4096 teplota = 0.0 max_tokens = 4096 claude-3-7-sonnet-20250219 (s umožnením myslenia) Nov 2024 Yes temperatura = 0.0 max_tokens = 16384 budget_tokens = 8192 kľúč-3-7-sonnet-20250219 (s možnosťou myslenia) kľúč-3-7-sonnet-20250219 (s možnosťou myslenia) pohľadnice-3-7-sonet-20250219 (s umožnením myslenia) November 2024 November 2019 Áno Áno Áno teplota = 0.0 max_tokens = 16384 budget_tokens = 8192 teplota = 0.0 max_tokens = 16384 budget_tokens = 8192 DeepSeek deepseek-chat (DeepSeek-V3) unknown No temperatura = 0.0 Hlboké vyhľadávanie Hlboké vyhľadávanie deepseek-chat (DeepSeek-V3) Deepseek-chat (DeepSeek-V3) Deepseek-chat Strong> Prehľad Prečítajte si viac (DeepSeek-V3) neznámy nie je známe Nie Nie Nie teplota = 0,0 teplota = 0,0 deepseek-reasoner (DeepSeek-R1) unknown Yes temperatura = 0.0 Deepseek-reasoner (DeepSeek-R1) Pozorovanie hlbokého hľadania (DeepSeek-R1) Deepseek-reasoner (DeepSeek-R1) neznámy nie je známe Áno Áno Áno teplota = 0,0 teplota = 0,0 Google p>2.0-flash-001 unknown No teplota = 0.0 Google Google systém 2.0-flash-001 zrkadlovka 2.0-flash-001 systém 2.0-flash-001 neznámy nie je známe Nie Nie Nie teplota = 0,0 teplota = 0,0 p> unknown No teplota = 0.0 zrkadlovka 2.0-pro-exp-02-05 zrkadlovka 2.0-pro-exp-02-05 pohľadnice 2.0-pro-exp-02-05 neznámy nie je známe Nie Nie Nie teplota = 0,0 teplota = 0,0 p> unknown Yes teplota = 0.0 symbolik-2.5-pro-exp-03-25 zrkadlovka 2.5-pro-exp-03-25 systém Gemini-2.5-pro-exp-03-25 neznámy nie je známe Áno Áno Áno teplota = 0,0 teplota = 0,0 xAI grok-2-1212 Júl 17, 2024 No seed = 42 xAI púzdro p212 p2122 Prehľad Tento prístup môže vyžadovať, aby LLM navrhli riešenie namiesto "kopírovania" známeho správneho kódu napísaného v Pythone. Grok-2-1212 Dňa 17. júla 2024 Dňa 17. júla 2017 Nie Nie Nie semená = 42 semená = 42 OpenAI o1-2024-12-17 Oct 01, 2023 Áno seed = 42 OpenAI Otvorte si stránku o1-2024-12-17 o1-2024-12-17 o1-2024-12-17 Oct 01, 2023 Oct 01, 2019 Áno Áno Áno semená = 42 semená = 42 o3-mini-2025-01-31 Oct 01, 2023 Yes seed = 42 o3-mini-2025-01-31 o3-mini-2025-01-31 o3-mini-2025-01-31 Oct 01, 2023 Oct 01, 2019 Áno Áno Áno semená = 42 semená = 42 Cieľom referenčnej hodnoty bolo byť čo najdeterministickejšia a reprodukovateľnejšia; preto sa použili parametre ako „teplota“ alebo „semeno“. Avšak, žiadny z testovaných modelov nezaručuje plne deterministický výstup. Všetky známe dátumy rezania vedomostí sú skôr ako najstarší problém v známej databáze (november 2024).Nemôžem však nájsť dátumy rezania pre modelové rodiny Gemini a DeepSeek. Niektoré modely podporujú predvolené režimy „rozumenia“ alebo „myslenia“, zatiaľ čo pre Claude 3.7 Sonnet je možné ho povoliť prechodom parametrov. Použitie tejto funkcie je uvedené v tabuľke. Ďalšie funkcie modelu (alebo „nástroje“) ako vyhľadávanie na webe neboli povolené, aj keď sú podporované. Výsledky Všetci konkurenti ukázali veľmi vysoké miery akceptácie na známych problémoch, ako v predchádzajúcom referenčnom hodnotení.Nietestoval som špičkové modely alebo modifikácie (teda: Claude 3.7 Sonnet s argumentáciou povolenou, DeepSeek R1, Gemini 2.5 Pro, O1) na úsporu času a kreditov, pretože výsledky boli vysoko predvídateľné. Výsledky sa pre „neviditeľné“ problémy výrazne líšia v dvoch aspektoch: Pre všetky modely .Toto je obzvlášť pozoruhodné pre stredné a ťažké problémy. je miera akceptácie nižšia pre "neviditeľné" problémy v problémoch všetkých ťažkostí, hoci presné čísla sa líšili od modelu k modelu. Modely s režimom "rozum" alebo "myslieť" umožnili lepšie výsledky Pre všetky modely . je miera akceptácie nižšia pre "neviditeľné" problémy miera akceptácie je nižšia pre "neviditeľné" problémy v problémoch všetkých ťažkostí, hoci presné čísla sa líšili od modelu k modelu. Modely s režimom „rozum“ alebo „myslieť“ umožnili lepšie výsledky Modely s režimom „rozumenie“ alebo „myslenie“ umožnili lepšie výsledky Významne vyššie miery akceptácie pre známe problémy možno vysvetliť možnosťou, že tieto problémy a ich riešenia boli súčasťou školiacich súborov a modely museli iba reprodukovať známe správne riešenie. Avšak miera akceptácie používateľov pre nové stredné a ťažké problémy je tiež nižšia ako pre problémy v "známom" súbore. Tento prípad je ťažké kvantifikovať, a to nemusí nevyhnutne znamenať, že nové problémy sú "ťažšie". Hodnotenie ťažkostí, ako bolo uvedené skôr, je vysoko subjektívne. A, ako v prípade samotných LLM, ľudskí používatelia môžu predložiť známe správne riešenia pre známe problémy. Všetky modely s režimom „rozumenia“ umožnili výrazne prekonať ich základné náprotivky. – neuskutočniteľný úspech len pred rokom. O3-mini ukazuje najlepšie výsledky medzi všetkými modelmi „rozumenia“ – vykonal sa ešte lepšie ako oveľa drahšie a pomalšie o1. Je potrebné poznamenať, že na riešenie konkurenčných programovacích problémov. Najdôležitejšie je, že niektoré z nich boli schopné vyriešiť značnú časť stredných a ťažkých problémov o3-mini bol špeciálne vyškolený Najdôležitejšie je, že niektoré z nich boli schopné vyriešiť značnú časť stredných a ťažkých problémov o3-mini bol špeciálne vyškolený o3-mini bol špeciálne vyškolený Budúce úvahy Nemôžeme zaručiť, že "neviditeľné" súbory problémov neboli zahrnuté do školiacich údajov modelov.Na riešenie tohto problému môžeme zvážiť generovanie nových, jedinečných problémov špeciálne navrhnutých pre budúce referenčné hodnoty – samozrejme pomocou LLM. Tieto myšlienky potrebujú ďalší výskum a dúfam, že sa do nich niekto iný alebo ja môžem ponoriť. Links Raw výsledky, nastavenia problémov a zdrojový kód možno nájsť na mojom GitHub: https://github.com/whisk/leetgptsolver Moje predchádzajúce výsledky referenčných hodnôt (2024): https://hackernoon.com/testing-llms-on-solving-leetcode-problems Raw výsledky, súbory problémov a zdrojový kód možno nájsť na mojom GitHub: https://github.com/whisk/leetgptsolver https://github.com/whisk/leetgptsolver https://github.com/whisk/leetgptsolver Moje predchádzajúce referenčné výsledky (2024): https://hackernoon.com/testing-llms-on-solving-leetcode-problems https://hackernoon.com/testing-llms-on-solving-leetcode-problems https://hackernoon.com/testing-llms-on-solving-leetcode-problems Kryť obrázok vytvorený DALL·E.