TL;DR: ChatGPT generates terrible buggy code faster than the average
software developer.

Для тех из вас, кто последние пару недель жил под камнем, вот определение ChatGPT из Википедии:

ChatGPT, что расшифровывается как Chat Generative Pre-trained Transformer, представляет собой чат-бот, разработанный OpenAI. ChatGPT построен на основе семейства больших языковых моделей OpenAI GPT-3.5 и тонко настроен с использованием методов контролируемого и обучения с подкреплением.

Прототип ChatGPT был запущен в ноябре 2022 г. и быстро привлек к себе внимание своими подробными и четкими ответами во многих областях знаний. Его неравномерная фактическая точность была определена как существенный недостаток.

Прочитав об этом в режиме нон-стоп, мне было очень любопытно протестировать этот новый удивительный ИИ. Прошло совсем немного времени, прежде чем я был очень впечатлен результатами. Тем не менее, это заставило меня задуматься… Это конец техники? Может ли ChatGPT принять требования и реализовать их в коде?

Чтобы проверить это, я решил попросить ChatGPT решить головоломку Пришествие кода 2022 — день 10. Поскольку обычно я пишу свои решения на функциональном программировании, я решил добавить и это в требования.

Итерация 1

напишите мне код на kotlin, используя функциональное программирование, который решит эту головоломку:

‹описание головоломки…›

Через несколько секунд я получил следующий код:

Итерация 2

Хотя код действительно хорош, я заметил, что он не соответствует вводу головоломки, поэтому я попросил ChatGPT принять ввод как List<String>.

Замените ввод функции списком строк, где каждая строка представляет одну операцию во входном файле

Ответ был очень быстрым:

Итерация 3

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

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

На этот раз ChatGPT даже не стал извиняться за ошибку (это я Каран?), а просто обновил решение:

Итерация 4

Обратите внимание, что эта версия уже включает в себя некоторый мусорный код. val operation = parts[0] нигде в этой функции не используется. это можно легко решить, используя анонимную переменную. например:

Более того, я сразу заметил еще одну ошибку в коде. addx операции должны занимать 2 цикла, а noop — только 1. Без паники, давайте попросим ChatGPT решить проблему!

В вашем решении есть ошибка, операция addx должна занимать 2 цикла, а операция noop — только 1

Решение пришло быстро:

Итерация 5

После этого я заметил еще одну ошибку в коде. так как addx занимает 2 цикла, нам нужно проверить, должна ли сумма сигналов быть currencyCycle * x или currentCycle * (x + value) в зависимости от расписания цикла. Я попросил ChatGPT исправить проблему:

в коде есть еще одна ошибка. поскольку addx занимает 2 такта, вы должны либо включить, либо исключить новое значение при вычислении суммы сигнала в зависимости от его расписания.

Быстро получил обновленную версию кода:

Итерация 6

Давайте избежим очевидного дублирования кода, которое мы здесь имеем. Решение по-прежнему неверно. addx не учитывает, следует ли включать значение в расчет.

Пока код, наконец, проверяет, на какой итерации мы находимся в addx. Он по-прежнему не принимает во внимание оценку стоимости. К этому моменту я уже был измотан, и (не очень) медленно, но верно у нас начал появляться спагетти-код.

Более того, ChatGPT просто потерял связь с моим браузером, и мне не хотелось начинать все сначала.

Для сравнения, это код, который я написал для решения задачи. Хотя он далек от совершенства, он проще, легче рассуждать, а также работает!

Заключение

Хотя ChatGPT, кажется, хорошо работает для человеческого взаимодействия, он работает очень чисто при написании кода из требований. Его можно использовать в качестве вдохновения для вашего кода, но, как вы видели, в какой-то момент я только начал отлаживать чужой код, и код был очень беспорядочным. Вот почему я не верю, что ChatGPT заменит нас в ближайшее время. Мы в безопасности. На данный момент.

Больше информации:

Первоначально опубликовано на https://yonatankarp.com.