Автоматизация, за которой никто не следит
Есть боты, с которыми человек разговаривает. А есть те, что просто крутятся сами, и месяцами их никто не открывает. Второе, как выяснилось, требует другого мышления.
История про Стамбул
Собрал автопостинг для канала с авиабилетами. Система мониторит Aviasales, находит выгодные предложения, GPT пишет текст и рисует картинку, всё улетает в канал. Полный цикл — примерно полторы минуты, человек не участвует вообще.
От дублей защита была сразу: PostgreSQL хранит опубликованные маршруты, перед постом проверка.
Работает. Открываю канал через пару недель, а там Стамбул — Москва. И ещё раз Стамбул — Москва. И ещё.
Формально дублей нет — даты вылета каждый раз новые, проверка честно их пропускает. Просто это направление объективно самое выгодное, и алгоритм добросовестно выносил его наверх снова и снова. Канал превратился в одну бесконечную рекламу одного рейса.
Вылечилось добавлением окна: маршрут считается дублем, если он выходил за последние семь дней, независимо от дат. Технически — одна колонка с датой публикации и +1 условие в SQL.
Но вывод из этого шире, и я им теперь пользуюсь везде. Дедупликация — вопрос не технический, а смысловой. Ты должен решить, что в твоей задаче вообще считается «тем же самым». Одинаковая запись в базе? Одинаковый маршрут? Одинаковая тема? Для рассылок это одно, для новостей другое, для товаров третье. Ошибёшься здесь — код будет работать идеально и делать не то.
Тишина — худший из отказов
Второе, чему научил автопостинг. Такая система никогда не жалуется. Она не пишет «мне плохо». Она просто перестаёт постить, или начинает постить чушь, и ты узнаёшь об этом от клиента.
Поэтому в любой автономный процесс я теперь закладываю сигнал: раз в сутки короткое служебное сообщение в личку — сколько отработало, сколько отсеялось, сколько ошибок. Скучно, но именно это ловит проблему до того, как её увидит заказчик. И чем короче цикл, тем важнее: при полутора минутах любая ошибка успевает размножиться сорок раз за час. Где я осознанно не автоматизирую до конца
Делал бота, который решает задачи по математике с фото учебника, и бота-нутрициолога, который разбирает результаты анализов по снимку. С распознаванием сейчас проблем почти нет. Проблема в другом: неверный ответ модели выглядит ровно так же уверенно, как верный. Никакой разницы в интонации. В математике школьник просто спишет чушь. В теме здоровья цена ошибки уже другая.
Поэтому в таких проектах я не гонюсь за автономностью. Модель ограничивается тем, что реально видит на снимке, спорные случаи явно помечаются, а не сглаживаются, и в чувствительных темах бот обязан сказать «идите к специалисту» вместо красивого развёрнутого ответа. Умение не автоматизировать кусок задачи — по-моему, часть профессии. Продать полную автономность легче, но потом за неё отвечать.
Стек по этоу проекту: n8n (self-hosted, Docker), PostgreSQL, GPT, Telegram Bot API, Aviasales API.