Проект: Wakey — анонимно желаем доброго утра  Публичный пост
11 ноября 2024  549
Wakey — анонимно желаем доброго утра
https://t.me/WishGoodMorningBot

Ещё тут о том, как нейросети заменяют программистов-джунов.

Расскажите о себе и сути проекта?

Короче, новый Телеграм-бот.

  1. Пишете краткую информацию о себе.
  2. Каждый день бот присылает уведомление, чтобы вы остановились и записали свои чувства и мысли.
  3. Можно посмотреть профиль и статус случайного человека и анонимно написать ему какой-нибудь поддерживающий комментарий.
  4. Если вам кто-то напишет, бот пришлёт это сообщение на следующее утро к моменту вашего пробуждения.
  5. ???
  6. Тренируем осознанность, начинаем день с тёплых пожеланий.

пожелание от нейросети для скриншота
пожелание от нейросети для скриншота

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

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

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

Ещё есть предварительная модерация сообщений силами нейросети. Каждое новое сообщение отправляется на проверку, и нейросеть выставляет ему оценку от 0 до 100, где 0 — абсолютно безобидное доброжелательное сообщение, а 100 — явно выраженное целенаправленное нарушение. Если оценка выше определённого порога, то сообщение отправляется мне на ручную модерацию.

Пока что почти всем сообщениям выставилась оценка 0. Двум было 15 и 30, но там это произошло только из-за обсуждаемых тем, никаких нарушений не было. Жалоб мне тоже не приходило. Надеюсь, эти функции мне и не понадобятся, но на всякий случай они есть.

Как появилась идея? Что вдохновило?

Все началось с бота для налаживания режима сна Слипи. Там есть функция отправки сообщений другим пользователям. Но вся информация о получателе, которую бот выдаёт — это имя и город. Поэтому непонятно, что ему вообще стоит пожелать.

Так как это бот про сон, то обычно там желают хорошо поспать. И вот есть, например, Дмитрий из Петербурга. Что ему написать? "Дмитрий, желаю тебе самого дмитристого сна в твоём петербужистом Петербурге"? Многие не пишут даже этого, а просто желают доброй ночи без всякой фантазии. Некоторые классные люди сочиняют интересные приятные пожелания. Кто-то пишет не про сон, а про вещи, которые на самом деле, вероятно, хотел бы для себя.

иногда вообще приходит только смайлик
иногда вообще приходит только смайлик

В целом, прикольная функция, но сообщения часто либо неискренние, либо не о том, что хотелось бы. Так я и подумал, что было бы прикольно, если бы можно было получать пожелания именно для тебя про твою текущую ситуацию.

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

Что вошло в прототип и сколько времени на него было потрачено?

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

Какой технологический стек вы использовали? Почему?

Бот написан Go, потому что он быстрый и простой, и я на нём уже писал ботов. Для хранения используется SQLite, потому что больше пока не требуется. Весь код писал в среде разработки Zed, о которой узнал как раз недавно в комментариях здесь же, потому что было интересно попробовать.

На данный момент в проекте около пяти тысяч строк кода. Или, если точнее:

Из них пару сотен строк я скопировал из своих предыдущих ботов. Это основной класс бота, инициализация, логирование. Наверно, около сотни строк я написал сам. Это некоторые структуры и интерфейсы и что-то ещё по мелочи. Остальные ≈4700 строк за меня написала нейросеть Claude 3.5 Sonnet. А я только редактировал и исправлял за ней ошибки.

В целом, впечатления от разработки с помощью нейросети у меня скорее положительные. Для таких простых небольших проектов это реально круто. Мне сложно сейчас оценить, сколько времени у меня бы заняло написание всего бота по старинке, но по ощущениям она очень сильно ускорила разработку. Хотя иногда вспоминался анекдот про секретаршу, которая умеет печатать со скоростью 2000 символов в минуту, но такая фигня получается!

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

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

Нейросети сложно в точности скопировать существующий код. Иногда я прошу ИИ что-то поправить или добавить в уже существующую функцию. Она переписывает код и добавляет туда пару новых строк, как и нужно. Но с небольшой долей вероятности она может что-то изменить и в других строках. Например, у меня упорно меняла порядок сортировки в строке запроса ORDER BY created_at DESC. Видимо, потому что ASC в обучающих данных встречался чаще.

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

В длинном контексте начинает больше запутываться. Сама предложила мне написать для тестов мок библиотечного интерфейса, в котором около 50 методов. Но написала только часть из них. В итоге тест даже не компилировался, так как интерфейс не реализован. Я пробовал указывать ошибки, но она добавляла только по одному методу. Кинул документацию прямо в чат. Она ответила, что сейчас все напишет. В итоге снова написала только часть, и некоторые методы перепутала с другим классом. Я забил и дописал и исправил остальное руками.

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

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

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

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

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

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

В целом, я продолжаю считать, что нейросети — это полезный инструмент, при возможности и необходимости его надо использовать, но и не больше того. Это просто новый уровень абстракции. Сначала программы писались в машинных кодах, потом на языке ассемблера, постепенно переходили к более высокоуровневым языкам, придумали разнообразные фреймворки, запустили no-code платформы. Сейчас постепенно переходим к новому этапу — начинаем писать программы запросами к нейросетям. Но в серьёзных проектах без написания кода все равно не обойтись. Инструменты развиваются, суть остаётся.

Как вы запускались и искали первых пользователей?

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

Сколько потратили и заработали? Есть идеи как это можно монетизировать?

Потратил только время. Бот крутится на том же сервере, что и другие мои боты. К ИИ подключаюсь пока бесплатно. Больше ничего ему не нужно.

Монетизировать — добавить платную подписку с дополнительными функциями? Добавить возможность обсуждать свой статус с ИИ, как с другом, который все понимает, во всем поддерживает и не осуждает? Не знаю, не особо есть идеи.

Какие планы на будущее?

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

Нужна возможность жаловаться на тексты в профилях и статусах. Возможно, что-то ещё доработать и исправить.

Нужны ли какие-то советы или помощь Клуба?

Просто буду рад, если вам понравится. И будет интересно услышать любые идеи.

Аватар Василий Ходаков
Василий Ходаков @binque
Разрабатываю на С++Испаер
📍Белград, Сербия

тг вк инст хабр гитхаб

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

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

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

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

@Genapoliss, да-да, тоже помню его!) Сейчас жаль, что недолго пользовался. Говорят, к ним нахлынули двачеры, и пришлось оставить только звонки от робота

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

@binque, кхм... https://wakie.com/ и группа в вк есть, где написано, что это как раз экс-будист. прила вроде тоже работает

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

@korobkov, я ставил себе это приложение, но не увидел функции, чтобы тебя разбудили. Это просто какой-то Твиттер, где ещё можно звонить людям. И там нет или очень мало русскоязычных

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

@Genapoliss, о да. Поначалу было весело, а потом стали звонить только роботы, а не человеки

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

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

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

@alexkhismatulin, спасибо за идею, подумаю

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

😎

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

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


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