Я делаю сайты и телеграм-ботов на заказ. Заказчики пишут «ищу, кто сделает лендинг» в профильные чаты и в ленты соцсетей, и кто ответит первым, тот обычно и получает разговор. Читать все чаты глазами я не могу, поэтому собрал робота: он читает чаты и ленты, отсеивает мусор, оценивает каждую находку нейросетью и присылает мне в личку карточку с баллом и черновиком первого ответа. Отвечаю я сам, руками. Пишет робот только мне, и это правило я зашил прямо в код, на свою силу воли не полагаюсь.
Статья про устройство «трубы», по которой идёт сообщение, про учёт расходов с потолком, про три места, где было больно (зависший event loop, невалидный JSON от модели, пачка находок, которую сервер не успевал принять), и про то, что в итоге получилось по живым цифрам. Код ниже взят из рабочего проекта, лишнее я выкинул, промпты классификатора не привожу: у них своя история, к архитектуре она не относится.
Что делает система
Источников четыре: юзербот Telethon, который сидит в нескольких десятках чатов, RSS биржи фриланса (позже я её выключил, ниже расскажу почему), а также Threads и Instagram, которые читает браузерный сборщик на моём маке. Всё это сходится в одну трубу: