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

Почему ничего нельзя вайбкодить — на примере Телеграм-бота

12м. чтение

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

60a9f70b2b57c4cd362734a5af84e4bb.png

Привет, Хабр!
На связи Вечерний – психолог и (так бывает) начинающий айтишник. И в последнем меня беспокоит тема подхода к IT – создания легкого кода, его применимости и последствий.
Айтишники, в особенности в начале пути, выбирают не париться и делают код сразу через ИИ, в лучшем случае оркестрируя, а в худшем подключая режим агента через условный Cursor (или ещё лучше посредством Replit или Lovable).

Сразу оговорюсь – я в восторге от возможностей LLM, и использую их ежедневно для изучения своих сфер и под типичные, и даже неожиданные задачи.

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

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

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

Но друг ответил: “Нафига мне кому-то платить, когда я могу бесплатно себе всё навайбкодить и настроить бота как угодно. Это же делов – ввёл пару промптов и всё готово, я просто скопирую их функции.”

Как вы поняли, понеслась.

Глава IМодерация

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

Тем более разработчик мой хороший знакомый – Дмитрий Титков (Дима, если ты ещё на Хабре, отзовись, не могу найти твой акк).

Собственно веб-интерфейс указанного сервиса
Собственно веб-интерфейс указанного сервиса

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

А когда в группу просачиваются спамеры, приходится 24/7 контролировать ход дискуссий (а общения в группе очень много, оно интенсивно и разбито на форум), и банить негодяев, иначе лента станет рекламной (и не факт, что рекламировать будут что-то законное).

У ChatKeeper есть общая база спамеров, которая обновляется в реальном времени, и которая не пускает человека прямо в группу. Да, это сервисное преимущество, но когда мы начали кодить антиспам и фильтры общения, мой друг уже начал сходить с ума, потому что никакой код и его обновления не смогли толково отсеивать спам-атаки.

В частности, опции фейс-контроля
В частности, опции фейс-контроля

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

Поняв, что ковровые бомбардировки банами убивают актив, вайбкодер решил внедрить систему предупреждений (варны). Логика простая: нарушил – получил предупреждение. Набрал 3 предупреждения словил мут. ИИ бодро выдал код, вайбкодер запустил бота. И всё работало... до первого перезапуска скрипта.

Оказалось, что ИИ забыл предложить подключить базу данных.

Скрипт хранил счетчик варнов в оперативной памяти (в словаре Python). Сервер перезагрузился, все нарушения обнулились.

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

А у сервиса система варнов настраивается мышкой: выбираешь срок жизни предупреждения, количество до бана и действие. Никаких миграций БД, никаких database is locked.

Окей.
Вайбкодер решил, что ему поможет инфа про дату создания TG-аккаунта, и это частично решило фейс-контроль. Но когда в группу ежедневно стучится по 30 человек, из которых 25 спамеры, и только 5 твоя ЦА, вы начнёте терять пользователей, потому что не будете успевать обрабатывать все входящие. Здесь всё равно нужен автоматизм, а его решение - уже не разработка.

Глава II Триггеры и киллер-фича

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

Когда с банами было покончено, он перешёл к своей главной цели – монетизации через воронку продаж.

Задача звучала так:

  1. Юзер пишет слово «цена»;

  2. Бот проверяет, подписан ли юзер на основной канал.

  3. Если да: выдает промокод на скидку;

  4. Если нет: пишет «сначала подпишись» и дает кнопку;

  5. Юзер подписывается, нажимает «я подписался», и получает промокод.

Логика простая и несложная в исполнении. У СhatKeeperBot тоже есть такая настройка.

Сначала ИИ выдал ему простыню из if message.text == 'Цена':. И это работало ровно до момента проверки подписки: оказалось, что нужно дергать API Телеграма, обрабатывать статусы (member, creator, left, kicked) и ловить ошибки.

Но настоящий ад начался на шаге 5.
Бот должен помнить, что юзер нажал кнопку «я подписался» именно в ответ на просьбу о подписке, которую бот отправил ранее.

Здесь вайбкодер познакомился с понятием FSM (Finite State Machine, Машина Конечных Автоматов).

Чтобы реализовать такой сценарий в коде (например, через aiogram), нужно:

  1. Объявить классы состояний (StatesGroup).

  2. Перевести юзера в состояние WAITING_FOR_SUBSCRIPTION.

  3. Написать хендлер, который ловит колбэк от кнопки, только если юзер в этом состоянии.

  4. Предусмотреть кнопку «Отмена» (state finish).

  5. Где-то хранить этот стейт (в Redis? В памяти? Снова здравствуй, сброс данных при рестарте).

ИИ, конечно, написал код. Но он забыл про импорты, перепутал версии библиотеки, и бот падал с ошибкой KeyError, когда юзер нажимал кнопку дважды.

Код превратился в нечитаемое месиво, а логику размазало по десяти файлам. И понимает написанное мной айтишник, но не рандомный вайбкодер. Наш герой тратил часы не на продумывание маркетинга, а на дебаггинга машины состояний.

Пока друг пытался объяснить ИИ, почему бот путает стейты, я открыл конструктор триггеров в ChatKeeper.

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

Вот как та же задача с ценой и подпиской решается здесь:

  1. Событие (Триггер): текст содержит «цена».

  2. Условие (Condition): Блок «Проверка подписки на канал». Перетаскиваем мышкой, вставляем ID канала.

  3. Ветка «Да» (True): Блок «Отправить сообщение» > «Твой промокод: SALE10».

  4. Ветка «Нет» (False): Блок «Отправить сообщение» с клавиатурой «Подписаться».

  5. Ждем клика: Бот сам понимает контекст. Не нужно писать машину состояний — она уже реализована движком сервиса.

46140565b915f55634037199d8af5523.png

В большинстве конкурентных решений (даже популярных типа Combot) триггеры линейны: Триггер > Действие. В ChatKeeper триггеры это цепочки.

И там можно без проблем накрутить сценарий любой сложности:

  • Юзер зашел > ожидание 5 минут > проверяем, написал ли он что-то > если нет, пнуть в личку.

  • Юзер отправил фото > переслать админу > админ нажал «ок» - юзеру одоббрили действие..

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

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

Глава IIIГеймификация и аналитика

Через пару недель перерыва (тогда я искренне верил, что он уже сдался) герой заявил, что пришло времея внедрить систему вовлечения активностей. Отчасти задротская тема, но в тематических, и особенно в игровых, группах она вполне заходит.
«Люди должны качаться, получать уровни, ставить друг другу респекты” И еще мне нужны анкеты для сбора заявок на модераторов. И графики!»

Помню, что в тот момент отошёл от дискорда и молча налил себе чаю. Я то знал, что сейчас мы войдем на территорию баз данных, состояний гонки (race conditions) и визуализации, где вайб столкнётся с суровым бэкендом.

Первая идея была проста: юзер отвечает на полезное сообщение > пишет условный “+” > карма автора растет. ИИ выдал код: update_user_reputation(user_id, +1). И поехали:

Первая проблема накрутка
Через час после релиза ребята в чате поняли фишку. Двое друзей зашли в ночной чат и за 10 минут набили друг другу рейтинг на уровне Бог сервера, просто спамя плюсами. Пришлось просить ИИ дописать проверки: таймауты, запрет на лайки самому себе и лимиты на повышение кармы в сутки, прямо как на Хабре. Скромный по ожиданиям код раздулся на кучу строк.

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

А теперь глянем как это реализовали кодеры: в ChatKeeperBot система репутации и уровней это модуль, и вы просто ставите галочку на «включить систему уровней».

  • Настраиваются звания (допустим 0 xp – новичок, 1000 xp – Властелин-палладин);

  • Включается защиту от накрутки (кулдауны, проверки);

  • Всё работает на их серверах с оптимизированными БД. Пользователи счастливы, а школьники или авантюристы с накруткой узнают что такое санкции.

Теперь анкеты и формы.

Вайбкодер захотел сделать опросник, чтобы получше изучать ЦА и всё-таки усилить фейсконтроль: “как вас зовут?”, “сколько лет?”, “почему хотите к нам?” ну и т.д..

Казалось бы, снова FSM (машина состояний), и несколько строк кода, но дьявол в деталях:

  1. Валидация: юзер на вопрос про возраст присылал стикер, а бот записал ID стикера;

  2. Далее данные, и они лежат в базе, и нужно их как-то достать? Вайбкодеру пришлось писать отдельный скрипт, чтобы выгружать это в CSV и пересылать себе в личку.

  3. И в процессе создание анкеты возникла идея прикрепить скриншот. Ну а обработка файлов в Телеграм API это отдельный квест с загрузкой/выгрузкой на сервер.

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

bbf560712aa79bc7514cbe7e0a02a3eb.png

Аналитика

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

Он открыл логи. Это был текстовый файл размером кучу Мб, забитый строчками вида: INFO:root:User 123456 sent message "лол".

Чтобы превратить такое дело в графики, нужно парсить логи или писать код, который пишет статистику в отдельную таблицу, плюс поднимать Grafana или писать свой фронтенд на React/Vue, чтобы рисовать красивые кривые.

В этот момент я открыл дашборд ChatKeeper.
Там было всё:

  • График сообщений по часам (сразу видно, что активность растет в 19:00);

  • Топ юзеров (видно, кого наградить, а кто главный флудер;

  • «Молчуны» — те, кто читает, но не пишет;

  • Динамика прироста/отписок.

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

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

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

Глава IVФинал технического похмелья и цена бесплатного

К концу эксперимента вайбкодер выглядел уставшим, хоть и более продвинутым в мире IT. Его бот по итогу работал, но требовал постоянного внимания как тамагочи с суицидальными наклонностями.

Он уперся в два фактора, о которых не пишут в туториалах вроде супербота за 5 минут:

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

В ChatKeeper (как и в любом нормальном SaaS) это делается через веб-интерфейс. Аргумент простой: писать свой фронтенд для управления ботом полноценный Fullstack-проект, и если вы не готовы писать админку на React/Vue, вас ждёт вечное ковыряние в конфигах через Cmd, Vim или Nano.

Вторая проблема надежность и хостинг.
Однажды ночью бот вайбкодера упал. Просто кончилась память на дешевом VPS, потому что потёк скрипт (memory leak частая проблема вайбкода, написанного без понимания управления ресурсами). Пока друг спал, в суперзазщищенный вайбкодом чат набежали боты с рекламой скама. Утром было недобрым (еще ведь надо было удалить ручками спамеров) и полным правок кода.

Заключение: когда кодить, а когда платить?

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

Чтобы быть честными (и чтобы тут в комментах меня не съели сеньоры,), попробую разделить мух и котлет.

Вам точно стоит писать бота самому (или вайбкодить), если:

  1. Вы учитесь. Лучший способ понять HTTP, API, базы данных и асинхронность, у вас выйдет крутой пет-проект.

  2. У вас ультра-специфичная задача, которую не покроет даже комплексное решение. Например, бот должен лезть во внутреннюю CRM завода «Красный Октябрь» по закрытому протоколу, проверять остатки гаек или забракованных конфет на складе и отправлять отчет директору по SMS. Готовые конструкторы тут бессильны.

  3. У вас $0 бюджета, но бесконечное время. Вы готовы тратить вечера на дебаг, настройку сервера и борьбу с обновлениями API Телеграма, и вообще вы энтузиаст.

Вам стоит взять готовое решение типо ChatKeeper`а если:

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

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

  3. Вам нужен Швейцарский нож. Вам сразу нужны модерация, триггеры, аналитика, репутация и капча. Собирать это из кусков кода как строить автомобиль из запчастей на свалке: весело, но и небезопасно.

Вместо вывода

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

Условный ChatKeeperBot не просто набор функций, а замена команды из разработчика верстальщика админок и модератора. И иногда проще заплатить сервису цену пары чашек кофе, чем платить своим временем и нервными клетками.

А с вами был Вечерний.
До встречи в строках кода :)

P.S. Дима, ещё раз спасибо за инструмент. А другу моему ещё раз благодарность за разрешение публикации и бесконечную самоотверженность.

Источник

Отказ от ответственности: Статьи, размещенные на этом веб-сайте, взяты из общедоступных источников и предоставляются исключительно в информационных целях. Они не обязательно отражают точку зрения MEXC. Все права принадлежат первоисточникам. Если вы считаете, что какой-либо контент нарушает права третьих лиц, пожалуйста, обратитесь по адресу service@support.mexc.com для его удаления. MEXC не дает никаких гарантий в отношении точности, полноты или своевременности контента и не несет ответственности за любые действия, предпринятые на основе предоставленной информации. Контент не является финансовой, юридической или иной профессиональной консультацией и не должен рассматриваться как рекомендация или одобрение со стороны MEXC.

Вам также может быть интересно