Непредсказуемость ИИ в разработке: Как бесплатные нейросети справляются с написанием кода и что мы узнали о их эффективности

Противореча популярному мнению, применение современных инструментов искусственного интеллекта на самом деле замедляет продуктивность опытных разработчиков программного обеспечения при работе с известными кодовыми базами, а не ускоряет её. Это подтверждает новое исследование, проведённое некоммерческой исследовательской организацией METR.

Аналитики наблюдали за группой квалифицированных разработчиков, использовавших ИИ-помощника Cursor для выполнения задач в проектах с открытым исходным кодом, предполагая, что ИИ поможет сократить время выполнения на 24%.

Хотя по окончании исследования разработчики считали, что использование языковой модели уменьшило время выполнения задач на 20%, на самом деле оно увеличилось на 19%.

Эти результаты ставят под сомнение общепринятое мнение о том, что ИИ значительно повышает производительность квалифицированных специалистов. Замедление работы связано с необходимостью проверять и исправлять предложения, созданные искусственным интеллектом.

Несмотря на более длительное время разработки, многие участники исследования, включая авторов, продолжают использовать Cursor, так как работа с ИИ становится менее напряженной и более приятной.

Спойлер: Grok оказался лучшим.

Описание задачи: попросим нейросети создать REST API-сервер на Python для приложения To-Do List с функциями по созданию, получению, обновлению и удалению задач. Данные должны храниться в оперативной памяти, без использования базы данных. Нейросеть должна написать полноценный код и объяснить его.

API применяется повсюду — от мобильных приложений до веб-сайтов. Например, когда вы проверяете погоду в приложении, оно использует REST API для получения данных с сервера. REST API для To-Do List позволят приложению добавлять, отображать, изменять или удалять задачи.

Промпт:

«Создай REST API-сервер на Python с применением Flask или FastAPI для приложения To-Do List. Сервер должен поддерживать функции создания, получения, обновления и удаления задач (CRUD). Задачи хранятся в памяти, без использования базы данных. Код должен быть читабельным и понятным. Объясни, как работает этот код и как его можно протестировать».

Фрагмент кода:

“`python
# Создаем экземпляр FastAPI приложения
app = FastAPI(title=”To-Do List API”)

# Модель для задачи (определяет структуру данных задачи)
class Task(BaseModel):
id: int
title: str
description: str | None = None # Описание необязательное
completed: bool = False # По умолчанию задача не выполнена

# Хранилище задач в оперативной памяти (список словарей)
tasks: List[Task] = []
“`
Полный код содержит 64 строки.

Как это работает

Результат: сервер запущен, API функционирует корректно. Мы отправляем задачу, и она отображается в списке.

Как Grok оценивает свою работу:

«Код: 8/10 — написан простой, понятный REST API с функциями CRUD, но стоит добавить валидацию (к примеру, для заголовка) и обработку крайних случаев. Объяснение: 9/10 — подробно описал функциональность кода и тестирование, все структурировано и ясно, но можно было бы покороче. Общая оценка: 8,5/10 — задача выполнена качественно, есть небольшой потенциал для улучшений».

Фрагмент кода:

“`python
# Создаем экземпляр FastAPI приложения
app = FastAPI()

# Класс для описания структуры задачи (модель данных)
class Task(BaseModel):
id: int
title: str
description: Optional[str] = None # Описание необязательное
completed: bool = False # По умолчанию задача не выполнена

# «База данных» в памяти — просто список задач
tasks_db = []
current_id = 1 # Счетчик для генерации уникальных ID
“`
Полный код насчитывает 56 строк.

Как это работает

Результат: у DeepSeek возникли трудности. При создании задачи была ошибка 422 (сервер получил данные, но не смог их обработать из-за несоответствия формату). Проблема заключалась в том, что в коде было указано, что при создании необходимо передавать id:

“`python
# Класс для описания структуры задачи (модель данных)
class Task(BaseModel):
id: int
title: str
description: Optional[str] = None # Описание необязательное
completed: bool = False # По умолчанию задача не выполнена
“`
Однако логика предполагала, что id должен генерироваться автоматически (это организует строка task.id = current_id в функции create_task). После второй попытки нейросеть устранила ошибку, убрав лишнюю строку, и функция заработала правильно:

Как DeepSeek оценивает свою работу:

«Код: 8/10. Исправил критическую ошибку с id, сделал логику создания задач надежной. Можно добавить: сохранение задач в файл (чтобы данные не пропадали после перезапуска). Объяснение: 9/10. Инструкции ясные и последовательные. Возможные улучшения: больше примеров ошибок и их визуализация. Итог: хорошо справился, но есть куда расти!»

Фрагмент кода:

“`python
# Временное хранилище задач (в памяти)
tasks: List[Task] = []

# Получить список всех задач
@app.get(“/tasks”, response_model=List[Task])
def get_tasks():
return tasks

# Получить задачу по ID
@app.get(“/tasks/{task_id}”, response_model=Task)
def get_task(task_id: int):
for task in tasks:
if task.id == task_id:
return task
raise HTTPException(status_code=404, detail=”Задача не найдена”)
“`
Полный код от GPT — 57 строк.

Как это работает

Данные: ChatGPT.

Результат: сервер и все функции работают безупречно.

Как GPT оценивает свои результаты:

«Код: чистый, простой, соответствует лучшим практикам FastAPI и задачам CRUD. Объяснение: доступное, пошаговое, с примерами и альтернативами (Swagger, curl). Оценка: 9,5/10 — хорошо сбалансировано для новичка: минимум кода, максимум пользы. Если что-то нужно улучшить — с радостью помогу или доработаю».

Каждая из нейросетей смогла создать рабочий код с комментариями и пояснениями. ChatGPT и Grok сделали это с первой попытки, тогда как их китайский аналог уложился во вторую, потратив немного больше времени. Все ИИ использовали FastAPI, объяснив выбор тем, что он проще и современнее, чем Flask. В дополнение, все три нейросети добавили обработку ошибок, хотя это не входило в условия задания.

Каждый «кандидат» объяснил, как запустить сервер и протестировать его работу. Объяснение кода от Grok кажется наиболее полным и понятным — он детально описал, как работает каждая функция: работа сервера, FastAPI, хранилище задач, обработка ошибок. DeepSeek оказался более сжатым, а ChatGPT использовал несколько фраз.

Оценка по 3-балльной шкале:

Описание задачи: провести анализ и исправить плохой JavaScript-код для функции, которая создает простую анимацию на веб-странице (например, движущийся квадрат, меняющий цвет).

Промпт:

«Вот код на JavaScript (приведен выше). Это функция для анимации движущегося квадрата на HTML Canvas. Найди ошибки, объясни, в чем проблема, и напиши исправленный код. Если возможно, оптимизируй его, добавь проверку границ canvas, возможность остановки анимации и комментарии. Объясни внесенные изменения и расскажи, как запустить анимацию».

Фрагмент кода с ошибками:

“`javascript
setInterval(function() {
context.fillStyle = “white”;

for (var i = 0; i < snowflakes.length; i++) { context.beginPath(); context.arc(snowflakes[i].x, snowflakes[i].y, 5, 0, Math.PI * 2); context.fill(); snowflakes[i].y = snowflakes[i].y + snowflakes[i].speed; if (snowflakes[i].y > 150) {
snowflakes[i].y = 0;
}
}
});
“`
Полный код не содержит комментариев и включает ошибки.

Так выглядит анимация:

Выявление проблем в коде:

Нейросеть обнаружила десять проблем, среди которых неоптимальная производительность (использование setInterval вместо requestAnimationFrame), недостаток проверки скорости снежинок и дублирование отрисовки.

Результат: несмотря на неясный и неполный промпт, Grok переписал код, сделав анимацию более качественной.

Единственная проблема заключалась в отсутствии обработки изменения размеров окна — если размер окна браузера меняется, размеры canvas остаются фиксированными, что может привести к неправильному отображению анимации на более широких экранах. Однако в том же ответе нейросеть предложила добавить соответствующую функцию, если она понадобится.

Комментарий Grok:

«Справился на отлично: выявил все ошибки, предложил оптимизированный код с новыми функциями и детальными комментариями. Код стал надежнее и гибче».

Выявление проблем в коде:

Китайская нейросеть нашла семь ключевых проблем и предложила их решения.

Результат:

Исправленный код в общем выполняет свои задачи, однако содержит несколько ошибок.

Например, код пытается увеличить скорость снежинок в пустом массиве:

“`javascript
for (const flake of snowflakes) {
flake.speed += 0.5;
}
“`
Таким образом, нажатие кнопки «Увеличить скорость» не осуществляет никаких изменений.

Кнопка «Остановить анимацию» работает: анимация останавливается. Однако при повторном нажатии запускается функция startSnowfall, создающая новый массив снежинок. Это приводит к сбросу текущего состояния снежинок (их позициям, скоростям и размерам), и анимация «перезапускается» с новыми снежинками вместо продолжения текущей. Также, как и в коде Grok, отсутствует обработка изменения размера окна.

Комментарий DeepSeek:

«До исправлений работа была неплохой, однако имела критические недочеты. Справился на 3/5 — базовая анимация функционировала, но управление и надежность были на низком уровне. После правок улучшил надежность кода до 5/5».

Выявление проблем в коде:

ChatGPT нашел пять ключевых ошибок в коде и предложил решения.

Результат:

Как в предыдущем случае, нейросеть добавила возможность остановки анимации. Однако вновь повторно её запустить без перезагрузки страницы не удастся. Также здесь нет адаптивности размера окна.

Комментарий GPT:

«Код оптимизирован, ошибки устранены, анимация расширена и готова к использованию».

Нейросети с разной степенью успеха выполнили задачу: объяснили основные ошибки в коде, предложили альтернативные решения и добавили комментарии для улучшения восприятия. Grok оказался наиболее успешным — он нашел 10 ошибок, исправил их и предложил дополнительные улучшения, такие как лёгкое горизонтальное смещение снежинок для симуляции ветра. Его «коллеги» справились сравнительно хуже — анимация работает, но с недочётами.

Оценка по 3-балльной шкале:

Описание задачи: создать простую игру для ПК, например, «Змейку», «Сапера» или что-то подобное. Игра должна иметь минималистичную, визуально привлекательную графику и простое управление с клавиатуры. Нейросети нужно самостоятельно определить жанр (аркада, платформер, пузыри), язык программирования, объяснить код и рассказать, как запустить игру.

Промпт:

«Придумай и напиши код простой 2D-игры, реализуемой за час, с управлением через клавиатуру и визуально привлекательной графикой. Игра должна быть оригинальной, выбери жанр (например, аркада, головоломка, платформер, пазл и т. д.). Определи язык программирования (например, Python с Pygame или JavaScript с HTML5 Canvas и т. д.). Интерфейс игры должен быть на русском языке. Используй минимальные необходимые библиотеки для графики. Код должен быть читабельным, с комментариями. После написания кода объясни, как работает игра, как её запустить (включая установку библиотек, если необходимо) и обоснуй свой выбор концепции».

Результат:

Нейросеть от xAI предложила игру под названием Star Collector («Собирающий звезды»).

Описание игры от Grok:

«Это 2D-игра, вдохновленная Pac-Man, но с уникальным игровым процессом. Вы управляете космическим кораблем (простым спрайтом), который летает по экрану. Ваша цель — собирать звезды (яркие, мерцающие объекты), которые появляются случайным образом. На поле летают астероиды (враги), столкновение с которыми уменьшает здоровье. Если здоровье (три жизни) заканчивается, игра завершается. Визуальный стиль: яркий космос с черным фоном, мерцающими звездами и анимированными астероидами».

Создание игры заняло порядка 25 минут. После написания базового кода нейросеть предложила улучшить его, чтобы сделать игру более яркой и увлекательной. Потратив еще 15 минут, Grok добавил на фон разноцветные планеты, звуки при сборе звезд и столкновении с астероидами, а также возможность собирать редкие сердечки (дополнительные жизни).

Для написания кода был выбрал язык Python с использованием библиотеки Pygame.

Игра получилась действительно увлекательной и визуально привлекательной, напоминая атмосферные классические аркады прошлого века.

Оценка от Grok:

«Я справился хорошо: создал простую, увлекательную игру Star Collector на Python с Pygame за час, как вы просили. Визуально насыщенная (фоновые звезды, шлейф, мерцание), с управлением WASD, бонусами и рекордом. Код эффективный и понятный для новичка, и я подробно объяснил процесс запуска игры. Если что-то нужно доработать — дайте знать!»

Результат:

DeepSeek представил игру «Лабиринт сокровищ», относящуюся к жанру головоломок с исследованием лабиринта.

Описание игры от DeepSeek:

«Игрок управляет искателем сокровищ, который должен собрать все монеты в лабиринте, избегая ловушек».

С первых попыток игра больше всего напоминала скучноватую и много багованную: в некоторых местах можно было пройти сквозь стены, лабиринты были слишком узкими и примитивными, объекты-враги (красные квадраты) не двигались. Однако после нескольких правок и замечаний качество игры улучшилось: некоторые ошибки были исправлены, враги — красные квадраты стали призраками, а главный герой — зеленый квадрат — обрел образ человека в шляпе. Но появились новые баги: призраки могли проходить сквозь стены лабиринта, что логично, но противоречит игре. После одной из попыток внести правки, предложенные нейросетью, игра перестала запускаться. Впоследствии она всё же запустилась, но управление персонажем было потеряно, и он вернулся в первоначальную форму квадрата.

Спустя более трех часов и множество итераций, DeepSeek в конечном итоге исправил большую часть ошибок и достиг достаточно приемлемого качества игры.

В код добавлены комментарии к каждому блоку, хотя это не входило в требования — за время правок хорошая работа была сделана, игра работает и даже затягивает. С каждым уровнем сложность возрастает: лабиринты становятся запутанней, а призраков — больше.

Оценка от DeepSeek:

«Отлично! Что удалось хорошо: чистый, читаемый код с комментариями, простая, но увлекательная механика. Визуально понятный интерфейс на русском. Что можно улучшить: добавить случайные ловушки в лабиринт».

Результат:

ChatGPT выбрал жанр простого платформера с элементами аркады.

Описание игры от GPT:

«Вы управляете светящимся шаром, который прыгает по исчезающим платформам. Каждая платформа исчезает через пару секунд после приземления на нее. Цель — дойти до финишного уровня, прыгая по платформам и избегая падений. Некоторые платформы появляются только после активации переключателя».

Изначально игра была достаточно простой как визуально, так и в плане механики, поэтому было принято решение усложнить её.

Проведя около часа в поисках и исправлении багов, GPT в итоге сделала рабочую игру про собаку, собирающую кости. Нейросеть самостоятельно сгенерировала ассеты для собаки и костей.

Но, как и предыдущие нейросети, для разработки кода выбрали язык Python с использованием библиотеки Pygame. На этот раз GPT не добавил комментариев и пояснений в код.

Оценка от GPT:

«Думаю, я справился хорошо: учел все пожелания, сделал платформы доступными для прыжков, убрал ручной прыжок. Если потребуется что-то ещё — всегда готов помочь!»

В результате мы получили три вполне приличные визуальные игры для ПК, затратив на это совсем немного времени. Полностью с поставленной задачей — создать игру за час — справился только Grok. У GPT на это ушло около двух с половиной часов, а у DeepSeek — более трех.

Оценка по 3-балльной шкале:

Важны нюансы и детали. Каждая нейросеть может написать код быстрее, чем вы, и при достаточном терпении даст желаемый результат. Все три «кандидата» успешно справились с поставленными задачами, продемонстрировав небольшие различия в скорости и удобстве. Являются ли они принципиальными или нет — решать вам.

Искусственный интеллект поможет сэкономить время, но он остается беспомощным без внимания и контроля со стороны того, кто пишет запрос. Ожидать, что работа будет выполнена идеально с первой или второй попытки, не получится. Плохо написанный и неоптимизированный код — это не недостаток ИИ, так же как неправильно вбитый гвоздь не может быть виной молотка. Ответственность за конечный результат лежит на том, кто взял в руки инструмент, не имеет значения, китайский он или американский.

P.S. Вот итоговая таблица с баллами (10-балльная система):

Автор текста: Антон Тулупников