Чому агенти для кодування все ще мають труднощі з кодом приватних компаній
Real-SWE тестує вісім агентів для кодування на ліцензованих приватних базах коду. Найкращий з них розв’язує 38,8 відсотка завдань, а п’ять категорій невдач вказують на місця, де агенти роблять помилки.
Джерела: Coding Agents Still Struggle With Private Company Code
Публічні тестування навичок програмування перевіряють корисні компетенції, але мало що говорять про те, що відбувається у приватному коді, який використовується компаніями у реальному виробництві. Тест під назвою Real-SWE пропонує саме такий тип перевірки. Його створники — невелика стартап-компанія Specific Labs, яку підтримує Y Combinator — отримали ліцензію на використання приватного коду від реальних компаній, виділили десять завдань, які інженери там вже виконали, та передали їх вісьмом асистентам з програмування. Найкращий з них впорався з 38,8 відсотками завдань.
Одне з завдань починається з екстреної ситуації у роботі з рахунками: рахунки-фактури, які видає сервіс, формуються без жодних податків, а обробка рахунків має відновитися у понеділок. Усі асистенти спробували вирішити цю проблему шістдесят чотири рази, і лише дві спроби виявилися успішними. Це завдання називається «Податкова юрисдикція» та є одним із десяти.
Чому цей код залишається прихованим
Засновники нещодавно оприлюднили цей тест-кейс, і він потрапив на головну сторінку Hacker News з кількома сотнями балів та понад ста коментарями. Real-SWE оцінює вісім комбінацій моделей та агентів у десяти завданнях, роблячи по вісім спроб на кожне завдання. Це дає 640 оцінених спроб, а кінцевий бал — це частка спроб, які пройшли.
Основні проекти схожі на звичайне комерційне програмне забезпечення: додаток для спостереження за подіями з понад 200 000 користувачами, який увійшов до топ-100 App Store, фінтех-продукт, який обробив понад 100 000 банківських виписок, та платформа для продажів для корпорацій. Агенти використовують Docker та Kubernetes, три бази даних (Postgres, MySQL, MongoDB), Redis, GitHub та емульовані хмарні сервіси Amazon, проте кожне завдання використовує лише ті сервіси, які потрібні для його виконання.
У деяких середовищах додаються Slack, Intercom, Google Drive, ClickUp та сервер Linear MCP, який дозволяє агенту читати заявки безпосередньо з Linear. Якщо якась деталь так і не потрапила до заявки, агенту доводиться шукати її у дискусіях чи документах, так само, як це робив би власний інженер команди.
Лише робота з податками виконується через сервіс NestJS на TypeScript, два екземпляри одного й того ж зовнішнього податкового органу (система для тестування та реальна система, яка подає заявки), а також через базу даних InfluxDB, де фіксуються завершені продажі.
Завдання виконуються у форматі Harbor, а перевірка залишається прихованою до моменту оцінювання. Це робиться для того, щоб зменшити ймовірність того, що агент буде підлаштовуватися під відкритий тест, а не під фактичні вимоги. Особи, які перевіряють, беруться з наборів тестів, які ці компанії вже використовують, іноді без змін.
Автори пояснюють свій мотив вражаючим твердженням: 99 відсотків токенів у реальних підприємствах залишаються недоступними для моделей Frontier. Оскільки ці завдання походять з приватного програмного забезпечення, а не з публічних проектів на GitHub, моделі не могли бачити код чи його секрети під час навчання.
Власні цифри бенчмарку показують, що середній розмір інструкції становить 1 742 символи, що менше, ніж у FrontierCode (2 056) чи DeepSWE (1 975). Проте у середньому випадку для виправлення проблеми потрібно обробити 11 файлів, тоді як у цих двох моделях — лише 6.
Результати сильно варіюються з завдання на завдання
Єдиний загальний бал приховує дві абсолютно різні групи завдань: ті, які агенти вирішують знову та знову, та ті, у яких вони зазнають невдачі щоразу. Метод багаторегіонального аналізу допоміг у 67,2 відсотка випадків, API-ключі та середовища — у 65,6, проблеми з перевищенням прав — у 50, а міграція ідентичності клієнтів — у 40,6.
Ситуація з кінцем списку є серйозною. Рівень оподаткування становить 3,1 відсотка, а час лінійного сканування — 4,7; показники S3 datastore (10,9), API token metering (12,5) та міграції графіка оплати (14,1) також значно вищі. Щодо зменшувача аналітичних потоків, ніхто не досяг успіху: жодного успішного виконання протягом шістдесяти чотирьох спроб.
Щодо оподаткування, єдині два успіхи були досягнуті за допомогою двох різних моделей, причому кожна з цих моделей провалила ту саму задачу у решті семи спроб. У завданні багаторегіонального сканування, яке є найпростішим, три моделі виконали завдання у всіх вісьмох спробах, тоді як ще дві — по дві рази. Усереднений показник у 67,2 відсотка приховує одну групу, яка ніколи не помилялась, та іншу, яка майже ніколи не досягала успіху.
Один із авторів написав у Hacker News, що низькі показники відображають завдання, «над якими справжні інженери працювали тижнями».
Повний рейтинг:
| Ранг | Модель та інструменти |
|---|
Оцінка не пояснює причини невдачі
Кожна невдала спроба має одну з п’яти категорій, запозичених із таксономії DeepSWE:
- Неперевірена припущення. Замість перевірки робочого простору агент вгадує, як буде поводитися система.
Кожен відсоток обчислюється на основі кількості невдалих спроб моделі як знаменника.
Grok 4.6 мав 61 невдачу, дві третини з яких (67,2 відсотка) стосувалися недотримання вимог. Gemini 3.8 Flash мав 55 невдач, причому 49,1 відсотка з них були помилками інтеграції. У GPT-5.6 Sol найбільшою групою проблем є неперевірені припущення – 43,3 відсотка з 67 невдач, тоді як у Fable 5.1 серед 49 невдач вони розподілені більш рівномірно: приблизно 37 відсотків – це недотримання вимог, а приблизно 35 відсотків – помилки інтеграції.
Два моделі, Grok 4.6 та Muse Spark 1.3, завершили рівень з результатом 23,8 відсотка, проте мають різні причини невдач. У Grok основною проблемою є недотримання вимог, а у Muse Spark – помилки інтеграції на рівні 41 відсотка. Регресії ніколи не перевищують 10,9 відсотка та дорівнюють нулю у трьох з восьми конфігурацій. Клас „неправильний файл“ з’являється лише двічі: у GLM 5.3 (7 відсотків) та Kimi K3 (3,1).
Існує попередження. Хоча мітки і оприлюднені, процес, який стоїть за ними, описаний недостатньо детально, щоб вважати ці відсотки остаточними доказами. У публічному описі не чітко зазначено, чи саме інженери-люди, автоматизована модель чи їхня комбінація виконувала класифікацію.
Довші тестування не були надійнішими
Тестування також ділилися за кількістю хвилин. Протягом десяти хвилин з 98 випадків не вдалося 70, тобто 71,4 відсотка. При десяти хвилинах або більше з 542 випадків не вдалося 398, тобто 73,4 відсотка.
Кількість використаних токенів розповідає про схожу ситуацію. Grok 4.6 у середньому використовує від 3 000 до 20 000 токенів на виконання восьми з десяти завдань, проте на завданнях з найнижчими оцінками — лінійному скануванні та зменшенні обсягу даних у аналітичних потоках — він використовує відповідно 261 000 та 315 000 токенів. Висока кількість токенів може бути ознакою попередження, особливо коли вона значно перевищує звичайний рівень для даного ресурсу. Якщо результат виконання значно перевищує очікуваний обсяг, слід перевірити ситуацію або втрутитися, замість того щоб дозволити незавершеній спробі витратити всі ресурси.
Найдорожчий агент не завжди був найкращим
Орієнтовна вартість одного запуску коливається від 2,50 доларів (Gemini 3.8 Flash) до 6,96 доларів (Fable 5.1), причому порядок цін майже не відповідає топ-листу. GPT-5.6 Sol коштує 2,65 долара та опиняється останнім, тоді як найдешевший варіант — Gemini 3.8 Flash — займає третє місце. Усі ці значення є орієнтовними оцінками та не є універсальним рейтингом цін, адже фактичні витрати залежать від ціноутворення, налаштувань, тривалості завдання, кількості спроб та використання інструментів.
Fable 5.1 коштує у 2,78 раза більше, ніж Gemini 3.8 Flash, та ефективніший на 7,6 відсоткових пунктів. Чи варто це — залежить від вартості невиконаного завдання. У цьому контексті невдачею вважається помилка у формуванні рахунку, стягнення коштів з клієнта, який мав звільнення, або звіт, який не узгоджується наприкінці кварталу. Для незначних змін у інтерфейсі суми виглядають зовсім інакше.
Значна частина різниці пояснюється обсягом токенів. GLM 5.3 у середньому генерує 117 000 токенів на кожну роботу, тоді як GPT-6 Astra — 24 000, що становить майже у п’ять разів більше для однакових десяти завдань. До двох показників автори тесту додають попередження: у Grok 4.6 за ціною $3,44 та Kimi K3 за ціною $3,90 відсутні деякі дані про використання, тому фактична вартість може бути вищою. Розглядайте їх як мінімальні значення.
Одна і та сама платформа, але різниця у сімнадцять балів
Кожен елемент тесту поєднує модель із інструментами її виробника, тому у описі тесту йдеться про „комбінації моделей та платформ, а не про моделі окремо“. Однак дві платформи згадуються двічі, що дозволяє провести приблизне порівняння. За допомогою Codex CLI GPT-6 Astra досягає рівня 33,8%, тоді як GPT-5.6 Sol — 16,2%, що становить різницю у 17,6 балів. За допомогою Claude Code Fable 5.1 досягає рівня 38,8%, а GLM 5.3 — 28,8%, тобто різниця становить десять балів.
Проте десять завдань та вісім конфігурацій створюють невелику таблицю, і кожен рейтинг супроводжується оприлюдненим інтервалом впевненості. Кожна модель пройшла 80 тестувань, тож 38,8 відсотка у Fable 5.1 відповідають 31 успішному тесту, а 16,2 відсотка у GPT-5.6 Sol — 13 тестам. Якщо для однієї моделі результат одного завдання змінюється, її рейтинг змінюється на кілька балів. Ніхто не повинен обирати постачальника на основі таблиці такого розміру, і автори не просля цього нікого. Цей експеримент показує, що публічні рейтинги можуть бути неповним керівництвом щодо продуктивності в приватній базі коду, і до цієї різниці вони додають п’ять практичних класів невдач.
Запустіть п’ять міток у власному коді
Таксономія — це та частина, яка може використовуватися. Ви можете застосувати її до свого власного репозиторію у будь-який час.
Візьміть останні двадцять запитів на зміни, які відкрив агент, та кожному з тих, що провалилися або були сильно змінені, присвойте один із п’яти класів. Підрахуйте їх. Розподіл і буде результатом дослідження, і він не збігатиметься з жодною моделлю, про яку ви читали цього тижня, оскільки залежить від вашої бази коду та звичок написання заявок так само, як і від моделі. Той клас, який виявиться найпоширенішим, підлягатиме обмеженню.
Якщо домінують неперевірені припущення, необхідно вести журнал читання. Попросіть агента записувати, які файли він відкривав перед змінами, і відхиліть зміни, якщо у списку відсутній файл, де знаходиться потрібна функція. Недотримання вимог зазвичай пов’язане з конкретним тикетом. Перетворіть інструкцію на список критеріїв прийняття та позначайте їх по одному, адже інструкція з п’ятьма вимогами, прихованими у довгому абзаці, є причиною 67,2 відсотків помилок у Grok. Помилки інтеграції означають, що тести проходять на рівні одиниць, але зазнають невдач у ланцюзі викликів, тому тестуйте за маршрутом, який слідує реальний додаток, починаючи з його точки входу. Помилки через неправильний файл трапляються досить рідко, тож кожен такий випадок варто ретельно перевірити: переконайтеся, що до кожного зміненого файла можна отримати доступ з коду, який додаток насправді викликає.
Відтепер слідкуйте за одним показником: часткою запитів агента на зміни, які проходять перевірку з першої спроби, розбитою за категоріями помилок. Він змінюється, коли умови перевірки посилюються, та знову змінюється, коли змінюється базова модель.