Как я, не зная ни строчки кода, писал скрипт для чатбота с помощью ChatGPT
Дисклеймер:
Я не программист. Наверняка эту задачу можно было решить одной строчкой кода и гораздо проще, чем получилось. Задача была проверить можно ли заставить ChatGPT написать работающий код, не вникая в него и не правя его руками.
Получился длинный пост. Если вы как и я не программист - пропускайте куски кода и читайте только комментарии Chat GPT к этому коду. Так же можно для интереса посмотреть комментарии в коде, начинающиеся с "#" там он описывает что выполняет каждая строчка этого кода.
Так же с chatgpt я имел дело впервые и запросы к нему могли быть не оптимальными.
Прелюдия
Итак, недавно попалась мне на глаза статейка, что ChatGPT спокойно прорешивает задачки по программированию с сайта leetcode, где выкладывают разного уровня сложности задачки для прогеров. Попалась и запала где то в закуток создания. А еще новость прошла, что недавно ЧатЖПТ версии 3,5 открыли всем желающим в пользование без регистраций и смс.
Сам я поигрываю порой в Battlefield 4 и люблю побегать в особый режим "Hardcore" на одной определенной карте "Operation Locker". Есть один сервер, где гоняют эту карту с этим режимом и присутствует достаточное количество игроков. Но на беду когда я захожу на страницу сервера, либо матч уже заканчивается либо идет другая карта. И вот подумалось мне: а как бы вот так сделать, чтобы мне приходило уведомление, мол карта ваша началась и народу - тьма. Заходите будьте любезны.
Вот тут и вспомнил я про волшебную коробчонку, что за любую задачу возьмется и размотает на раз-два. Стало мне интересно, а сможет ли обычный непрограммист по запросу получить рабочий продукт? Терять нам нечего, давай думаю поковыряю я его, авось и накодит мне что-нибудь!
К действию!
Для начала нужно было подключиться к чату и проверить что он действительно работает.
https://chat.openai.com - открылся (не без впн) и к моему удивлению начал мне отвечать без всяких регистраций.
Далее нужно было сформировать задачу. Начнем с основного - какие ключевые данные нам нужно получить? Есть страница, на которой мы видим данные сервера: https://battlelog.battlefield.com/bf4/servers/show/pc/3adab5... .
С этой страницы нам нужно получить данные о текущей карте и количестве игроков.
Опа. Оказывается в этой свободной версии Чатик не может ни обращаться по сторонним адресам, ни открывать файлы. Поразмыслив пришел к решению, что нужно скормить ему текст веб страницы прямо в чат. Заходим на страницу сервера, жамкаем правой кнопкой мыши и выбираем - "Показать код страницы". Получаем нехилый кусок HTML кода:
И такого еще страниц на 10.
Копируем текст в чат. Получаем результат:
Чатик подавился.
Лимит у него. Не переваривает длинный текст.
Начинаю вводить по кусочкам. Он начинает на основе каждого кусочка пытаться что то сообразить и долго писать мне про них. Пришлось приструнить:
Ожидаемо я несколько раз скормил ему слишком крупный кусок кода и он опять выдавал ошибку о переполнении. И данную ошибку нельзя отменить. Чат зависает и нужно начинать все с начала!
Когда в пятый раз запарываешь простую операцию по копированию кода.
В итоге я плюнул на огромный кусок кода на JavaScript, который не влезал целиком и решил оставить только HTML код, идущий до него. На удивление, этого хватило чатику чтобы сделать правильные выводы:
Кажись нашел.
Далее я попросил его проверить остальные части кода и убедиться, что более нигде упоминание текущей карты не встречается. Он начал показывать мне куски кода, где могло быть это описание и заявлять что тут его тоже нет. В итоге выдал:
Штош, круг подозреваемых сужен до единственного. Можно брать тепленьким.
А вот и код пошел!
Идем качаем питон, ставим. Для того чтобы записать код используем блокнот Notepad++.
Копируем код в блокнот, сохраняем в формате питоновского скрипта. Запускаем - шиш! Не установлены библиотеки для обращений к HTML страницам. Спрашиваем у Чатика как поставить библиотеки:
Открываем командную строку Windows, вставляем туда строчку.
Кажись поставилось.
Запускаем скрипт
Все что выдает скрипт - надпись Operation Locker. Не смотря на то, какая карта сейчас на сервере. Очевидно, чатик забыл, что надо пойти по ссылке и узнать какая все таки карта сейчас запущена. Да и в тексте кода что-то никакой ссылки не видно. Ладно, попробуем починить:
Уже интереснее.
Код ожидаемо не запустился потому что появилась новая библиотека requests, которую мы тоже устанавливаем с помощью PIP.
Запускаем еще раз:
Ано живое.
Скриптик показывает имя текущей карты. Это уже успех ящитаю. Идем пить чай, лечим нервы и думаем о тожестве технологий.
Поразмыслив о высоком вспоминаем, что помимо карты нас еще интересует сколько же бедолаг на ней сейчас подвергают друг друга избиению, ведь бегать втроем на сервере контрпродуктивно. Возвращаемся к чатику и требуем дополнительных данных:
Сразу не отходя от кассы просим сделать один скрипт из двух:
Запущаем. Получаем ж*пу с ручкой:
C:\Users\Admin>python C:\Temp\scriptBF4_01.py
Traceback (most recent call last):
File "C:\Temp\scriptBF4_01.py", line 24, in <module>
players_text = players_element.find('h5').text.strip()
AttributeError: 'NoneType' object has no attribute 'find'
Жалуемся чатику:
Если вы думаете, что я понимаю что он мне пишет, то вы ошибаетесь.
Сохраняем, запущаем:
C:\Users\Admin>python C:\Temp\scriptBF4_01.py
Название карты: PEARL MARKET
Текущее количество игроков на сервере: неизвестно
Вот так вот. Неизвестно. А еще искусственный интеллект называется...
Надо что то с этим делать. Взываем к совести:
"Конечно!" Давайте обновим. Какого единорога сразу то нельзя было нормально сделать?!
Ну что ж...
Стартуем.
C:\Users\Admin>python C:\Temp\scriptBF4_01.py
Текущая карта на сервере: PEARL MARKET
Количество игроков на сервере: 64 / 64
Ано живое! ч.2
Скриптец выдает нужные параметры, но очевидно, что использовать формат 64/64 будет не удобно. Нужно довести до очевидной цифиры. Требуем с Чатика:
Результат:
Количество игроков на сервере: 64
Воооот. Уже лучше! Теперь надо чтобы скрипт делал запросы на страничку сервера с определенной периодичностью и обновлял выводимые данные:
Сохраняем, запускаем.
C:\Users\Admin>python C:\Temp\scriptBF4_01.py
Текущая карта на сервере: PEARL MARKET
Количество игроков на сервере: 58
Текущая карта на сервере: PEARL MARKET
Количество игроков на сервере: 57
Текущая карта на сервере: PEARL MARKET
Количество игроков на сервере: 54
Итак, скрипт с определенной периодичностью обращается на страницу сервера и сообщает какая карта и сколько игроков там играют.
Лимиты поста ограничивают мой творческий фонтан. Если кому-нибудь будет интересно что тут написано, то сделаю вторую часть о том, как я прикручивал эту трихомудию к Телеграм-боту.
Первые выводы:
Можно ли заставить ChatGPT написать нужный вам код?
- Да, можно.
Сможет ли это сделать любая блондинка без логического мышления?
- Если ей сильно повезет и она укажет чату во всех подробностях и условиях что и как она хочет. У меня лично не получилось. Пришлось тыкать его палкой на каждом повороте.
Говорят, что версия 4.0 гораздо умнее, но она стоит 20$ в месяц, посему тестировать ея пока не желаю.
Всем удачи, берегитесь ИИ, оно умнеет)).