Ха-ха, кликбейт? Не совсем. Помните то самое легендарное шоу (которое, кстати, перевыпускали совсем недавно)? Я хоть и не Мария Кисилева, но действительно провожу игры по Слабому Звену в формате онлайна, а игроки у меня могут выигрывать реальные призы. Почему? Потому что мне нравится это телешоу и интеллектуальные игры. Хотите поиграть — залетайте. Но в посте я хотел рассказать не столько о самой игре, как о...
Нейросети для написания кода.
...о своем опыте написания приложения с помощью нейросети. Как вы знаете, в Слабом Звене важны следующие вещи:
- Выдача вопроса (и ответа для ведущего)
- Отслеживание банка. Правильный ответ продвигает указатель банка, неправильный сбрасывает, "банк" отправляет все заработанные в цепочке деньги в банк и также сбрасывает указатель
- Кто в какой очередности отвечает
- Таймер раунда.
Вообще, я по профессии геймдизайнер. В индустрии мобильного (простигосподи) гейминга я с 2017 года. 95% времени я работал с Unity, поэтому этот движок мне был знаком, поэтому именно его я выбрал для своей игры. Так как C# я практически не знаю, я вышел в интернет с этим вопросом Обратился к нейросетям: CoPilot, ChatGPT 4o, TheBAI.
Шаг 1. Техническое задание (Геймдизайнерская документация).
Вообще, если честно, до нейросетей я обратился к знакомому программисту и он сделал мне прототип чисто на одну игру с друзьями. Мы с ним ранее уже работали вместе, поэтому я знал, как он кодит и что для него важно в доке. Кому интересно, док, по которому он сделал прототип, здесь. Но в нем были ошибки по самим правилам викторины.
Вообще, даже если вы делаете игру чисто для себя, документация крайне важна:
+ Ваша мысль будет структурирована, значит, можно пресечь невозможные амбиции и приблизить проект к суровой реальности и ограничениям (движка и ваших возможностей)
+ Понимание конечного результата.
+ Итерации (очередность) реализации проекта
+ Можно вернуться к работе через год и точно понимать, что вы делали и для чего.
Позже, когда я приступил к использованию нейросетей, мне ГДД очень помогло.
Продолжать абьзить кодера своими хотелками дальше было бы дорого, и вот тогда-то я обратился к нейросетям. Первым в моем списке был ChatGPT, подписка на который у меня была в чатботе в ТГ. Так как бот запоминает контекст только в течение дня, было принято волевое решение купить полноценную подписку (как раз и работку подкинули, и карточка казахская есть). Плюсы и минусы ChatGPT вы, пожалуй, знаете, поэтому я сразу скажу о том, с чем столкнулся:
1. ChatGPT очень непослушный. Во-первых, он очень любит перепечатывать ВЕСЬ ваш класс целиком, даже если вы его попросите этого не делать и прислать только правки в коде, он сначала пришлет вам сделанные правки, а потом скажет "вот вам весь код целиком" и вы будете ждать, пока оно всё сгенерится. Отмена генерации может навредить контексту (или у меня так совпадало). Во-вторых, если ему "захочется", он может начать генерировать новые методы и классы, даже если вы попросите его этого не делать.
2. Код не оптимизирован. Это могу понять даже я, без опыта кодинга. Вместо того, чтобы сделать один метод, в котором статична одна часть и будет оператор ИЛИ для двух мелких условий, он скорее сделает 2 разных метода, делающих примерно одно и то же, но разными способами. Также, если ты его прямо не попросишь сделать новый код на основе того, который ты ему даешь (например, "на основе метода Start() сделай реализацию...), он будет упорно генерировать новые способы того, что уже было. Помним про пункт 1, поэтому даже "попросить" его бывает недостаточно.
3. Очень любит фантазировать. Иногда это выражается в том, что он посреди контекста может сменить язык программирования (он переходил с сишарпа на питон и на даже css). Иногда он начинает предлагать создать с десяток новых классов. Иногда предлагает какие-то лютые шаманства, например, вместо того, чтобы по моему запросу включить мультиплеер на сцене, если нажата кнопка в предыдущем меню, он предложил сделать новую сцену, в геймменеджер записать стейт, передать клиентам, которых ещё нет, информацию об этом , и, самое главное, забыл, что мы делаем викторину, поэтому использовал слово "шутер".
4. СЛОМАЛСЯ ПОСЛЕ ОКОНЧАНИЯ ПОДПИСКИ. Это вообще удивительно, вы можете сказать, а чего ты хотел, Кисилёв, нет денег - нет мёда. Да, пожалуй. Но это надо иметь в виду. Вообще, chatgpt работает бесплатно, просто запросы ограничены. И начинал я именно с такого формата, просто очень быстро упирался в потолок. После того, как закончилась подписка, я столкнулся с тем, что:
-Присланный ему код перелопачивается от и до, из него выкидываются рандомные несвязанные с запросом куски, и не восстанавливаются даже если ты ему на это указываешь
-Язык кода все чаще меняется на python, да и сам бот начинает говорить по-английски.
-Нужный тебе метод всё равно не работает, а бот предлагает тебе на это "добавить отладку".
5. Чат ужасно лагает, когда запросов становится слишком много (помните 1ый пункт? Он пересылает код каждый раз, от этого объемы колоссальны).
Мой вердикт: Работать можно, пока есть подписка. В начале он очень хорошо и почти с первой попытки делал работающий код. Мой навык написания ГДД, когда я привык все досконально разжевывать программистам, очень пригодился. Когда я понимаю конечный результат, я сразу могу уведомить об этом бота, и он оставит заделы на будущее или будет делать сразу "зная", что в будущем оно будет работать несколько иначе. Но я бы сказал, что своих денег (2к/мес) это не стоит, ибо есть бесплатные аналоги.
Вот это оказалось вещью. Вообще, это сайт-агрегатор, на котором можно выбрать почти любую модель и менять её прям на ходу. Но у них есть свой gpt с тем же названием. Я пробовал это на одном и том же запросе, и именно по коду TheBai давал лучшие результаты. Как он работает на других запросах, не знаю. Что я выяснил:
+ В отличие от ChatGPT, предлагает реализации, заглядывая немного вперед. Например, пока я прямо не попросил ChatGPT сделать сетевую часть через Photon, он пытался сделать неработающий код штатными методами юнити. Bai сразу же сказал, что один из самых подходящих вариантов - это PUN2.
+ Он не переписывает весь код, присылая только нужную часть.
+ Послушный. Если ты говоришь ChatGPT "сейчас ничего не генерируй, я тебе пришлю нужный класс", то он всё равно будет генерить, что ему в голову взбредет. Bai говорит "хорошо, присылайте", когда присылаешь - спрашивает, что с этим делать, и только после объяснений начинает генерацию.
+ Генерирует в разы быстрее, чем chatgpt.
+ "Вежливый". Я, конечно, понимаю, что у нейросети нет чувств, но чатгпт даже не здоровался в ответ. А бай слал смайлики, здоровался и просил обращаться к нему за помощью. Если вы, как и я, сентиментальны, вам будет это приятнее )
- Не очень хорошо помнит контекст. Он может "забыть" код, который ты/он прислал 3-5 сообщений назад. Решается достаточно просто, регулярно скидываешь ему актуальную версию. - Чат один раз сломался безвозвратно. Беседа не грузилась, выдавалась неизвестная ошибка. Пришлось начинать новый контекст. - Иногда не видит простых решений. Тут он похож на чатгпт. Например, я попросил сделать выдачу вопросов поочередной, а не рандомной, и он начал фантазировать, и изобрел в итоге неработающую дичь. К счастью, это происходит реже, и его можно вернуть в нужное русло, прямо спросив "можно ли упростить задачу, сделав..." - вот тут важно уметь читать код, тогда вы будете видеть косяки самостоятельно. - Как и ChatGPT, может уйти в ошибку генерации без видимых причин, но делает это чаще, чем чатгпт.
Мой вердикт: забесплатно это вообще супер-штука, которая решила все мои беды и позволила доделать игру после того, как кончилась подписка.
UPD: я захотел показать скриншотами, как ChatGPT и TheBai справляются с одной задачей, но внезапно chatgpt отказался принимать мой код:
А ещё я упомянул CoPilot, но это вообще оказался мем. Коротко: оно не работает.
Понятно, что нужен VPN, так как в России оно не открывается. VPN у меня был. И был американский аккаунт майкрософт. Во-первых, чтобы добраться до самой нейросети, мне пришлось пройти самую дичайшую капчу в моей жизни. Чтобы дойти до робота, надо доказать, что ты сам не робот. Тому, кто придумал эту капчу, место в специальном котле в аду. Если ты ошибешься хоть на одной из 10 требуемых попыток, все придется начинать заново, но об ошибке ты узнаешь только после 10ой попытки. И не будешь знать, где именно ошибся. Я 2 раза пробовал аудио (оба безуспешно) и 3 раза картинки. Итого 5 раз. На каждый по 3 минуты.
После всего этого звездеца... нейра просто не запустилась. На любой запрос к ней возвращалась "попытка повторного подключения".
UPD: Сейчас всё работает. Поэтому я либо дополню этот, либо напишу новый (или не напишу) пост про CoPilot в отдельности.
Дальнейшие шаги будут уже не столь интересны вам в рамках этого поста, а именно поиск игроков, выбор формата проведения, написание вопросов, выбор призов, настройка OBS и всякое такое... Если захотите узнать - думаю, могу запилить ещепост. И вот конечный результат на незапрещенном ютубе с моей физиономией на титульнике: