Умный агрегатор на базе таблиц: собираем дайджест новостей с помощью MWS Tables

Привет, Хабр! Меня зовут Даниил Оларь, я разработчик в команде продукта MWS Tables — платформы для лёгкой автоматизации и совместной работы на базе таблиц.
Недавно коллеги обратились к нам с задачей: для B2B-коммуникаций важно следить за трендами рынка, поэтому им нужна была система сбора новостей из публичных каналов. При этом управлять ей — добавлять и удалять каналы, собирать данные для аналитики — коллеги планировали без работы с кодом.
Мы сделали несколько таблиц с необходимой для работы системы информацией: источниками новостей (каналами), промптами для их обработки и правилами для отправки новостей получателям.
Затем самописный бот собирает новости по каналам и автоматически загружает их в таблицу на платформе, а LLM отсеивает нерелевантные новости и собирает дайджест самых интересных материалов. И ещё один бот отвечает за публикацию новостей в нашу группу.
В материале расскажу, как устроена каждая таблица и как настроена связь между ними.
Работа в MWS Tables строится на базе таблиц, где создаются и хранятся данные. Их можно создать с нуля или импортировать из файлов. Каждая ячейка в таблице соответствует определённому формату — типу поля. Например: текст в одну строку, дата, цифры в процентах, формулы и т. д. В MWS Tables сейчас несколько десятков типов полей. Лимит таблицы — 1 млн строк.
Отдельные ячейки можно связывать с данными из других таблиц. Или связать одну запись с несколькими: например, соединить строки с задачами отдельного проекта с записью в общем списке проектов.
Для проекта «сборщик новостей» хватило несколько небольших таблиц.
Таблица «Каналы»
Новостные каналы хранятся в отдельной таблице. Новые источники коллеги добавляют в ручном режиме в столбец «Ссылка», а также отключают нерелевантные и удаляют устаревшие.

После обхода каналов бот может столкнуться с рядом ошибок: требуется вступление, если источник оказался приватной группой; канал не найден; возникли иные проблемы доступа. Такие каналы помечаются красной кнопкой с соответствующим описанием ошибки. Все изменения применяются динамически и сразу влияют на периметр мониторинга. При необходимости канал можно просто деактивировать, не удаляя из базы (например, если он начал приносить много нерелевантных новостей или возникли другие системные сбои).
Таблица «Новости»
Сам сборщик новостей реализован с использованием библиотеки Telethon и написан на Python. Через клиентский аккаунт бот собирает новости из публичных каналов и агрегирует их в таблице MWS Tables.

В таблице автоматически фиксируется название источника (канала), текст публикации, заголовок, саммари и ссылка на источник. Если новость дублируется в нескольких отслеживаемых каналах, система за счёт преднастроенного фильтра не допустит попадания повтора в итоговый дайджест.
Таблица «Агенты»
К каналам прикреплены агенты — по сути, это фильтры на базе промптов для LLM. Модель определяет, относится ли конкретная новость к заданным категориям. Такой подход позволяет фильтровать контент не по ограниченным ключевым словам, а по смысловому соответствию тематике и отсеивать нерелевантные новости.

В таблице можно быстро отредактировать промпты, добавить новых агентов под тематики или деактивировать неактуальных агентов.
Вся обработка новостей — генерация заголовков и резюме, прогон через агентов — выполняется асинхронно и не блокирует работу сборщика. Для этих задач мы подключили ИИ-модель через публичный сервис MWS GPT Model Hub.
Cамописный микросервис забирает записи из таблицы по API, формирует на их основе промпт для языковой модели и отправляет запрос. Полученный от LLM результат он сохраняет обратно в таблицу MWS Tables.
Таблица «Чаты»

Отдельная таблица «Чаты» отвечает за конфигурацию чатов для получателей дайджеста.
Мы добавили сотрудников, которые должны получать новости, в отдельную группу, где также находится бот для рассылки новостей. В таблице указывается идентификатор этой группы, идентификатор топика (необходим, если у вас супергруппа), статус рассылки (включена или отключена).

В соответствующем столбце можно настроить тип дайджеста — например, выбрать из списка параметр «Резюме новости», который оставит от текста новости только краткую сводку без заголовка.
Также настраивается вывод только заголовков или комбинированный вариант «заголовок + резюме». Для удобства навигации в конец сообщения добавляются хештеги, позволяющие быстро находить дайджесты через поиск по чату.
Отправка работает по расписанию с настраиваемыми тайм-слотами. Можно указать как одно, так и несколько временных окон, в которые бот будет высылать сводку.

Сам дайджест в группе выглядит структурированно: сначала идёт заголовок с указанием даты, за которую собраны новости, затем следуют пункты с саммари. При выбранном формате «только саммари» каждый пункт представляет собой сжатое изложение сути новости. Прямо из дайджеста можно перейти к исходному источнику публикации.
Таблица «Параметры»

Таблица параметров содержит настройки обработки новостей через LLM. Во второй строке (AI_MODEL…) мы указали модель, которая отвечает за формирование саммари и прогон через агентов-фильтров — у нас в конфигурации GPT-4o mini. В третьей строке (AI_NEWS…) прописали промпт для генерации резюме новости.
Дашборд

В системе предусмотрена возможность настройки дашборда для аналитики источников и фильтров. Можно отслеживать, какие агенты срабатывают чаще всего и какие каналы приносят наибольшее количество полезных новостей, прошедших через семантические фильтры.
Заключение
Теперь менеджеры оперативно получают новости и могут без технических навыков редактировать выдачу, настраивая сборщик под свои требования. Мы решили задачу сбора новостей с минимальными затратами, связав бота для сборки контента, базу в MWS Tables и дешёвую LLM. MWS Tables в этом кейсе становится мостом между различными инструментами — это ключевая роль нашей платформы для автоматизации.
Технологические компании в среднем используют 155 инструментов для работы. Это не значит, что все инструменты плохие и нужно от всего отказываться в пользу какого-то «универсального» решения — такого просто не существует. Важно строить связи между инструментами, данными, задачами и ответственными. И с этой задачей MWS Tables отлично справляется.
Автор: olardaniil

