Найти в Дзене
ZDG

ChatGPT пишет программы, но им нельзя доверять

Сейчас можно найти очень много упоминаний вроде "нейросеть написала игру", "нейросеть создала сайт" и т.д.

Программисты больше не нужны! – ликуют нейроразработчики, операторы ИИ, инженеры запросов или как там они ещё себя называют.

Посмотрим, что происходит на самом деле?

ChatGPT использует информацию, собранную из интернета. Поэтому если мы попросим его написать Змейку или Тетрис, он их напишет. Ну а по факту – не напишет, а просто найдёт в своих нейрозакромах готовый пример. Аналогично тому, как мы бы это сами нашли в Гугле.

Самая же забавная часть начинается, когда мы хотим как-то модифицировать то, что получилось. До некоторых пор это также работает. Например, ChatGPT может понять, как заменить чёрный текст на красный, и т.п. Но это не критичные изменения, которые мы способны сделать и сами, просто взглянув на код.

Как только начинается нестандартная логика, железный болван начинает вести себя как настоящий болван. Даёт ответы, которые условно правильные, но ломают весь предыдущий код. Если попросить исправить ошибку – старательно её исправляет, но тут же делает новую.

Вот, к примеру, я написал материал про многопоточность:

А потом решил проверить, что мне подскажет ChatGPT по этой теме.

И вот что получилось

Я использовал онлайн-сервис RIX, который сделан на базе ChatGPT специально для программистов.

Rix - The AI-powered search engine optimized for developers

Итак, я спросил его,

как синхронизировать несколько потоков, читающих из одного кольцевого буфера, чтобы доступ к буферу имел только один поток в каждый момент времени?

Он выдал мне рабочий код:

Давайте следить за динамикой. Да, это был правильный пример. Но он был написан на C++, а я хотел получить код на чистом C.

Тогда я спросил его,

как сделать это вручную, не используя lock_guard?

Вот что он ответил:

-2

И снова правильно, но это не вручную, так как опять используется класс из C++.

Я спрашиваю ещё раз,

как сделать это, используя простые переменные, чтобы решение не зависело от языка и платформы?

Ответ:

-3

И тут мы приходим к решению, которое я описал в своём материале, но это решение неправильное.

Обратите внимание: на этой итерации, если вы уволили всех программистов и оставили ChatGPT, у вас уже проблемы и никто вам не поможет.

Я сообщаю об ошибке:

после проверки can_read и перед изменением can_read, другой поток может прочитать значение can_read и также получить доступ к буферу.

GPT соглашается с ошибкой и выдаёт новый результат:

-4

Стоп. Он уже допустил фатальную ошибку, так как условие while должно выглядеть так:

while (!can_read || counter > 1)

Всё, это конец. Но даже без этой ошибки код всё равно неправильный, о чём я и сообщаю:

если два потока увеличат счётчик на старте, они оба попадут в бесконечное ожидание, потому что счётчик будет > 1

Он соглашается, и переписывает код:

-5

Но теперь он совсем поплыл и делает бесполезные инкременты и декременты счётчика.

Напоминаю ему:

но счётчик здесь никак не проверяется.

Да, говорит он, и выдаёт новый код:

-6

И, как нетрудно видеть, это тот самый код, с которого мы и начали :) То есть круг замкнулся и ChatGPT оказался бесполезен.

Хотя в начале, если бы меня устроил именно C++ код, он бы пригодился. Но это и так элементарно гулится, робот здесь ничего особенного не показал.

И тем не менее, я пользуюсь ChatGPT для быстрого напоминания, проверки или уточнения чего-нибудь, и часто он оказывается более удобной версией Гугла. Но заменить им программистов... нет, не стоит этого делать. По крайней мере пока :)