Всем привет!
Меня зовут Азрет, я - CTO в AAA (читается как "трипл-эй"). Мы разрабатываем LLM приложения для бизнеса. Решаем разнообразные задачи - оптимизация внутренних процессов за счет ИИ, маркетинговые исследования и запуск новых продуктов. Но запрос на бота, про которого я хочу рассказать, внезапно пришел от фаундера нашего агенства.
Ситуация понятна - я подписан на кучу телеграм каналов, я не успеваю их читать, мне от этого неприятно, я испытываю FOMO. А я бы хотел не пропустить ничего важного, тратить как можно меньше времени и иметь все в одном месте.
Из этого запроса появилась идея саммари бота. Я столкнулся с множеством интересных задач, пока работал над ним, и подумал, что будет полезно, если я поделюсь решениями.
В этой обзорной статье - детали архитектуры и стека. Кому интересно - прошу под кат.
В чём сложность?
С ядром приложения все понятно - это LLM.
Ответы от GigaСhat и YandexGPT меня не устроили, конфигурация сервера для LLAMA стоит дороже, поэтому я остановился на API ChatGPT. Из неудобств - нужно настраивать прокси, но вот уже 2й год как ни для кого из нас это не является проблемой.
Основная же сложность была в получении сообщений из каналов.
Допустим, у нас есть бот, в которого пользователь скидывает канал, из которого он хочет получать саммари. Что бот должен сделать дальше?
Чтобы бот мог прочитать сообщения, его нужно добавить в канал. Сам он добавиться не может. Ещ�� бот не может прочитать сообщения, которые были получены до его добавления в канал.
Ковыряя эту ситуацию, я пришел к выводу, что тут не обойтись без человека.
Человека-бота.
Бота, который управляет человеческим аккаунтом.
Про Telegram API и Telegram Bot API
Telegram Bot API - это часть Telegram API.
Telegram API - это полное апи телеграмма. С его помощью можно создавать собственных клиентов телеграмма.
Библиотеки на python - Telethon, pyrogram.
Telegram Bot API - это апи для взаимодействия с ботами. С его помощью можно создавать ботов. Наиболее популярные python реализации - aiogram, pyTelegramBotAPI, python-telegram-bot.
Архитектура
У меня получилась такая схема:
Клиентский бот - с которым взаимодействует пользователь. Он принимает каналы и выдает саммари.
Бот на кастомном ТГ - который под человеческим аккаунтом заходит на указанные каналы, подписывается и мониторит сообщения.
Обертка над LLM моделью - принимает на вход сообщения и выдает саммари.
Хранилище сообщений - для оригиналов и саммари текста.
Платежный сервер - на него ловим вебхкуки от платежной системы.
Брокер сообщений, который связывает все компоненты.

Если очень сильно упрощать, то флоу такой:
Пользователь добавляет канал в боте
Бот-аккаунт подписывается на этот канал, забирает оттуда сообщения и пересылает их в хранилище
В момент Х из хранилища в LLM отправляется запрос на создание саммари
Полученные саммари пересылаются пользователю в бота.
Конечно, есть нюансы, но о них в следующих статьях.
Стек
Все компоненты написаны на python.
Пользовательский бот написан на aiogram. В нем используются aiogram-dialog для работы с меню, APscheduler для планировщика саммари, SQLAlchemy для хранения пользовательских данных, redis для кеширования стейта
Кастомный телеграм клиент написан на Telethon. В нем дополнительно ничего нет, так как все данные хранятся в автоматически создаваемом файле сессии.
Хранилище сообщений - приложение без фреймворка. В нем так же используется SQLAlchemy.
LLM враппер - тоже приложение без фреймворка. Работает через официальную библиотеку от open ai. Хорошего промпта оказалось дос��аточно, использовать langchain было бы оверкилом. Клиент работает через прокси.
Платежный сервер написан на FastAPI. Буквально пара файлов и пара методов. Но чтобы завести его, пришлось повозиться с доменами, сертификатами и обратным прокси.
Брокер сообщений - NATS. Асинхронный, быстрый, с поддержкой pub-sub и request-response механик. Удобнее, чем http запросы.
Все это добро крутится на VPS сервере от Selectel под ubuntu.
Заключение
Лучше один раз увидеть

Бота можно запустить по ссылке - https://t.me/aaa_scout_bot.
Я рад, что пет-проджект оброс деталями и дошел до широкой аудитории.
В нем есть бесплатный тариф, можно спокойно потыкать, а так же есть возможность оставлять комментарии и отзывы.
Название "скаут" как предзнаменование будущих фич. Я планирую добавить фильтры, чтобы из тонны каналов пользователь мог получать только интересующие его сообщения.
Что касается следующих статей, я совершенно точно хочу рассказать про подключение платежной системы, а именно, как работает связка "��от-вебхук-платежка".
Вопросы, замечания, комментарии велком.
Спасибо.
