Pull to refresh

Создание генератора поздравлений на GPT-3

Level of difficultyEasy
Reading time5 min
Views5.4K

Для начала небольшие вводные данные. Я студент 3 курса специальности прикладная информатика, знаю базово python, создавал небольшие игры на pygame, поверхностные познания html, php, css, слабые знания js, создал telegram-бот ChatGPT, которым пользуется большая часть моей группы и ещё несколько человек. Это моя первая статья на Habr и многие вещи могу описывать не профессионально, так что прошу строго не судить. Так же сразу отмечу, что я не профессиональный программист и web-дизайнер, так что с удовольствием восприму любую конструктивную критику.

У меня была большая проблема с написанием поздравлений, ничего больше "Поздравляю тебя с днём рождения и желаю всего самого наилучшего!" я написать не мог. Вернее, я мог написать что-то поинтереснее, но отправить это не мог. Но у меня был ChatGPT, так что в марте 2023 года я на хостинге, на котором у меня к тому времени работал бот, поднял сервер Apache (с Nginx у меня не вышло) и начал создавать структуру сайта. Учитывая тот факт, что я сайт планировал в долгосрочную перспективу, я решил делить сайт по продуктам компаний. В итоге туда вошли: Google, Microsoft, OpenAI, ВК, "Название моего учебного заведения", Сбербанк России. То есть каждый мой продукт, был связан с той или иной компанией. Страницу генератора поздравлений в итоге я разместил по пути OpenAI/GPT/Поздравление/. Самое интересное это то, что я был первопроходцем в этой области, так как подобных сервисов на нейросетях не было, так что конкурентов у меня не было.

Из интересного у меня размещён пресс-релиз Windows 1.0.

Доменное имя было желание выбрать sibir.ru или ponomar.ru, но так эти доменные имена были заняты, то через хостинг я купил домен ponomar-sibir.ru. Есть план в будущем выкупить домен sibir.ru (с него почему-то идёт переадресация на www.aviasales.ru).

Изначально планировалось использовать готовые решения, для взаимодействия с api OpenAI. Из готового был ChatGPT PHP SDK, но так как мои познания в php очень ограничены, я так и не разобрался как с ним работать, так что я перешёл к чтению документации OpenAI. У OpenAI есть два способа взаимодействия с api: curl и python. Так как поднимать сервер на python, чтобы взаимодействовать с php, у меня желания не было, пришлось изучать curl.

Моим первым вариантом было использование командной строки:

$output = shell_exec((string)('curl https://api.openai.com/v1/completions -H "Content-Type: application/json" -H "Authorization: Bearer Мой_токен" -d \'{"model": "gpt-3.5-turbo", "prompt": "Напиши большое поздравление '.$_GET["prompt"].'", "temperature": 0.5, "max_tokens": 500}\' '));

Но так как я понимал, что использование командной строки опасно, так есть риск, что могут отправить вместе с запросом вредоносную команду, в дальнейшем, изучив curl в php, код был переписан:

$dataString = (string)('{"model": "gpt-3.5-turbo","messages": [{"role": "user", "content": "Напиши поздравление '.$_GET["prompt"].'"}],"temperature": 0.7}');

$url = 'https://api.openai.com/v1/chat/completions';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataString);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Content-Length: ' . strlen($dataString),
	'Authorization: Bearer Мой_токен'
]);

$result = curl_exec($ch);
$jsonDe = json_decode($result,true);
echo $jsonDe["choices"][0]["message"]["content"];
curl_close($ch);

Итоговый код был записан в файл gpt.php, но нужно было ещё создать файл index.php. Итоговые основные пункты:

  • Стеклянные блоки.

  • Фон, созданный Midjourney (после отключения бесплатного доступа все остальные фоны для сайта были созданы Kandinsky).

  • Кроссплатформенность.

  • Стеклянные кнопки "Создать поздравление!" и "Скопировать в буфер обмена?".

  • Расширяющееся текстовое поле.

  • Запрос на файл gpt.php и вывод ответа в div.

  • Быстрые ссылки, при нажатии на которые отправляется запрос.

  • Чекбокс "Большое поздравление".

  • Текстовое содержание для поисковой оптимизации, написанный ChatGPT.

  • Яндекс метрика и гугл аналитика.

  • Яндекс реклама.

Насчёт последнего пришлось торговаться с совестью, так как рекламы я не люблю и везде, где только можно, использую блокировщик рекламы. Итоговым вариантом был рекламный блок 300x150 пикселей. Забавный факт: вечером 19 марта 2023, работая с сайтом и постоянно обновляю страницу, я заработал 3,65 ₽ и рекорд пока не побит.

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

После того как страница была готова в первоначальной версии, следующим этапом было рассылка ссылки на страницу своим друзьям. А также постоянный заход на свой сайт с очисткой кук и кэша. После чего оставалось только ждать, когда моя страница в Яндексе выведется в топ по запросам, допиливая какие-то функции на странице. На текущий момент страница моего сайта выводится на первом месте по запросу «нейросеть поздравление с днем рождения».

Так как запросов с течением времени становилось всё больше, а просматривать их в логе Apache было очень неудобно, так постоянно приходилось расшифровывать русские буквы, в файл gpt.php были добавлены следующие строки, которые являются смесью готового кода логирования и других скриптов:

date_default_timezone_set('Asia/Krasnoyarsk');
$date = date('m/d/Y H:i:s', time());
$file="base.log";    //куда пишем логи
$col_zap=4999000;        //строк в файле не более

$ip = $date. ' ' .urldecode($_GET["prompt"]);
$lines = file($file);
while(count($lines) > $col_zap) array_shift($lines);
$lines[] = $ip."\r\n";
file_put_contents($file, $lines);

error_reporting(E_ALL);
ini_set("display_errors", 1);

Но тут возникла проблем с тем, что скрипт не мог открыть и записать данные в файл, всё решилось командой sudo chown -R www-data: www-data /var/www. Не смотря на то, что изначально в переменную $ip записывался ip-адрес, у меня туда записывалась дата, время и запрос пользователя, так как я являюсь сторонником приватности и мне ip-адреса пользователей не нужны, а вот запросы пользователей я с удовольствием прочитаю.

В этом есть что-то философское, когда ты читаешь запросы и видишь жизнь человека, которого хотят поздравить, зачастую его профессию, иногда личную жизнь, причём некоторые были очень подробными. Приведу некоторые интересные примеры (часть информации я скрыл или переформулировал запрос):

  • "[Имя], с днем рождения математика корень ЕГЭ огэ".

  • Поздравление с 9 мая, написанное 17 апреля.

  • Поздравление сторонника расширения и укрепления узбекско-российских отношений

  • "Поздравление братского народа Азербайджана с днем независимости от Узбекистана!" - Что?

  • "[Имя], с днём рождения! Желаю много денег, коэффициент качества 1 медиану 32"

  • Поздравление замдиректора крупной российской нефтяной компании

  • Поздравление мамы от нелюбимой дочери.

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

Итого я пока имею около 30 посетителей в сутки и чуть больше рубля дохода в сутки, так что через 8 лет я смогу набрать 3000 рублей для вывода :) Основная проблема у меня в том, что люди на порядке чаще ищут поздравления с днём рождения, не добавляя слова "нейросеть", а конкурировать с устоявшимися гигантами я не могу. Был вариант сохранять поздравления пользователей при их согласии, но, так я сторонник простых решений и мои знания в web-дизайне по-прежнему на начальном уровне, я создал генератор сочинений и английскую версию генератора поздравлений. Генератор сочинений будет очень сложно вывести в топы Яндекса, так как написана ни одна статья про написание сочинения с помощью GPT и уже есть готовые генераторы сочинений, которые скорее всего не на GPT, но подвинуть их будет очень сложно.

Tags:
Hubs:
Total votes 7: ↑4 and ↓3+6
Comments11

Articles