Как стать автором
Обновить

«ReadStreakBot» — как я начал «кодить» с чатгпт, не умея программировать

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров15K

Давно не заходил на хабр, а тут решил зайти и с удивлением обнаружил у себя аж целых 60 подписчиков. Спасибо вам большое, что вы подписались, теперь мне даже как-то неловко, что я так долго ничего не писал про Обсидиан. Видимо теперь придётся всё же написать (мой сетап за это время перетерпел многие изменения и мне есть о чём рассказать).

Но сегодняшняя статья, к сожалению моих подписчиков, будет не про Обсидиан, она будет про телеграмм-бота, чатгпт и чтение, потому что всё это время вечерами я занимался своим пет-проектом, о котором и хочу рассказать.

Дисклеймер
  • Есть люди, которые любят читать бумажные книги, мой бот не для них

  • Есть люди, которые уже читают по 10-20 книг в год, мой бот не для них

  • Мой бот для тех людей, которым в своё время не привили интерес к чтению (как мне) и которые хотят его привить

  • Мой бот не продаёт и не пиратит книги, вы кидаете боту книгу, которая у вас уже есть

  • Надеюсь бот не ляжет под хабра-эффектом, если ляжет - то не кидайте тапками, я постараюсь всё починить по мере своих сил

Начало

Всю сознательную жизнь меня тянуло в IT и, в целом, я считаю себя достаточно IT-шным человеком, но хотелось именно что-нибудь покодить. Пару лет назад даже были попытки в этом направлении, но в итоге это всё заглохло из-за высокого порога входа и из-за того, что между изначальной идеей и хотя бы первым прототипом лежала огромная временная пропасть, нужно было просмотреть и прочитать куча гайдов и уроков в стиле "Давайте мы напишем программу hello world" и т.д. Ну и в итоге переть на одном энтузиазме без видимых результатов не получалось и все попытки в итоге затухали.

Нейросети

В 2023 году начался хайп с нейросетями и сначала я затестил SD, очень понравилось, прям попал в состояние потока, не спал ночами, тестил разные модели, лоры и промты, смотрел видосы и т.д. Конечно же поигрался с SD и NSFW-контентом (генерить нюдсы дома? Это просто сказка какая-то), но всё никак не заюзывал чатГПТ, потому что думал "Ну чо там такого то?". А потом решил затестить и ЧатГПТ со словами "А чо если я прям вот русским текстом напишу ТЗ, что оно мне выдаст?" и оно выдало такое, что меня сильно удивило, а именно - готовый рабочий код, который просто надо скопировать в VS Code и нажать на Play и всё заработает.

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

Первоначальная идея

Из всех способов потреблять информацию больше всего мне по душе - чтение. Аудио - это только музыка, подкасты не вставляют, слушаешь 30 минут, а потом такой: "Ой а что было последние 30 минут?". Видео - ну такое себе, очень жалко потраченного на видео время, потому что во всех ютубах очень любят растягивать хронометраж и лить много воды.

И к 33м годам я понял, что я читаю очень много, но всё то что я читаю - это 100500 разных статей, после которых ничего полезного в голове вроде и не остаётся и вроде читаешь дофига, но вроде без толку. А чтение книг я пытался себе привить, но как-то не удавалось, на 1-2 хватало, а потом всё, внимание перетягивают статейки или игрульки. Так же я сознательно избегал всякие инстаграмы и тик-токи, но ютуб иногда посматривал и тут БАЦ-БАЦ-БАЦ на волне хайпа они внедряют ютуб шортс и временами я терялся там, потому что приложение ютуба стоить стандартно на телефоне.

И в один прекрасный момент у меня родилась мысль: "Прикольно если бы был бы книжный тик-ток". Так родилась идея для MVP:

  1. Приложение\тг-бот\нечто любое где можно читать текст

  2. Нечто присылает тебе отрывок из книги размером в экран

  3. Ты читаешь его, если нравится - лайкаешь и нечто присылает тебе следующий фрагмент

  4. Если дизлайкаешь, то книга меняется на случайную

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

Для меня это очень важный скрин, с него всё и началось
Для меня это очень важный скрин, с него всё и началось

И эта шайтан-машина выдала мне работающий код с первого запроса, я был в шоке. В тот вечер я сидел до глубокой ночи и в итоге сделал первый прототип на базе телеграм-бота, который мог принимать в себя книгу, разбивать её и присылать по запросу фрагменты по порядку.

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

Во что это выросло

Выросло в телеграм-бота ReadStreakBot и канал к нему ReadStreakBlog, который работает следующим образом:

  1. Скидываешь боту файл электронной книжки (fb2, epub и т.д.)

  2. Бот разбивает его на маленькие фрагменты

  3. Нажимаешь "Сл фр" бот присылает первый фрагмент

  4. Прочитал => Пункт 3

По сути это простейшая читалка книг внутри телеги
По сути это простейшая читалка книг внутри телеги

Затем бот начал обрастать функционалом, т.к. я любил раньше поиграть в игрульки, а все современные читалки очень скучные без социальных и соревновательных элементов не удивительно, что игры перетягивают внимание на себя. Я решил добавить уровни и прокачку в бота. Затем добавил топы дня\недели\месяца ну и пошло-поехало.

Про название и лого

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

BookNuggets - это был еще один вариант названия для бота
BookNuggets - это был еще один вариант названия для бота

В итоге остановился на ReadStreak - это как Winstreak в играх (серия побед) только Read. В боте даже есть такой топ по ридстрику, это кол-во дней с чтением, если читаешь каждый день - ридстрик копится. Если пропускаешь - сбивается, есть пользователи с ридстриком в 164 дня!

Про уровни

За прочитанные фрагменты бот присуждает уровни (прям как в RPG).
За прочитанные фрагменты бот присуждает уровни (прям как в RPG).

Эта функция нацелена на пользователей "Ачиверов" (из психотипов бартла и таким образом человек больше читает, чтобы повысить свой уровень)

Про топы

Бот считает сколько фрагментов кто прочитал и составляет топы дня, недели, месяца, года и вообще
Бот считает сколько фрагментов кто прочитал и составляет топы дня, недели, месяца, года и вообще

Эта функция нацелена на пользователей "Киллеров" (из психотипов бартла и таким образом человек больше читает, чтобы обогнать противников)

Про цитаты

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

Про режим блога

Бот может имитировать блог и сам присылать фрагменты в заданное время (как будто подписан на чей-то канал). Таким образом у бота есть шанс перетянуть внимание с каналов в телеге на себя

Про подгонялку

Бот может подгонять "Эй сегодня мало прочитал, вон тебя обогнали - читай больше"
Бот может подгонять "Эй сегодня мало прочитал, вон тебя обогнали - читай больше"

При чём её можно настроить на любое время, на сколько угодно раз с учётом часовых поясов.

Про случайную книгу

Бот позволяет избавиться от проблемы выбора книги, есть функция случайная книга. При этом функция работает так - если я кинул боту не 1 книгу, а сразу 10, то когда я нажимаю на кнопку "Случайная книга", то бот кидает меня на одну из тех 10ти книг, что я залил в бота, а не случайную книгу всех пользователей бота (это пиратство).

Где-то читал статью, что когда перед человеком стоит выбор из 50 вариантов, то человек с меньшей вероятностью вообще сделает выбор, чем если перед человеком стоит выбор из 2х вариантов. Вот эту проблему решает эта функция, вопрос "А что следующее почитать?" вы отдаёте на откуп бездушной машине.

Про уведомлять каждые N-фрагментов

Бывает такая ситуация, что читать книгу себя заставляешь, вроде начал и бросить на полпути как-то не бросишь. Но если задуматься, то книг в мире 100500 миллионов и если какая-то не цепляет с первых страниц, то смело можно скипать её и переключаться на другую. Эта функция нужна для того, чтобы взять отслеживание этого момента на себя. Бот можно настроить на любое кол-во фрагментов, например у меня настроено на 50 и через каждые 50 фрагментов бот говорит: "Эй, задумайся интересна ли книга? Если не интересна - скипни"

Про ники внутри бота

Кто найдёт галлюцинирование чаггпт - тот молодец
Кто найдёт галлюцинирование чаггпт - тот молодец

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

Известные баги

  • Бот не переваривает картинки из-за изначальной логики, исходный файл конвертируется в txt

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

  • Бот не присылает картинки из книг, но в целом тоже можно привыкнуть

Стек используемый мной:

  • Backend - Python - потому что самый популярный, sqlite - потому что нет пердолинга с установкой

  • Fronend - Telegram - потому что лучший мессенджер

  • Кодинг - ChatGPT - потому что я у меня у самого лапки

  • Деплой - VDS на винде у ВДСины (Потому что кодю на винде и чтобы потом не разрешать кучу конфликтов)

Про пользователей

Спустя неделю после создания прототипа я написал своим друзьям, жене, а потом когда уже сам стабильно читал начал всё больше и больше рассказывать всем о боте и так набралось 30 пользователей из них постоянные это 10-15 человек включая меня.

Случай с залётным пользователем:

Поначалу пользователей было вообще типа 3-4 штуки и я каждый день смотрел статистику читает ли кто-то и т.д. И тут вижу какой-то новый пользователь в статистике, а я никого не звал и все кто пользуется ботом тоже. А бот в телеге видит ник пользователя, ну и я по нему и вышел на девушку, спросил у неё откуда она нашла бота и т.д.

Оказалось, что она юзала другого похожего бота ("ЧЕГО О_о?" - подумал я, но в современном мире так много людей и идей, что не удивительно, что к разным людям приходят похожие идеи). Но с тем ботом у неё какие-то проблемы были и она нашла моего бота просто по поиску в телеге.

Мы до сих пор общаемся, она пишет багрепорты, фиче реквесты и благодарности (вот уж неожиданное взаимодействие с новым человеком).

Самые неожиданные трудности:

  1. Надо одновременно работать, читать в своём же боте и еще и его дорабатывать.

  2. Никак не могу достать картинки из книг и присылать их пользователю

  3. Пока не придумал как внятно разделять книгу на главы

  4. А еще не могу придумать как пропускать определять где начинается и кончается введение в книгах, чтобы сделать кнопку "Скипнуть введение", потому что часто в книгах в начале 100 страниц полной мути.

Про траты и заработок:

  • Вся моя поделка - это чистой воды хобби (борьба со стрессом, восстановление и отдых), зарабатываю я другими способами

  • Полгода тратил пару вечеров в неделю. Сейчас трачу на хостинг 24 рубля в день.

  • Монетизировать бота я бы хотел за счёт продажи книг, т.е. сам сервис я не хочу делать платным никогда

  • Но тут надо копать в сторону издательств или работы с автором, а до этого пока руки никак не дойдут.

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

  • Возможно кто-то с хабра сможет помочь в этом вопросе?

Планы на будущее:

  1. Решить проблемы с введением, диалогами и картинками

  2. Внедрить режим "Улучшение на 1% каждый день" или "Бой с тенью" - когда ты сравниваешь себя не с другими, а с прошлым собой и улучшаешь свой результат

  3. Цитаты 2.0 - контролируемый рандом в цитатах (чтобы за определённый период все пользователи получили все цитаты), чтобы всем присылалась одна цитата дня, чтобы можно было лайкать их и потом чекать самую залайканную цитату

  4. Полезные советы - включаешь и бот раз в n-е кол-во дней присылает случайный полезный совет о своём функционале

  5. Чекать темп чтения по книгам и по запросу выдавать пользователю и скорить книги по этому показателю, мол вот эту книгу легко и быстро читать, а эту долго и сложно

  6. Внедрить какие-нибудь ачивки, пока хз какие и как

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

  8. Статистика о статистике - чекать кто и как часто смотрит статистику и писать ежемесячно о топе стат-мэнов.

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

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

Немного статистики и достижений:

На данный момент мои текущие 10-12 активных пользователей, среди которых я сам

  • 42к фрагментов - прочитали все пользователи (с августа 2023 года)

  • 252 книги было загружено

  • 174 задач еще не сделано (всякие баги, фичи и т.д., которые я пишу сам себе)

  • 218 задачи уже сделано

  • 6 человек увлеклись чтением после того как поюзали бота (один друг бросил курить, прочитав Аллена Карра, другой начал читать бумажную Мангу, жена начала читать Кинга)

  • 15к фрагментов прочитал лично я

  • 129 постов в блоге

    вот такой отзыв греет душу
    вот такой отзыв греет душу

Ивенты

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

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

Топ-20 книг в боте:

  1. Граф Монте-Кристо - Александр Дюма - 3301 фрагментов

  2. Преступление и наказание - Федор Достоевский - 2985 фрагментов

  3. Дюна - Фрэнк Герберт - 2885 фрагментов

  4. Игра престолов - Джордж Мартин - 2163 фрагментов

  5. Идиот - Федор Достоевский - 1882 фрагментов

  6. Мессия Дюны - Фрэнк Герберт - 1758 фрагментов

  7. Дети Дюны - Фрэнк Герберт - 1588 фрагментов

  8. Финансист - Теодор Драйзер - 1538 фрагментов

  9. Семь навыков высокоэффективных людей - Стивен Кови - 1357 фрагментов

  10. Бог-император Дюны - Френк Герберт - 1158 фрагментов

  11. Сияние - Стивен Кинг - 1153 фрагментов

  12. Sapiens. Краткая история человечества - Юваль Ной Харари - 1137 фрагментов

  13. Мёртвая зона - Стивен Кинг - 1002 фрагментов

  14. Поток: Психология оптимального переживания - Михай Чиксентмихайи - 928 фрагментов

  15. Любовник Леди Чаттерли - Дэвид Герберт Лоуренс - 858 фрагментов

  16. История рыжего демона - Роджер Желязны, Роберт Шекли - 836 фрагментов

  17. Сага о живых кораблях. Книга 1: Призыв дракона - Робин Хобб - 835 фрагментов

  18. Библейские истории - Густав Гече - 812 фрагментов

  19. Мизери - Стивен Кинг - 804 фрагментов

  20. Сад - Марина Степанова - 741 фрагментов

Так же хотелось куда-нибудь приписюлить это, типа манифеста:

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

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

  • Багфиксы по запросу - Юзеры пишут - я фиксю в первую очередь то, о чём просят юзеры (если могу)

Цели моего проекта и данной статьи:

  1. Кодить - сейчас это переросло в формат "писать ТЗ для чатгпт так, чтобы это сразу работало, а если не робит, то писать ошибки и в крайних случаях самому разбираться в причинах". При этом этот подход прокачал моё программирование в 100 раз лучше чем уроки на ютубах.

  2. Читать - привить навык систематического чтения, не переключаться на 100 статей и блогов, сосредоточить фокус на одном в течение нескольких дней, прокачать фантазию и кругозор

  3. Писать - систематически вести блог о релизах в боте, писать что-то на постоянной основе в блог, это оказалось тоже весело.

  4. Коммуницировать - общаться, взаимодействовать, улучшать свою задумку, слушать мнения и конструктивную критику

  5. Сделать мир лучше - воодушевить кого-то своим примером (может быть кто-то откладывал какой-то свой проект в долгий ящик, а сейчас прочитает статью и энтузиазм придёт), а возможно кто-то привьёт себе навык систематического чтения

  6. Привлечь новую аудиторию в бота

Спасибо, что прочитали, пойду накидывать идеи для статьи про Обсидиан.

60 подписчиков - это уже огромная ответственность, спасибо вам, что вы подписались.

Теги:
Хабы:
Всего голосов 18: ↑16 и ↓2+16
Комментарии32

Публикации

Истории

Работа

Python разработчик
133 вакансии
Data Scientist
81 вакансия

Ближайшие события

AdIndex City Conference 2024
Дата26 июня
Время09:30
Место
Москва
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область