История успешных вайбкодеров напоминает истории успешного успеха: рассказываю о личном опыте, как мой друг вайбкодил бота под свой проект, и не смог, а сервис, который он пытался скопировать не делался за пару вечеров под сериальчик.
Привет, Хабр!
На связи Вечерний – психолог и (так бывает) начинающий айтишник. И в последнем меня беспокоит тема подхода к IT – создания легкого кода, его применимости и последствий.
Айтишники, в особенности в начале пути, выбирают не париться и делают код сразу через ИИ, в лучшем случае оркестрируя, а в худшем подключая режим агента через условный Cursor (или ещё лучше посредством Replit или Lovable).
Сразу оговорюсь – я в восторге от возможностей LLM, и использую их ежедневно для изучения своих сфер и под типичные, и даже неожиданные задачи.
Он не поймёт за вас документацию, не вошьёт в голову фреймворки, и не научит синтаксису (если, конечно, не учиться этому через него). Короче, вайбкодя айтишником не становятся, хотя уже выросший айтишник может использовать ИИ под свои задачи, полностью понимая и контролируя процесс.
Но уже сейчас я с ужасом сталкиваюсь с начальниками вполне серьезных проектов, которые считают ИИ волшебными кнопками, чем серьезно подрывают психику и нагрузку собственных сотрудников. Вдобавок на теме паразитируют инфоцыгане, блогеры, хайповщики, создатели каких-то разных пет-продуктов на базе ИИ, и лобби вайбкода ощутимо растёт.
Но если с начальством спорить тяжело, то мне довелось поспорить с другом, который заведует довольно большой тематической группой в Telegram (ссылку давать не буду, чтобы не плодить рекламу, плюс владелец разрешил рассказать эту историю, но пожелал остаться неузнаным). Чтобы лучше администрировать, развивать продукты и получать данные c обратной связью он захотел прикрутить бота, но с довольно комплексной задумкой.
Я предложил ему решение из коробки: ChatKeeperBot, в котором есть всё что нужно: от модерации до сбора обширной статистики, которым я сам пользовался под свои проекты.
Но друг ответил: “Нафига мне кому-то платить, когда я могу бесплатно себе всё навайбкодить и настроить бота как угодно. Это же делов – ввёл пару промптов и всё готово, я просто скопирую их функции.”
Как вы поняли, понеслась.
Чтобы оценить и познать весь ужас и отчаяние товарища (далее Вайбкодер), мы будем сравнивать попытки нашего вайбкодера с уже названным и стабильно существующим сервисом.
Тем более разработчик мой хороший знакомый – Дмитрий Титков (Дима, если ты ещё на Хабре, отзовись, не могу найти твой акк).
Начнём с базового: проблема спам-атак.
Чтобы не пустить к себе в канал спамеров вместо ЦА, многие делают фейс-контроль (закрывают группу, вручную отбирают пользователей). Проблема в том, что акки спамеров настолько хорошо притворяются живыми, что отличить их от засланцев большая трудность.
А когда в группу просачиваются спамеры, приходится 24/7 контролировать ход дискуссий (а общения в группе очень много, оно интенсивно и разбито на форум), и банить негодяев, иначе лента станет рекламной (и не факт, что рекламировать будут что-то законное).
У ChatKeeper есть общая база спамеров, которая обновляется в реальном времени, и которая не пускает человека прямо в группу. Да, это сервисное преимущество, но когда мы начали кодить антиспам и фильтры общения, мой друг уже начал сходить с ума, потому что никакой код и его обновления не смогли толково отсеивать спам-атаки.
Где-то код пропускал ссылки, где-то репосты, а где-то банил нормальных пользователей. Умные спамеры прячут свою рекламу в описании профиля, и это тоже оказалось огромной проблемой.
Поняв, что ковровые бомбардировки банами убивают актив, вайбкодер решил внедрить систему предупреждений (варны). Логика простая: нарушил – получил предупреждение. Набрал 3 предупреждения словил мут. ИИ бодро выдал код, вайбкодер запустил бота. И всё работало... до первого перезапуска скрипта.
Оказалось, что ИИ забыл предложить подключить базу данных.
Скрипт хранил счетчик варнов в оперативной памяти (в словаре Python). Сервер перезагрузился, все нарушения обнулились.
Вайбкодер убил еще 3 дня, пытаясь заставить ИИ прикрутить SQLite, потом боролся с ошибками многопоточности (когда два юзера пишут одновременно, и база лочится), и всё глубже просвещался в айтишке.
А у сервиса система варнов настраивается мышкой: выбираешь срок жизни предупреждения, количество до бана и действие. Никаких миграций БД, никаких database is locked.
Окей.
Вайбкодер решил, что ему поможет инфа про дату создания TG-аккаунта, и это частично решило фейс-контроль. Но когда в группу ежедневно стучится по 30 человек, из которых 25 спамеры, и только 5 твоя ЦА, вы начнёте терять пользователей, потому что не будете успевать обрабатывать все входящие. Здесь всё равно нужен автоматизм, а его решение - уже не разработка.
Нужно отдать должное вайбкодеру: он старался изо всех сил, и упорно пробовал создать нужный ему работающий продукт.
Когда с банами было покончено, он перешёл к своей главной цели – монетизации через воронку продаж.
Задача звучала так:
Юзер пишет слово «цена»;
Бот проверяет, подписан ли юзер на основной канал.
Если да: выдает промокод на скидку;
Если нет: пишет «сначала подпишись» и дает кнопку;
Юзер подписывается, нажимает «я подписался», и получает промокод.
Логика простая и несложная в исполнении. У СhatKeeperBot тоже есть такая настройка.
Сначала ИИ выдал ему простыню из if message.text == 'Цена':. И это работало ровно до момента проверки подписки: оказалось, что нужно дергать API Телеграма, обрабатывать статусы (member, creator, left, kicked) и ловить ошибки.
Но настоящий ад начался на шаге 5.
Бот должен помнить, что юзер нажал кнопку «я подписался» именно в ответ на просьбу о подписке, которую бот отправил ранее.
Здесь вайбкодер познакомился с понятием FSM (Finite State Machine, Машина Конечных Автоматов).
Чтобы реализовать такой сценарий в коде (например, через aiogram), нужно:
Объявить классы состояний (StatesGroup).
Перевести юзера в состояние WAITING_FOR_SUBSCRIPTION.
Написать хендлер, который ловит колбэк от кнопки, только если юзер в этом состоянии.
Предусмотреть кнопку «Отмена» (state finish).
Где-то хранить этот стейт (в Redis? В памяти? Снова здравствуй, сброс данных при рестарте).
ИИ, конечно, написал код. Но он забыл про импорты, перепутал версии библиотеки, и бот падал с ошибкой KeyError, когда юзер нажимал кнопку дважды.
Код превратился в нечитаемое месиво, а логику размазало по десяти файлам. И понимает написанное мной айтишник, но не рандомный вайбкодер. Наш герой тратил часы не на продумывание маркетинга, а на дебаггинга машины состояний.
Пока друг пытался объяснить ИИ, почему бот путает стейты, я открыл конструктор триггеров в ChatKeeper.
И там проблему решили через визуальный cоздатель алгоритмов, который встроен в админку бота.
Вот как та же задача с ценой и подпиской решается здесь:
Событие (Триггер): текст содержит «цена».
Условие (Condition): Блок «Проверка подписки на канал». Перетаскиваем мышкой, вставляем ID канала.
Ветка «Да» (True): Блок «Отправить сообщение» > «Твой промокод: SALE10».
Ветка «Нет» (False): Блок «Отправить сообщение» с клавиатурой «Подписаться».
Ждем клика: Бот сам понимает контекст. Не нужно писать машину состояний — она уже реализована движком сервиса.
В большинстве конкурентных решений (даже популярных типа Combot) триггеры линейны: Триггер > Действие. В ChatKeeper триггеры это цепочки.
И там можно без проблем накрутить сценарий любой сложности:
Юзер зашел > ожидание 5 минут > проверяем, написал ли он что-то > если нет, пнуть в личку.
Юзер отправил фото > переслать админу > админ нажал «ок» - юзеру одоббрили действие..
И чтобы закодить подобную логику с нуля и поддерживать её (особенно когда захочется поменять текст или добавить шаг), нужно быть как минимум мидл-разработчиком Python, что не под силу и мне. А чтобы сделать такое в конструкторе нужно просто понимать логику своего бизнеса.
Вайбкодер посмотрел на мой экран, где я за 3 минуты собрал то, что он толком не домучал за два вечера, и впервые в его глазах промелькнуло сомнение в собственной стратегии. Но он не падал духом.
Через пару недель перерыва (тогда я искренне верил, что он уже сдался) герой заявил, что пришло времея внедрить систему вовлечения активностей. Отчасти задротская тема, но в тематических, и особенно в игровых, группах она вполне заходит.
«Люди должны качаться, получать уровни, ставить друг другу респекты” И еще мне нужны анкеты для сбора заявок на модераторов. И графики!»
Помню, что в тот момент отошёл от дискорда и молча налил себе чаю. Я то знал, что сейчас мы войдем на территорию баз данных, состояний гонки (race conditions) и визуализации, где вайб столкнётся с суровым бэкендом.
Первая идея была проста: юзер отвечает на полезное сообщение > пишет условный “+” > карма автора растет. ИИ выдал код: update_user_reputation(user_id, +1). И поехали:
Первая проблема накрутка
Через час после релиза ребята в чате поняли фишку. Двое друзей зашли в ночной чат и за 10 минут набили друг другу рейтинг на уровне Бог сервера, просто спамя плюсами. Пришлось просить ИИ дописать проверки: таймауты, запрет на лайки самому себе и лимиты на повышение кармы в сутки, прямо как на Хабре. Скромный по ожиданиям код раздулся на кучу строк.
Проблема вторая: база данных
Как и предсказывал, хранение в JSON-файле (любимый метод новичков, и мой кстати тоже) сразу же затормозило (юзеров уже больше тысячи, а активность, как писал высокая). Пришлось мигрировать на SQL. И тут вылезло столько сюрпризов..те же конкурентные запросы, когда два человека ставили лайк почти одновременно, и база блокировалась – бот конечно крашился.
А теперь глянем как это реализовали кодеры: в ChatKeeperBot система репутации и уровней это модуль, и вы просто ставите галочку на «включить систему уровней».
Настраиваются звания (допустим 0 xp – новичок, 1000 xp – Властелин-палладин);
Включается защиту от накрутки (кулдауны, проверки);
Всё работает на их серверах с оптимизированными БД. Пользователи счастливы, а школьники или авантюристы с накруткой узнают что такое санкции.
Теперь анкеты и формы.
Вайбкодер захотел сделать опросник, чтобы получше изучать ЦА и всё-таки усилить фейсконтроль: “как вас зовут?”, “сколько лет?”, “почему хотите к нам?” ну и т.д..
Казалось бы, снова FSM (машина состояний), и несколько строк кода, но дьявол в деталях:
Валидация: юзер на вопрос про возраст присылал стикер, а бот записал ID стикера;
Далее данные, и они лежат в базе, и нужно их как-то достать? Вайбкодеру пришлось писать отдельный скрипт, чтобы выгружать это в CSV и пересылать себе в личку.
И в процессе создание анкеты возникла идея прикрепить скриншот. Ну а обработка файлов в Телеграм API это отдельный квест с загрузкой/выгрузкой на сервер.
В готовом решении это работает как гугл формы, только внутри телеги: накидал вопросы, выбрал типы ответов (текст, число, фото) и сохранил. Ответы аккуратно падают в таблицу в админке, которую можно экспортировать в Excel одной кнопкой. Но функционал не вайбкодился за один день.
Аналитика
Но самый сильный удар по Вайбкодеру нанесла статистика.
Ему нужно было выяснить, в какое время возникает пик активности, выявить топ-писателей за месяц, узнать сколько людей отписалось после рекламы, ну и так далее. Статистика, короче.
Он открыл логи. Это был текстовый файл размером кучу Мб, забитый строчками вида: INFO:root:User 123456 sent message "лол".
Чтобы превратить такое дело в графики, нужно парсить логи или писать код, который пишет статистику в отдельную таблицу, плюс поднимать Grafana или писать свой фронтенд на React/Vue, чтобы рисовать красивые кривые.
В этот момент я открыл дашборд ChatKeeper.
Там было всё:
График сообщений по часам (сразу видно, что активность растет в 19:00);
Топ юзеров (видно, кого наградить, а кто главный флудер;
«Молчуны» — те, кто читает, но не пишет;
Динамика прироста/отписок.
Вайбкодер посмотрел на свою консоль с бегущими белыми строчками логов, и потом на цветные диаграммы в моем браузере. И уже с куда большим пониманием задумался, что сбор и визуализация статистики задачка для фулстак разработчика, с затратами в несколько строчек слов для промпта.
Под привычными нам картинками и интерактивными элементами скрыта инфраструктура: базы данных, защита от абузов, валидация ввода и всё прочее. Сделать так, чтобы бот ответил «привет» пять минут делов, что с ИИ, что без. А вот сделать так, чтобы админ видел красивые графики роста аудитории уже отдельный IT-проект.
К концу эксперимента вайбкодер выглядел уставшим, хоть и более продвинутым в мире IT. Его бот по итогу работал, но требовал постоянного внимания как тамагочи с суицидальными наклонностями.
Он уперся в два фактора, о которых не пишут в туториалах вроде супербота за 5 минут:
Админка не роскошь, а необходимость. В самописном варианте, чтобы изменить приветственное сообщение или поправить опечатку в правилах, другу приходилось открывать IDE, править код, делать коммит, перезагружать бота на сервере.
В ChatKeeper (как и в любом нормальном SaaS) это делается через веб-интерфейс. Аргумент простой: писать свой фронтенд для управления ботом полноценный Fullstack-проект, и если вы не готовы писать админку на React/Vue, вас ждёт вечное ковыряние в конфигах через Cmd, Vim или Nano.
Вторая проблема надежность и хостинг.
Однажды ночью бот вайбкодера упал. Просто кончилась память на дешевом VPS, потому что потёк скрипт (memory leak частая проблема вайбкода, написанного без понимания управления ресурсами). Пока друг спал, в суперзазщищенный вайбкодом чат набежали боты с рекламой скама. Утром было недобрым (еще ведь надо было удалить ручками спамеров) и полным правок кода.
История моего друга закончилась предсказуемо.
После примерно полутора месяцев мучений, он снёс репозиторий и подключил готовое решение. Но его опыт не был бесполезным он понял, как это работает и пересмотрел подход к использованию ИИ изнутри.
Чтобы быть честными (и чтобы тут в комментах меня не съели сеньоры,), попробую разделить мух и котлет.
Вам точно стоит писать бота самому (или вайбкодить), если:
Вы учитесь. Лучший способ понять HTTP, API, базы данных и асинхронность, у вас выйдет крутой пет-проект.
У вас ультра-специфичная задача, которую не покроет даже комплексное решение. Например, бот должен лезть во внутреннюю CRM завода «Красный Октябрь» по закрытому протоколу, проверять остатки гаек или забракованных конфет на складе и отправлять отчет директору по SMS. Готовые конструкторы тут бессильны.
У вас $0 бюджета, но бесконечное время. Вы готовы тратить вечера на дебаг, настройку сервера и борьбу с обновлениями API Телеграма, и вообще вы энтузиаст.
Вам стоит взять готовое решение типо ChatKeeper`а если:
Вам нужно ехать, а не играться. Вы владелец канала, маркетолог или комьюнити-менеджер. Ваша цель вовлечение и продажи, а не изучение пайтона.
Вам нужна надежность. Вы не хотите проснуться и узнать, что бот лежал 8 часов, и вы потеряли клиентов.
Вам нужен Швейцарский нож. Вам сразу нужны модерация, триггеры, аналитика, репутация и капча. Собирать это из кусков кода как строить автомобиль из запчастей на свалке: весело, но и небезопасно.
Вместо вывода
Вайбкодинг это правда интересно для новичков. ИИ дает ощущение всемогущества: кажется, что ты можешь создать всё что угодно за пару вечеров (а кому-то, что за пару часов). Но создать прототип и поддерживать продукт две совершенно разные вселенные.
Условный ChatKeeperBot не просто набор функций, а замена команды из разработчика верстальщика админок и модератора. И иногда проще заплатить сервису цену пары чашек кофе, чем платить своим временем и нервными клетками.
А с вами был Вечерний.
До встречи в строках кода :)
P.S. Дима, ещё раз спасибо за инструмент. А другу моему ещё раз благодарность за разрешение публикации и бесконечную самоотверженность.
Источник


Рынки
Поделиться
Поделиться этой статьей
Скопировать ссылкуX (Twitter)LinkedInFacebookEmail
Генеральный директор Galaxy Майк Новограц не видит кванту
