gpt-4.1 пишет код
На днях, как известно, OpenAI подвезли несколько новых моделек, которые сразу получили множество лестных отзывов. Я в это время был занят одним ботом и как раз испытал gpt-4.1-mini в качестве переводчика с научно-английского на доступный русский. Сравнил эту "мини" с предшественницей (gpt-4o-mini) - разница огромная. Старая мини-модель переводит на уровне гугл-транслэйт 10-ти летней давности, новая - прям отлично, почти на уровне gpt-4o.
Но, больше всего меня заинтересовала шумиха вокруг способностей новой модели (gpt-4.1) к программированию. 4.1 доступна только через API, поэтому опробовать я её решил через IDE Windsurf, который давал к ней полный доступ бесплатно вплоть 21 апреля. В общем, предвкушая отличный кодинг я запустил IDE...
Началось отлично: поставил технические требования, описал задачу, GPT по этой задаче составил тех-задание, составил план действий, структуру проекта, структуру таблиц в БД. Просто супер!
Создал проект, папки, файлы..
И, как только мы перешли к программированию, сразу начались проблемы.
Проблема №1 - appsettings.Development.json
Несмотря, на явные мои указания, что нужен этот файл и для разработки настройки берём из него, GPT об этом забыл. Но, это пол-беды. Я напомнил. Тогда он добавил чтение конфигурации из него, но, почему-то, не глобально, а исключительно для логгера. Когда не отработала миграция, он вспомнил про этот файл и добавил его в DbContextFactory.
Короче, пытался он его всунуть в каждое место, где не хватало конфигов, пока я не сказал сделать это единожды для всего приложения. Ну тогда, как бы нехотя, он переписал по нормальному.
Идём дальше.
Проблема №2 - путаем местами поля моделей
Сделал GPT две модели примерно такого вида:
и вот такую:
Но странности именования полей, и вообще сама модель истории, которая не способна хранить историю изменений - ничто, по сравнению вот с этим:
ОМГ....
Естественно этот код даже не собирается. GPT трижды читал ошибки компилятора, и трижды советовал сделать какую-то дичь, пока я не исправил вручную.
Про то, что CancellationToken он добавил в сигнатуру метода, но решил не использовать, что нет обработок исключений и их логирования от репозиториев я вообще молчу.
Проблема №3 - юзаем метод вместо свойства
Написал он такой вот класс-обёртку для результатов сервисов:
Вроде всё ок. Ну понятно что для чего. Причём он САМ его написал. Да по моей просьбе, но сам. В тех-задание внёс, в план действий...
А потом в тестах вот такое пишет:
Assert.False(result.Success);
Тесты, естественно даже не собираются, нельзя в c# обратиться к методу как к свойству. GPT предлагает сделать Success свойством. Я возражаю, говорю это сломает нам инициализацию. Говорю - подумай! Я уже, если честно, злюсь на него - это ж ты сам написал и класс и тест. Ну простое же решение....
Но, решения он не нашёл.
Что же могло пойти не так?
Может быть виноват Windsurf. У меня сложилось ощущение, что модель забывала обо всём, что было дальше двух-трёх запросов. Странно, что при таких хороших отзывах модель выдаёт настолько плохой код. Ладно бы просто плохой, но он же даже не рабочий.
В общем, после такого опыта не могу разделить общих восторгов по поводу способностей новой модели в области программирования.
А у вас как gpt-4.1 себя ведёт в плане написания кода?