Бир жыл мурун,
Ошондон бери Open AI, Anthropic жана Google өздөрүнүн моделдеринин өркүндөтүлгөн версияларын чыгарышты жана Deepseek жана xAI сыяктуу жаңы оюнчулар пайда болду. Көптөгөн моделдер азыр код жазууга жөндөмдүү катары сатылат, буга чейин андай болгон эмес. Мен жаңы алгоритмдик маселелерди чечүү жөндөмдүүлүгү жакшырганын же жакшырбаганын билүү үчүн бул заманбап LLMлерди салыштырып көрүүгө ниеттенип жатам.
Мотивация
LLMлер үчүн алардын коддоо жөндөмдүүлүктөрүн баалоо үчүн учурдагы эталондор бар.
Бул LLMлерди түз салыштырууга мүмкүндүк берүүчү жаңы эталондун түзүлүшүнө алып келди. Анан эмнеге муну жөн гана көңүл ачуу үчүн кылбаш керек?
Эталондук дизайн
Алгоритмдик маселелерди чечүүдө адамдын иш-аракеттерин тууралоо, бирок кодду жазуу үчүн LLMди колдонуу идеясы:
- Көйгөйдүн сүрөттөмөсүн жүктөп алыңыз.
- Сүрөттөмөдөн эскертүү түзүңүз.
- LLM менен кодду жаратыңыз.
- Текшерүү үчүн кодду тапшырыңыз.
- Натыйжаларды күтүңүз.
Бул кадамдар биздин тестирлөө топтомундагы ар бир көйгөй жана ар бир LLM үчүн аткарылышы керек. Жөнөкөйлүк үчүн, LLM үчүн ар бир көйгөй боюнча код жазууга бир гана аракет бар, бирок чечимди жакшыртуу үчүн кайталап айтуу үчүн эч кандай пикир жок. Бардык көйгөйлөр көз карандысыз катары каралат; алардын ортосунда эч кандай контекст бөлүшүлгөн эмес.
Эмне үчүн Leetcode?
Leetcode бир нече себептерден улам салыштыруу үчүн жакшы тандоо болуп чыкты:
- Leetcode көйгөйлөрү программалык камсыздоо инженери кызматтары үчүн чыныгы интервьюларда колдонулат.
- Информатика студенттери окуу учурунда ушул сыяктуу маселелерди чечүүнү үйрөнүшөт.
- Анда чечимдин туура экенин секунданын ичинде текшере турган онлайн сот бар.
- Көптөгөн популярдуу программалоо тилдери колдоого алынат.
- Бул көйгөй боюнча адам колдонуучунун аткаруусу да жеткиликтүү.
Leetcode кантип иштейт
Эгер сиз эч качан атаандаштыкка жөндөмдүү программалоо же алгоритмдик маселелерди чечүү менен алектенбесеңиз, бул жерде кыскача түшүндүрмө. Бул көйгөйдүн сүрөттөмөсүн карап көрүңүз:
Given an array of integers numbers and an integer target, return indices of the two numbers such that they add up to the target. You may assume that each input would have exactly one solution, and you may not use the same element twice. You can return the answer in any order.
Сынактын катышуучусу программист бул маселени чечкен коддун бир бөлүгүн жазышы керек. Баштоо үчүн "үзүндү" бар - бүтпөгөн функция, аты жана аргументтери менен, бирок бош дене:
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: # your code here
Адатта, сыпаттамада киргизүү жана чыгаруунун бир нече үлгүлөрү (сыноо иштери) берилет:
Input: nums = [2,7,11,15], target = 9 Output: [0,1]
Маселе онлайн судьяга гана жеткиликтүү болгон ондогон сыноо учурлары болушу мүмкүн. Маселе чечилет (же чечим кабыл алынды деп эсептелет), эгерде код бардык сыноо учурлары үчүн акылга сыярлык убакыт жана эстутум чегинде күтүлгөн жыйынтыктарды чыгарса. Чечим сот тарабынан колдоого алынган каалаган программалоо тилинде жазылышы мүмкүн.
Ар бир маселе Leetcode колдонуучулары тарабынан берилген кабыл алынган чечимдердин катышы болгон "кабыл алуу курсу" бар. Бир колдонуучу өз кодун чексиз санда тапшыра аларын жана ар бир аракет кабыл алуу ченине карай эсептелерин эске алыңыз.
Бул эрежелерди Leetcode ойлоп тапкан эмес; алар көптөн бери информатика боюнча сынактарда колдонулат.
Берилиштер топтому
Мурунку эталондогудай эле, мен LLMлерди эки көйгөйлөр боюнча иштетгим келди:
- "Белгилүү" көйгөйлөр көп убакыт мурун эле жарыяланган эмес, ошондой эле программалык камсыздоо менен маектешүү үчүн көбүнчө колдонулат - ошондуктан, чечимдер кеңири жеткиликтүү.
- Жакында жарыяланган "Көрүнбөгөн" көйгөйлөр жана алардын чечимдери сыналган LLMлер тарабынан байкалган эмес.
Көпчүлүк көйгөйлөр жөнөкөй тексттик сүрөттөмөлөргө ээ жана берилген функцияны код менен кеңейтүүнү гана талап кылса, башкалары башкача. Кээ бирлери интерфейсти ишке ашырууну талап кылат, башкача айтканда, бир маселеде бир нече функцияларды кеңейтүү. Башкаларында тышкы шилтемелер жана сүрөттөр бар, алар LLMs үчүн кыйынчылыктарды жаратышы мүмкүн, анткени бир нече моделдер сүрөт киргизүүнү же интернетти карап чыгууну колдойт. Мен сүрөттөр, шилтемелер жана бир нече функцияларды ишке ашырууну талап кылган көйгөйлөрдөн бошотууну чечтим.
Leetcode үч көйгөй тизмегин сунуштайт: "Эң мыкты интервью 150" , "Leetcode 75" жана "Эң жакшы көргөн 100" . Менин "белгилүү" көйгөйлөрдүн маалымат топтому бул тизмелерди бириктирип, жогоруда айтылган алып салуулардан кийин 134 көйгөйдү түзөт.
"Көрүнбөгөн" көйгөйлөр үчүн мен эң акыркы жарыяланган 99 маселени тандап алдым: 33 жеңил, 33 орто жана 33 оор. Жаңылык көйгөйдүн идентификаторлорунун негизинде аныкталды, алар өсүүчү. Leetcode көйгөйлөрдүн жарыяланган күнүн көрсөтпөсө да, аны комментарийлерден жана талкуулардан болжолдоого болот. Бул "көрүнбөгөн" көйгөйлөрдүн эң алгачкысы 2024-жылдын ноябрында жарыяланган.
Кыйынчылыктын деңгээли субъективдүү жана редактордун каалоосу боюнча. Мен ар бир кыйынчылык же берилиштер топтому үчүн көйгөйлөрдүн санын дал келтирүүнү ойлогон эмесмин.
| | Маселе коюлган |
---|---|---|
| Белгилүү | Көрүнбөгөн |
Бардыгы | 133 | 99 |
Оңой | 41 | 33 |
Орто | 78 | 33 |
Катуу | 14 | 33 |
Leetcode колдонуучуларынын кабыл алуу деңгээли | 53,44% | 37,05% |
Көйгөй билдирүүлөрү жана код үзүндүлөрү менин Githubда жарыяланган салыштыруу куралым аркылуу алынды:
Ыкчам, тил тандоо жана кодду түзүү
Эталон төмөнкүдөй иштелип чыккан: LLM көйгөй (же башка көйгөйлөр) жөнүндө эч кандай алдын ала маалыматсыз жана анын сыноо учурларын билбей туруп кодду түзүү үчүн бир гана аракет кылат, сыпаттамада болгондордон тышкары. Код түзүлгөндөн кийин пикир билдирүү же жакшыртуу механизми жок.
Мен ар бир LLM жана ар бир көйгөй үчүн бир эле кеңешти колдондум:
Hi, this is a coding interview. You will be given: * A problem statement (with sample test cases if available). * A starter code snippet (with fixed function signatures). Please write your solution in the {language} programming language. Your code must: * Solve the problem fully and correctly. * Pass all provided sample test cases. * Run within acceptable time and memory limits (assume large inputs if none are specified). * Follow good coding practices (clear logic, readable structure, appropriate use of language features). Here is the problem statement: {question} Here is the code snippet, which you should expand with your solution: {snippet} Important Requirements: * Do not change any provided function signatures, class names, or method names. * Output only valid source code that can be executed as-is, without any further improvements or bugfixes. * Do not include docstrings, markdown, or commentary in your final code. Good luck!
Чакыруу менин биринчи долбоорумдагы ChatGPT4 менен "жылмаланган", бирок эч кандай "тез инженердик" ыкмаларды ишке ашырбастан.
Көйгөйдүн сыпаттамасы аны чакырууда колдонуудан мурун HTML тэгдеринен ажыратылган.
Программалоо тили үчүн мен Pythonду тандадым (3-версия).
LLMлерден мурунку текстсиз жумушчу кодду гана чыгаруу суралган, бирок бул көп учурларда туура эмес. Негизги тазалоо жүргүзүлүп, чыныгы коддон башкасынын баары алынып салынган жана берилген эмес.
Моделдер жана параметрлер
Эталондо колдонулган моделдер төмөнкү таблицада келтирилген, бардык демейки эмес параметрлер көрсөтүлгөн. Билимди чектөө даталары сатуучунун расмий документтеринен алынат жана маалымдама үчүн берилет, эгерде белгилүү болсо.
Сатуучу | Модел | Билимди токтотуу күнү | "Эсептөө" | Параметрлер |
---|---|---|---|---|
Антропикалык | claude-3-7-сонет-20250219 | Ноябрь 2024 | Жок | температура = 0,0 max_tokens = 4096 |
| claude-3-7-sonnet-20250219 (ойлоо иштетилген) | Ноябрь 2024 | Ооба | температура = 0,0 макс_токендер = 16384 бюджеттик_токендер = 8192 |
DeepSeek | deepseek-chat (DeepSeek-V3) | белгисиз | Жок | температура = 0,0 |
| deepseek-reasoner (DeepSeek-R1) | белгисиз | Ооба | температура = 0,0 |
Гугл | gemini-2.0-flash-001 | белгисиз | Жок | температура = 0,0 |
| gemini-2.0-pro-exp-02-05 | белгисиз | Жок | температура = 0,0 |
| gemini-2.5-pro-exp-03-25 | белгисиз | Ооба | температура = 0,0 |
xAI | грок-2-1212 | 17-июль, 2024-жыл | Жок | үрөн = 42 |
OpenAI | о1-2024-12-17 | 01-октябрь, 2023-жыл | Ооба | үрөн = 42 |
| o3-mini-2025-01-31 | 01-октябрь, 2023-жыл | Ооба | үрөн = 42 |
Эталон мүмкүн болушунча детерминисттик жана кайталануучу болууга багытталган; ошондуктан «температура» же «тукум» сыяктуу параметрлер колдонулган. Бирок, сыналган моделдердин бири да толук детерминисттик натыйжага кепилдик бербейт. Бул сыноолорду кайра иштетүүдө бул факторду эске алуу керек.
Белгилүү болгон бардык билимди өчүрүү даталары белгилүү маалымат топтомундагы эң эски көйгөйдөн эрте (ноябрь 2024). Бирок, мен Gemini жана DeepSeek үлгүсүндөгү үй-бүлөлөр үчүн кесүү даталарын таба алган жокмун.
Кээ бир моделдер демейки боюнча "ой жүгүртүү" же "ой жүгүртүү" режимдерин колдойт, ал эми Клод 3.7 Sonnet үчүн ал параметрлерди өткөрүү менен иштетилиши мүмкүн. Бул функцияны колдонуу таблицада көрсөтүлгөн. Веб издөө сыяктуу башка моделдин функциялары (же "куралдар") колдоого алынган болсо да иштетилген эмес.
Жыйынтыктар
Бардык атаандаштар мурунку эталондогудай эле белгилүү көйгөйлөр боюнча өтө жогорку кабыл алуу көрсөткүчтөрүн көрсөтүштү. Убакытты жана кредиттерди үнөмдөө үчүн мен мыкты моделдерди же модификацияларды (атап айтканда: Клод 3.7 Sonnet ой жүгүртүүсү иштетилген, DeepSeek R1, Gemini 2.5 Pro, O1) сынаган жокмун, анткени натыйжалар өтө алдын ала болгон.
Натыйжалар эки аспектиде "көрүнбөгөн" көйгөйлөр үчүн абдан айырмаланат:
- Бардык моделдер үчүн кабыл алуу көрсөткүчү "көрүнбөгөн" көйгөйлөр үчүн төмөн . Бул, айрыкча, орто жана оор көйгөйлөр үчүн өзгөчө болуп саналат.
- "Эсептөө" же "ой жүгүртүү" режими иштетилген моделдер бардык кыйынчылыктардын көйгөйлөрү боюнча жакшы натыйжаларды берди , бирок так сандар моделден моделге ар кандай болгон.
Белгилүү проблемаларды кабыл алуунун кыйла жогору деңгээли, ал көйгөйлөр жана аларды чечүү жолдору окуу топтомдорунун бир бөлүгү болгондугу менен түшүндүрсө болот, ал эми моделдер белгилүү туура чечимди кайра чыгарышы керек болчу. Бирок, колдонуучулардын жаңы орто жана оор көйгөйлөрдү кабыл алуу деңгээли "жакшы белгилүү" топтомдогу көйгөйлөргө караганда төмөн. Бул иштин санын аныктоо кыйын жана бул сөзсүз түрдө жаңы көйгөйлөр “кыйыныраак” дегенди билдирбейт. Кыйынчылыкты баалоо, жогоруда айтылгандай, өтө субъективдүү. Жана, LLMлердин өздөрүндөгүдөй эле, адам колдонуучулар белгилүү көйгөйлөр үчүн белгилүү туура чечимдерди сунуштай алышат.
"Эсептөө" режими иштетилген бардык моделдер негизги аналогдорунан кыйла ашып түштү. Эң негизгиси, алардын айрымдары орто жана оор маселелердин олуттуу бөлүгүн чече алышты — бир жыл мурун эле ишке ашпай турган жетишкендик. o3-mini бардык "ой жүгүртүүчү" моделдердин ичинен эң жакшы натыйжаларды көрсөтөт — ал алда канча кымбатыраак жана жайыраак o1ге караганда жакшыраак иштеди. деп белгилей кетуу керек
Келечектеги ойлор
"Көрүнбөгөн" көйгөйлөр топтомдору моделдердин окуу маалыматтарына кирбегендигине кепилдик берүү мүмкүн эмес. Муну чечүү үчүн биз келечектеги эталондор үчүн атайын иштелип чыккан жаңы, уникалдуу көйгөйлөрдү жаратууну карап чыгышыбыз мүмкүн - албетте, LLMдерди колдонуу.
Мындан тышкары, дагы бир стратегия азыраак колдонулган программалоо тилдерин колдонуу болуп саналат. Бул ыкма LLMден Python тилинде жазылган белгилүү туура кодду "көчүрүп-жабыштыруунун" ордуна чечимди иштеп чыгууну талап кылышы мүмкүн.
Бул идеялар дагы изилдөөнү талап кылат, жана мен аларга башка бирөө же мен чөмүлүп кете алам деп үмүттөнөм.
Шилтемелер
- Чийки натыйжалар, көйгөйлөр топтомдору жана баштапкы кодун менин GitHub сайтымдан тапса болот:
https://github.com/whisk/leetgptsolver - Менин мурунку эталондук натыйжаларым (2024):
https://hackernoon.com/testing-llms-on-solving-leetcode-problems
Мукаба сүрөтү DALL·E тарабынан түзүлгөн.