Сравнение нейросетей: Почему ИИ не всегда ускоряет разработку кода и кто из них лучший?

Противореча общепринятому мнению, применение современных ИИ-решений зачастую замедляет деятельность опытных программистов при работе с уже известными кодовыми проектами, а не ускоряет её, как ожидалось. Это подтверждает недавнее исследование, проведённое некоммерческой организацией 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 (создание, получение, обновление и удаление задач). Данные хранятся в памяти, без использования базы данных. Код должен быть читабельным и понятным. Объясни работу кода и способы его тестирования».

Часть кода:

# Создаём экземпляр приложения 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 — задание выполнено качественно, но есть небольшой потенциал для доработок».

Часть кода:

# Создаём экземпляр приложения 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:

# Класс для описания структуры задачи (модель данных)

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. Пошаговые инструкции просты и понятны. Можно улучшить: добавить больше примеров ошибок и их визуализацию. Итог: В целом неплохо справился, но есть возможность для улучшений!»

Часть кода:

# Временное хранилище задач (в памяти)

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, DeepSeek и ChatGPT добавили обработку ошибок, даже несмотря на то, что это не было предусмотрено в задании.

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

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

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

Запрос:

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

Часть кода с ошибками:

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:

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

Поиск ошибок в коде:

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

Результат:

Исправленный код в общем функционирует, но в нем есть несколько ошибок.

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

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 всё же смог сделать рабочую игру про пса, собирающего кости. Ассеты собаки и косточек нейросеть сгенерировала самостоятельно.

Как и в других случаях, для написания кода была выбрана библиотека Pygame на Python. На этот раз GPT решил не добавлять комментарии или пояснения к коду.

Оценка от GPT:

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

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

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

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

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

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

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