Как создать чатбота, использовать chatGPT, и не стать миллионером

 Публичный пост
9 января 2024  1612

Это история о том, как я захотел сделать что-нибудь с помощью chatGPT, и что из этого вышло...

Февраль 2023

В начале 2023 весь мир охватил хайп по нейросетям. Dall-E, MidJourney, и конечно же ChatGPT! Каждый день в своей ленте я видел посты как круто ChatGPT помогает в каждодневных задачах, выдает нужную информацию лучше любого поисковика, улучшает резюме, и так далее, и так далее.

Тогда еще никто не знал, что нейросетки начнут цензурировать, запрещать в некоторых странах, и обрубать доступ по vpn (моя личная боль)
Тогда еще никто не знал, что нейросетки начнут цензурировать, запрещать в некоторых странах, и обрубать доступ по vpn (моя личная боль)

Примерно в это же время я начал активно изучать английский язык, чтобы в будущем релоцироваться из РФ (вы можете сказать, что релоцироваться можно и без языка и будете правы, но как мне кажется, с языком может быть на один стресс меньше... или нет, хех), поэтому chatGPT стал дополнительным помощником в изучении языка.

Плюс, оказалось, что он весьма неплохо (на мой дилетантский взгляд) умеет проводить собеседования на английском языке. Но каждый раз вводить стартовый промпт мне было немного лень, а программистское нутро хотело запилить какой-нибудь pet-проект на Golang. Поэтому мне в голову пришла идея сделать Telegram бота, который умеет проводить моки интервью на английском по выбранной специальности.

К концу февраля мной был реализован первый работающий прототип, который хоть и плохо, но выполнял основную функцию. Для меня это было невероятно, как минимум потому, что за короткий период я сделал ровно то, что и хотел, не зря 6 лет в IT все-таки!

Основной сценарий работы первой версии выглядел примерно так
Основной сценарий работы первой версии выглядел примерно так

И, конечно же, мне захотелось выкатить своего бота в большим мир на собственный production сервер...

Март 2023

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

  1. Вариант в лоб: просто склонировать репозиторий на сервак и запустить приложение (есть еще вариант перекинуть папку с проектом через FTP, но этот вариант мы оставим для ценителей).
  2. И более сложный, но от того более интересный: собрать какой-то пайплайн деплоя, который делает следующее:
    • Билдит приложение в бинарный файл, заворачивает его в docker image, а затем этот image сохраняет в registry.
    • Выполняет миграции на продовой БД.
    • Берет image из registry и раскатывает его на продовом сервере.

Поскольку я использую github для своих личных проектов, то очевидно, что пайплайн нужно собирать на github actions. Почитав документацию и глянув примеры в других репозиториях мне удалось быстро набросать почти то, что нужно (еще успел стащить dockerfile билда приложения из статьи на хабре, который полностью покрывал мои хотелки).

Ладно, я врал что это было быстро
Ладно, я врал что это было быстро

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

Так сложилось что на работе всегда кто-то уже делал механизм деплоя за меня. Это могли быть ребята из SRE, другие разработчики, или же отдельная команда разработки, которая пилит и поддерживает PaaS (привет ребятам из Авито).

Pet-проекты же редко когда доводились до такого состояния, чтобы был смысл их выпускать в большой мир, а единичные случаи мне помогал закрывать heroku с его возможностями. В конечном счете мой опыт реализации этого действия ограничивался лишь теорией и общим пониманием всего процесса.

Да, на этом моменте вы можете спросить: "а почему ты просто не воспользовался снова heroku?", и у меня на него есть ответ! Этот проект был и пока остается как поле для моих экспериментов, поэтому мне захотелось пройти весь путь самому с нуля.

Путем недолгих изысканий и под влиянием лени я пришел к следующей схеме деплоя:

  • На сервере был поднят докер с нужным образом приложения.
  • При деплое воркер github actions подключался по ssh к серверу,
  • Останавливал и сносил старый образ,
  • Скачивал и поднимал новый образ.

Наверно это работало как-то так...
Наверно это работало как-то так...

По моему мнению это решение весьма топорное и не масштабируемое на большую нагрузку. К тому же подозреваю что docker swarm может помочь решить эту задачу на 100%, но к этому моменту запал энтузиазма начал угасать и я остановился на таком варианте.

А дальше все пошло, как обычно: желание пилить новые фичи закончилось, проект был слегка заброшен, а прод удален, чтобы не платить за него просто так... Но после относительно непродолжительного перерыва проекту была дана вторая жизнь!

Август 2023

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

В это время на работе как раз зашел разговор про стейт-машины и я подумал, что это идеальный вариант для бота. Этот паттерн решал проблему понимания, что пользователь и бот могут делать в данный момент. Конечно, сейчас такой подход кажется супер очевидным, но почему-то до самых простых решений всегда очень сложно "дойти".

Была набросана примерная диаграмма как это все должно работать:


Получилось всего три состояния:

  • Условное состояние по умолчанию, которое позволяет только запустить новую тренировку собеседования
  • Ожидание вопроса от бота
  • Ожидание ответа от пользователя

Кроме этого, под вдохновением, мной было реализовано множество переделок и доработок:

  • Билдер опросников для тг бота, чтобы можно было легко собирать цепочку из нескольких вопросов, а потом получать ответы на вопросы (я устал говнокодить логику, поэтому пришлось придумать что-то получше).
  • Сервис локализации, который позволял переводить весь текст на разные языки (тут я почему-то подумал, что буду расширять бота на другие страны).
  • Сервис приема платежей (скорее gateaway над api разных платежных сервисов), поскольку в это время у меня закралась мысль, что неплохо бы монетизировать бота, если им будут пользоваться. А еще мне просто захотелось сделать что-нибудь такое, потому что мне никогда не приходилось работать над приемом платежей хоть в каком-нибудь виде, хехе.
  • Множество доработок самого процесса тренировки: подсказки ответов, возможность пропустить вопрос, доработанное саммари после интервью, и т.д.

Здесь вы снова можете задаться вопросом, почему я писал свои велосипеды, а не использовал готовые решения? И ответ будет: "just for fun" 😜

Окей, было много, но работа все равно честная
Окей, было много, но работа все равно честная

И вновь мне захотелось выпустить бота в большой мир! Но как мы знаем процесс деплоя был весьма топорным, поэтому было решено его переделать. К этому времени я успел узнать о такой штуке как Coolify, которая позволяет на любой машине легко создавать и управлять БД, поднимать docker image из registry, и многое другое!

Также этот сервис имеет такую очень классную фичу, как деплой ресурса через вебхук (вы дергаете вебхук, а coolify подтягивает свежий образ из registry и деплоит его). (это не является рекламой coolify, потому что как минимум мне не заплатили за нее)

Таким образом мой сетап был следующим:

  • Взять VDS с линуксом.
  • На нем поднять Coolify.
  • Через Coolify создать себе БД и сервис для бота.
  • Сервис подтягивает собранный образ из github registry, когда шаг github actions дергает вебхук.

И на таких рельсах это живет до сих пор. При желании можно арендовать отдельную машину под БД и под приложение, но на данный момент я не вижу в этом смысла (пользуйтесь ботом @mock_ai_bot чаще, чтобы он появился).

К середине сентября семейные обстоятельства не позволили мне дальше заниматься ботом, и поэтому он снова был заброшен на неопределенное время...

Конец 2023

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

Мной было сделано нормальное описание бота, собрано лого из референсов, поправлены шероховатости в самом боте, и началось "продвижение"...

Сначала я написал комментарий в треде самопиара. Затем сообщение в чатике Индихакеров. А сейчас пытаю удачу на Product Radar (возможно на момент публикации этого поста проект уже появился на сайте, но это не точно).

А еще этот пост можно считать своего рода рекламой моего телеграм бота, хехе.

Что дальше

Как-то так
Как-то так

Каких-то конкретных планов у меня на данный момент нет. Конечно есть список возможных доработок (например, диалог через голосовухи, или же UI на собственном сайте). И если у бота появятся постоянные пользователи, у меня появится мотивация его поддерживать и допиливать дальше (и включать монетизацию конечно же).

А если не взлетит, то возможно я чуть-чуть допилю внутрянку и буду продавать сам код, как "готовый код бота для тренировки собесов на английском языке". Но пока что мной не был проведен ресерч насколько это вообще возможно и сколько денег это может принести.

А может быть бот так и умрет, оставив после себя интересный опыт, строчку в резюме, пару сообщений в клубе, и этот пост 😬

Так что же мне хотелось сказать этим постом? Морали здесь нет, я просто хотел поделиться с вами своей историей одного pet-проекта 😉

И ссылка на бот конечно же: @mock_ai_bot
А также ссылка на репозиторий с исходным кодом

Связанные посты
23 комментария 👇

Обычно миллион на gpt не заработать из-за счёта за сам gpt.

Но круто вообще, что довёл до какого-то конечного состояния, выглядит неплохо.

  Развернуть 1 комментарий

@mighty_conrad, нужно просто выручку называть заработком, тогда успех обеспечен;)

  Развернуть 1 комментарий

@mikekosulin, как мужик, который доллары по 99 центов продаёт - в чем прибыль пока неясно, но оборот бешеный!

p. s. этим мужиком был Адам Нейман

  Развернуть 1 комментарий
Mikhail Rosin Веб разработка. Фронтенд. Ранее тимлид, теперь разработчик на все руки. 10 января в 02:18

Круто получилось.

Я пробовал сделать пет проект с чатгпт и телегой.
В итоге у меня получился бот матершинник для чата троллей.

Вообще я хотел сделать бота типа extractive AI из моей базы знаний, но получилось настолько всрато, что я отложил это до лучших времен.
И оставил только матерящийся ИИ, он хотя бы оправдывал возложенные на него задачи :)

  Развернуть 1 комментарий

@vindi, бот матершинник это крутяк! )

Возможно для базы знаний надо делать файн-тун нейросетки, чтобы это все работало нормально (но это не точно)

  Развернуть 1 комментарий

@mo3golom, да, как раз и была потом идея довести fine-tune на своих данных. Но жажда "хуяк хуяк и в продакшен" путем копипаста со стековерфлоу не дала удовлетворительных результатов.

P.S. Мне как-то коллега сказал, что на сайте stackoverflow.com нужно копировать код с ОТВЕТОВ, а не вопросов.
Я попробовал для данной задачи так делать. Не, все-равно выходить какая-то дичь 😜

  Развернуть 1 комментарий

По идее это же все можно решить через GPTs, прямо внутри чатгпт.

Другая схожая идея была бы добавить голосовуху и проходить интервью в реальном времени.

  Развернуть 1 комментарий

@SergeyIvanov, да, сейчас это можно прямо в chatGPT решить) Когда начинал пилить вроде еще не было таких функции в чате

Голосовуху тоже хотел прикрутить, но как понял, что нельзя просто так впихнуть голосовые телеги в какой-нибудь whisper, подзабил на это (нужно делать конвертер формата через тот же ffmpeg, а мне лень)

  Развернуть 1 комментарий

@mo3golom, я подобную лень поборол тем, что тупо сделал минимальную обертку для вызова консольной утилиты, которая уже предустановлена, и сервис просто делает отдельные процесы, для MVP имхо самый оптимальный вариант, если точно не понимаешь как в идеале видишь
В таком варианте получил фичу буквально за несколько часов, "красивый" вариант после через библиотеку и без говнокода проще было адаптировать, т.к. уже потестировал

  Развернуть 1 комментарий

Пет проекты с гпт круто!
Я играюсь с нейронками уже почти год. Из последнего интересного щас есть Gemini от гугла с бесплатным API на 60 запросов в минуту: https://makersuite.google.com/ (нужен аккаунт гугла, зарегистрированный не в россии). Он еще в анализ картинок умеет, вообще пушка, хоть и немного глупее чем GPT 3.5.

Я бота с ним пока не сделал, но сделал тестовый сайтик без смс и регистрации: https://beta.studgpt.ru/

  Развернуть 1 комментарий

@AlexBs, Я попробовал. Это охрененно!
Давай дружить я буду у тебя учиться :)

  Развернуть 1 комментарий

@AlexBs, крутяяк, с изображениями особенно! Были мысли прикрутить другую нейронку к боту. Видимо как накатит вдохновение, буду играться с gemini )

  Развернуть 1 комментарий
Влад Клюев Дизайнер, js-разработчик. 11 января в 23:17

Блин, все мои коллеги-разработчики тоже не могут просто сделать git pull на своей вм-ке. На каждый проект тянутся докеры, дженкинсы, покупаются кластера монги, кубер где-то рядом притаился. И это чтобы просто повесить заглушку для будущего проекта.

Зачем? :)

  Развернуть 1 комментарий

Путем недолгих изысканий и под влиянием лени я пришел к следующей схеме деплоя:

Вроде нормальная схема. ВастрикКлуб так же выкатывается.

  Развернуть 1 комментарий

а кто нибудь может поделиться как монетизировать бота или продавать цифровые товары для всего мира? Для СНГ вроде понятно - в телеге есть платежи через Юкасса. Но я лично никогда ничего не покупал через встроенные платежи. Даже не знаю какие там правила и требования. А для зарубежных пользователей в реалиях пост 2022 года даже не представляю. PayPal там всякие для ру продавцев не подключить, да?

  Развернуть 1 комментарий

@AlexSv, Stripe, например

  Развернуть 1 комментарий

@vindi, сможет ли получить на свой счет выплаты владелец красного паспорта?

  Развернуть 1 комментарий

@AlexSv, Как я понял такие вещи можно подключить если у красного паспорта есть другой паспорт или внж другой страны.
Детали не подскажу, так как для оплаты вне РФ лично я не пользуюсь. А жена выставляет счета за свою работу через payoneer (зарегистрирован на внж, а не паспорт)

  Развернуть 1 комментарий

@AlexSv, как я понял у тебя Кипр работа, а значит есть право легально находиться там.

Могу предположить что wise\stripe\etc из необанков тебе доступны не только виртуалки, но и пластиковые карты, а еще iban, ведь Кипр это евросоюз (могу путать термины, заранее извиняюсь)

  Развернуть 1 комментарий

@AlexSv, тоже интересно. Для обладателей красного паспорта есть: https://lava.ru/ (но я не юзал), https://cardlink.link/ (ру карты хорошо принимает, в usd через раз), ещё криптой можно принимать через https://cryptomus.com/ru

  Развернуть 1 комментарий

@AlexBs, а в боте принимать оплату не обязательно нативно. Можно кидать юзеров на веб страницу с оплатой, иногда так проще в плане разработки бота

  Развернуть 1 комментарий

@AlexBs, нужны ИП ООО или можно на физика?

  Развернуть 1 комментарий

@AlexSv, сервисы полу-серые, поэтому оформляют как физика, даже самозанятость нужна. Еще вспомнил сервис https://enot.io/en

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб