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.