Раскрываем архитектуру и экономику бота, который фильтрует контент из Telegram и VK каналов, собирает персональный дайджест и учится на обратной связи. Внутри — продуктовые решения с обоснованием, реальная стоимость AI-обработки и несколько неожиданных выводов про информационный шум.
!!! Больше кейсов на канале “AI для продакта”
Задача
Бот, который мониторит Telegram и VK каналы, анализирует каждый пост через AI и раз в день присылает дайджест только из того, что совпадает с интересами конкретного пользователя. Не общий топ, не редакторская подборка. Персональный фильтр.
Архитектура в двух словах
Пользователь добавляет каналы и описывает интересы. Бот через MTProto читает все каналы, каждый пост прогоняет через OpenAI embedding и получает вектор из 1536 чисел. Такой же вектор есть у каждого интереса. Дальше cosine similarity между векторами поста и интересов. Чем ближе — тем выше релевантность. Посты, прошедшие порог, попадают в дайджест с AI-саммари.
Поиск по векторам идёт через pgvector прямо в PostgreSQL. Работает на уровне миллисекунд даже на базе в 8000 постов.
Продуктовые решения
1. Смысл вместо ключевых слов
Первая версия фильтровала по ключевым словам. Провал. Пост "Apple представила нейрочип" не содержит слово "AI", но он про AI. Ключевые слова это пропускают.
Перешли на embeddings. Теперь бот сравнивает не текст, а смысл. Пользователю не нужно думать о формулировках запроса, подбирать слова или составлять списки тегов. Просто описал интерес обычным языком и всё работает.
2. MAX вместо среднего
Первая версия усредняла все интересы пользователя в один вектор и сравнивала пост с ним. Если у тебя 12 интересов, среднее превращается в кашу, которая не про что конкретно.
Переделали. Теперь бот сравнивает пост с каждым интересом отдельно и берёт лучшее совпадение. Качество фильтрации выросло сразу — пост про запуск ракеты больше не тонет в усреднении с интересом про маркетинг.
3. Два способа добавить интерес
Можно написать текстом. Тут выяснился нюанс. "Маркетинг" как интерес ловит всё подряд. "Продуктовые метрики в B2B SaaS" фильтрует точно. Описание в 5-15 слов работает в разы лучше одного слова.
А можно просто переслать боту пост из Telegram, который понравился. Бот сам вытащит тему и спросит — добавить в интересы или поставить канал на мониторинг. Этот способ появился потому что формулировать людям лень. Проще ткнуть в пост.
4. Четыре категории вместо "подходит / не подходит"
Бинарная фильтрация не работает. Пользователь не доверяет чёрному ящику и хочет видеть что отсеялось.
Разбили на четыре категории по score совпадения. Важно, Интересно, Может быть, Мимо. Каждая категория показывается в дайджесте отдельным блоком. Пользователь быстро пробегает глазами и сам решает, куда копнуть глубже.
5. Четыре уровня саммари
Одинаковый пересказ для всех постов тоже не работает. Важный пост хочется прочитать подробно, а на "мимо" тратить время бессмысленно.
Сделали четыре уровня. От подробного пересказа на 4-6 предложений до ультракороткого в 2-3 слова. И главное — пользователь сам через бегунки в настройках выбирает, какой уровень для какой категории. Один хочет подробный пересказ для всего кроме "мимо". Другой — максимально сжатый формат, чтобы весь дайджест прочитать за минуту. Настроил один раз, дальше просто получаешь.
6. Обучение на фидбэке
После дайджеста бот предлагает оценить посты. Попало, средне, мимо. Три кнопки, без усилий. Оценки корректируют score: лайк поднимает похожие посты в будущем, дизлайк опускает. Фильтр затачивается с каждым днём.
За месяц тестирования собрали 92 оценки. 16% точных попаданий, 51% нейтральных, 33% мимо. Честные цифры для молодой системы. Но тренд виден — с каждой неделей точность подрастает.
7. Дубликаты — невидимая проблема
Одну и ту же новость публикуют 5-10 каналов. Если показывать все версии, дайджест раздувается и теряет смысл.
Бот сравнивает посты между собой тем же методом — cosine similarity по векторам. Если два поста похожи больше чем на 80%, это дубликат. В дайджест попадает один, с наивысшей релевантностью. За неделю на 92 каналах система находит около 300 таких пар. Это 300 раз, когда ты не читаешь одно и то же второй раз.
И тут обнаружилось кое-что забавное. AI-рерайт новостей ловится почти всегда. Когда автор берёт новость из RSS и прогоняет через ИИ, результат настолько шаблонный, что embedding определяет его как копию оригинала. А вот авторы, которые добавляют свой анализ, мнение, нестандартный угол подачи — в дубликаты не попадают.
Побочный вывод для тех, кто ведёт каналы: если используете AI для рерайта — добавляйте свою голову. Иначе ваш пост буквально неотличим от десятка других, и умный фильтр покажет подписчику только один из них. Не факт, что ваш.
Результаты за месяц
Гоняли на реальных пользователях. Ниже выводы по одному из них — 92 канала из Telegram и VK по теме AI и продуктовой разработки.
За месяц через бота прошло 5500 постов. Из них в дайджест попало около 8%. Остальные 92% — шум. Не потому что каналы плохие. Просто большая часть контента конкретно этому пользователю с его интересами не нужна.
Разбивка по категориям: 1.2% постов попали в "интересно", 7.3% в "может быть". В категорию "важно" со score выше 0.70 не попал ни один пост. Это к вопросу о том, насколько даже тематические каналы релевантны конкретному человеку.
В среднем за неделю — 1127 постов в каналах, 63 в дайджесте. Если считать по 30 секунд на пост (открыть, пробежать глазами, решить читать или нет), бот экономит около 6 часов в неделю. Не потому что читает быстрее. А потому что 1064 поста можно вообще не открывать.
300 пар дубликатов за неделю. Одна и та же новость в разных каналах, которую пользователь видит только один раз.
Экономика
Весь AI-процессинг стоит $2.32 в месяц. На 107 каналов и 4 активных пользователя. Это не опечатка.
Основные расходы — суммаризация через gpt-4o-mini. Embedding через text-embedding-3-small обходится в $0.025 в месяц, это практически бесплатно. А вот генерация саммари четырёх уровней для каждого поста — $2.29.
Один средний канал (пара постов в день) стоит 2.4 рубля в месяц. Самый активный канал в нашей базе публикует 34 поста в день и обходится в 48 рублей.
Но $2.32 — это production после оптимизации. На пути сюда ушло около $300 на вайбкодинг. Подбор моделей, настройка промптов, калибровка порогов релевантности, тесты разных размерностей embedding, бесконечные итерации с Claude Code. Плюс сервер, домен, интеграция с MTProto и VK API, PostgreSQL с pgvector, система дедупликации, 9 миграций базы данных.
Инсайт для тех, кто прикидывает юнит-экономику AI-фичей: embedding дёшев, суммаризация дорогая. 99% расходов на OpenAI в нашем случае — это генерация текста, а не векторный поиск.
Попробовать
Бот работает, принимает новых пользователей. По ссылке — тестовый доступ на 10 дней с лимитом в 50 каналов. Подключаете свои каналы из Telegram или VK, описываете интересы, и на следующий день получаете первый дайджест.
Интересно посмотреть, какой процент вашей ленты окажется шумом?
!!! Больше кейсов на канале “AI для продакта”