Долго вынашивал идею, как-то применить GPT для массовых задач в кодинге. Одна из таких идей - документация. Бесячая ведь вещь, писать тонну текста. Другая идея - применить GPT для какого-то рефакторинга кода. Бывает ведь так, что нужно что-то отрефакторить, по сути простое, но муторное. Как раз с движком подвернулась такая задача.
Я сейчас перевожу сырые указатели на умные, а точнее на свою версию интрузивного шареного указателя (с опциональным сборщиком мусора для дебага). И вот это капец какая тупая работа: нужно прошерстить весь код, заменить сырые указатели на шаблонную обертку, и поменять места взаимодействия. Иногда нужно использовать слабые ссылки, когда ссылка идет "наверх" к паренту, овенру и т.п. В общем, много рутины, при этом напрягается две извилины мозга.
И вот я решил поизучать openai API, чтобы попробовать автоматизировать эту рутину. И закинул в него 10 баксов. Посмотрим что осталось...
Я сейчас перевожу сырые указатели на умные, а точнее на свою версию интрузивного шареного указателя (с опциональным сборщиком мусора для дебага). И вот это капец какая тупая работа: нужно прошерстить весь код, заменить сырые указатели на шаблонную обертку, и поменять места взаимодействия. Иногда нужно использовать слабые ссылки, когда ссылка идет "наверх" к паренту, овенру и т.п. В общем, много рутины, при этом напрягается две извилины мозга.
И вот я решил поизучать openai API, чтобы попробовать автоматизировать эту рутину. И закинул в него 10 баксов. Посмотрим что осталось...
image_2024-02-03_15-07-57.png
10.6 KB
4.5 доллара ушло на работу роботов
В общем, для меня было все довольно просто. Я наваял простой питон-скрипт (с помощью того же GPT), который шерстил сорцы в указанной папке и прогонял их через промпт. Вот такой промпт я применял:
replace raw pointers with Ref<>, except void* pointers.
Ref<> is a smart pointer like shared_ptr. Use const Ref<>& for function arguments with pointer types, also in overridden methods.
Dont replace void* pointers!! Remove default nullptr value for class members with type Ref<>.
If class variable is some kind of "parent", use WeakRef<>.
стоит отметить, я предварительно его немного обкатал, чтобы он не выдавал совсем уж дичь. Нужно очень точно формулировать то что тебе нужно, во всех деталях (а мог бы додумать, хех). Причем, постоянно забывает части и просто нарушает требования
replace raw pointers with Ref<>, except void* pointers.
Ref<> is a smart pointer like shared_ptr. Use const Ref<>& for function arguments with pointer types, also in overridden methods.
Dont replace void* pointers!! Remove default nullptr value for class members with type Ref<>.
If class variable is some kind of "parent", use WeakRef<>.
стоит отметить, я предварительно его немного обкатал, чтобы он не выдавал совсем уж дичь. Нужно очень точно формулировать то что тебе нужно, во всех деталях (а мог бы додумать, хех). Причем, постоянно забывает части и просто нарушает требования
Кроме проблемы промпта встретилась проблема ограничения запроса. Не все сорцы залезали в возможные рамки по количеству токенов. Хороший тест на раздутость сорцов ) Хотя я стараюсь не делать более 1000 строк.
Поэтому пришлось довольно топорно делить на куски - до 5000 символов. Да, получается может обрубиться кусок кода на непонятно чем. Но выискивать конец функции или класса - уже как минимум не тривиальная задача, а мне было лень
Затем, конечно же уперся во время выполнения запроса. Для сорцов его можно ждать минуты. Параллельные запросы сразу уперлись в лимиты. В общем, нашел более-менее приемлимый вариант и запустил
Поэтому пришлось довольно топорно делить на куски - до 5000 символов. Да, получается может обрубиться кусок кода на непонятно чем. Но выискивать конец функции или класса - уже как минимум не тривиальная задача, а мне было лень
Затем, конечно же уперся во время выполнения запроса. Для сорцов его можно ждать минуты. Параллельные запросы сразу уперлись в лимиты. В общем, нашел более-менее приемлимый вариант и запустил
test_gpt.py - PetStory - Visual Studio Code 2024-0.png
92.8 KB
полтора часа проворачивались сорцы только редактора
штош, зато эти полтора часа я был занят чем-то другим. Однако, количество сорцов весьма небольшое, буквально пару-тройку мегабайт. Что совсем мало по сравнению с серьезными проектами. У меня на работе, например, сорцы одной игры - это десятки мегабайт
● test_gpt.py - PetStory - Visual Studio Code 2024.png
424 KB
окей, посмотрим на сам скрипт. В целом, он весьма простой
При тренировке промта я пробовал разные куски кода через Copilot. Выходило, ну нормально. Но прогнав целые сорцы, результат меня разочаровал
Fork 2024-02-03 14.59.06.png
194.3 KB
вот пример где сработало хорошо
Fork 2024-02-03 14.58.29.png
68.8 KB
вот тоже, хоть и опечатку сверху оставил
Fork 2024-02-03 14.59.27.png
185.4 KB
во многих местах решил поменять табы на пробелы. Я пробовал ему явно это запрещать, но наверное он тоже считает что те кто ставит пробелы, зарабатывают больше
но в основном получалась полная херня. Постоянно фантазирует и вставляет откровенную дичь. Делает не то что ты попросил. Не делает то что ты попросил. Дальше, просто несколько примеров
остается понять, какую часть я смогу себе реально взять. Это сложно, потому что мне так же рутинно нужно все посмотреть
да, можно продолжить эксперименты с промтами, сделать систему подсказок для определенных сорцов и ситуаций и дотюнивания. Но, выгодно ли это? Я думаю скорее нет. К сожалению, для такой задачи GPT плохо подошел. Но я попробую еще идею с документацией, как-нибудь в будущем )
сегодня попробуем достать тему из закромов - про физику в играх.
Когда-то давно я очень этим увлекался, писал свои физические движки и симуляции. Есть даже несколько старых видео
- 3д физика
- физика тканей
- физика самолета
- физика авто
Все это писал сам, в основном по сторонним туториалам, ибо тогда мозгов было маловато чтобы до всего допереть самому. Например, как этот чел с gamedev.ru
Но общие принципы в голове сформировались, и имхо это полезно знать каждому разработчику игр
Когда-то давно я очень этим увлекался, писал свои физические движки и симуляции. Есть даже несколько старых видео
- 3д физика
- физика тканей
- физика самолета
- физика авто
Все это писал сам, в основном по сторонним туториалам, ибо тогда мозгов было маловато чтобы до всего допереть самому. Например, как этот чел с gamedev.ru
Но общие принципы в голове сформировались, и имхо это полезно знать каждому разработчику игр
YouTube
anphys
Anphys Rigid Body Demo
(C) http://sol-online.org
(C) http://sol-online.org