Как я уволил всех сммщиков: ИИ-редактор на Python, который ненавидит канцелярит и эмодзи ракеты
Меня достал инфошум, и я написал автономный ИИ-канал на Python. Спойлер: сначала он сошел с ума
Не знаю, как у вас, а у меня в последнее время начал дергаться глаз.
Открываешь с утра подписки в телеге — ну, знаете, почитать про железо, нейронки, что там нового у Маска. А на тебя из экрана вываливается липкая масса: «🚀 УНИКАЛЬНЫЙ АПГРЕЙД ОТ GOOGLE!», следом идут три абсолютно идентичных рерайта одного и того же пресс-релиза от разных админов. На десерт — нативная (аж зубы сводит) реклама очередного интенсива «Войти в IT за выходные».
Информационный фастфуд. Вы читаете не новости, вы потребляете контент-план SMM-щика, которому нужно закрыть KPI по вовлеченности.
В какой-то момент я поймал себя на том, что просто скроллю ленту на автомате, смахивая непрочитанное. И тут пришла мысль: если теоретики «мертвого интернета» правы, и тексты сейчас пишут боты для других ботов, то почему я, живой человек, должен тратить время на их чтение?
Пусть машина делает грязную работу за меня. Так родилась идея автономного агрегатора, который ведет циничный скрипт, выжигающий воду и пафос каленым железом.
Под капотом: костыли, синяя изолента и DeepSeek
Сразу скажу: тут не будет архитектуры, от которой плачут сеньоры из бигтеха. Никакого кубернетеса, докера и микросервисного пафоса. Мне нужен был работающий инструмент, а не строчка в резюме.
Я собрал систему на Python. Вся логика уместилась в 7 файлов, которые лежат в одной папке на дешманском VPS и крутятся через systemctl.
Главная проблема любого агрегатора в Telegram — парсинг. Если вы попробуете стучаться в публичные каналы через официальный API пользовательским аккаунтом (telethon/pyrogram), Дуров забанит вашу учетку быстрее, чем вы успеете нагуглить решение проблемы FloodWaitError.
Поэтому я пошел путем цифрового бомжа: scraper.py притворяется обычным браузером и парсит веб-версии каналов (t.me/s/...) через BeautifulSoup. Меняем юзер-агенты, делаем паузы между запросами — и вуаля, никакого бана. Дешево, сердито, работает неделями без единого разрыва.
В качестве «мозгов» я прикрутил API DeepSeek. Он стоит копейки, отвечает шустро и на удивление адекватен, если его правильно пнуть промптом.
Казалось бы, всё. Скормил спарсенный текст нейронке, попросил сделать рерайт, отправил в канал. Делов на вечер. Но, блин, реальность оказалась куда веселее.
Аптеки, скорпионы и шизофрения машины
Сначала бот был феерически тупым. Он тащил в канал всё подряд, не понимая контекста.
Как-то раз в одном из IT-каналов-доноров проскочил юмористический оффтоп. Суть была примерно такая: «В аптеках ввели скидки на презервативы. Кажется, Скорпионы (по знаку зодиака) больше не родятся». Ну, тупая шутка, пролистнул и забыл.
Захожу вечером в свой боевой канал посмотреть, как там трудится мой автоматизированный редактор. А там на серьезных щах висит вот это:
⚡ АПТЕКИ ПРОТИВ СКОРПИОНОВ: НОВЫЙ УРОВЕНЬ БИОЛОГИЧЕСКОЙ БЕЗОПАСНОСТИ В России зафиксировали вспышку продаж живых скорпионов через сети аптек. Насекомых, которых формально можно отнести к "лекарственным сырьевым материалам", покупают как экзотических питомцев. Росздравнадзор уже бьет тревогу... Аптечные сети вынуждены в срочном порядке обучать фармацевтов безопасно извлекать членистоногих из-под прилавка.
Я чуть кофе не поперхнулся. Занавес.
Нейросеть просто не выкупила метафору. От слова совсем. Она зацепилась за слова «аптека» и «скорпионы», восприняла текст буквально и сгенерировала дичайшую галлюцинацию, приплетя туда Росздравнадзор и бедных фармацевтов.
Помимо полного отсутствия чувства юмора, у бота обнаружилась еще одна беда: он разговаривал как душнила из НИИ. Любая языковая модель по умолчанию обучена быть «вежливой и информативной». Из-за этого тексты воняли пластиком. Бот обожал длинные тире, пихал везде канцелярские «является» и «представляет собой».
А еще у него появилась любимая фраза-паразит: «Не баг, а фича». Сначала это было забавно. Но когда он начал вставлять её в новости про утечки баз данных и падение ракет — стало кринжово. Читать это было физически больно.
Дрессировка (с матом и бубном)
Пришлось лезть в архитектуру и кардинально переписывать логику. Я понял, что пытаться заставить ИИ вырезать мусор силой мысли — плохая идея. Он всё равно оставит следы или начнет извиняться («Я как языковая модель не могу написать этот текст...»).
Поэтому я применил многоуровневую фильтрацию.
1. Хардкорный спам-фильтр на уровне железа. Я добавил в цикл воркера обычный питоновский массив STOP_WORDS. Туда полетело всё: erid, скидка, вебинар, старт потока, гарантия трудоустройства. Если в исходном тексте парсер находит хоть одно такое слово — пост физически отбрасывается и даже не летит в API нейросети. Мы экономим токены, а в канал не просачивается скрытая реклама. Серьезно, if any(word in text.lower() for word in STOP_WORDS): continue — это самая полезная строчка кода, которую я написал за год.
2. Протокол «SKIP». Я вбил в системный промпт жесткое правило. Если новость про крипту, политику, инфоцыган или это просто вымученная шутка админа-донора — не надо это переписывать. И не надо передо мной извиняться. Просто верни одно слово: SKIP. И скрипт пойдет дальше. Теперь в логах красота: машина молча отсеивает 80% дневного инфошума.
3. Память как у рыбки (но нормальная). Появилась проблема дублей. Если про презентацию нового айфона написали на 10 каналах, мой бот честно генерил 10 постов про айфон. Пришлось прикручивать хэширование исходников (чтобы отсекать прямые репосты) и сохранение последних 40 опубликованных тем в отдельный JSON. Теперь перед генерацией бот получает список того, что он уже запостил сегодня. Видит похожий контекст? Отдает SKIP.
4. Истребление канцелярита. Я буквально орал на ИИ в системном промпте. «Не притягивай за уши "цифровые" метафоры к обычным вещам! Не называй мороз апгрейдом зимы! Пиши рублено! Забудь слово "является"!». И знаете... до него дошло. Я понизил температуру генерации до 0.6, чтобы он меньше фантазировал про скорпионов, и тексты стали сухими, четкими и действительно читаемыми.
Что в сухом остатке?
Сейчас мой канал ИИшненько — это полностью автономная сущность. Я вообще туда не лезу.
Раз в 15 минут скрипт просыпается, скрапит подборку сайтов и каналов. Алгоритм сам понимает, где реально важная новость (например, про новый чип или сбой у провайдера), а где — словесный понос маркетолога. Он отсеивает шлак, а оставшееся сжимает в два коротких абзаца, приправляет едким комментарием в конце и публикует.
Я не строю иллюзий. Это не стартап-единорог и не проект, который перевернет мир медиа. Это крайне нишевая, гиковская история для тех, у кого, как и у меня, дергается глаз от обилия эмодзи и слов «инновационный продукт».
Это просто тихий цифровой уголок, где мой скрипт пережевывает интернет, чтобы мне не пришлось этого делать. Если вам тоже близок минимализм в потреблении информации и вы хотите читать сухие факты — заходите в гости. Машина работает круглосуточно.
А я, пожалуй, пойду посплю. Мой SMM-щик точно не попросит повышения зарплаты.