Как стать автором
Обновить

Как я написал бота для саммари telegram каналов

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров764

Всем привет!
Меня зовут Азрет, я - 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.

Архитектура

У меня получилась такая схема:

  1. Клиентский бот - с которым взаимодействует пользователь. Он принимает каналы и выдает саммари.

  2. Бот на кастомном ТГ - который под человеческим аккаунтом заходит на указанные каналы, подписывается и мониторит сообщения.

  3. Обертка над LLM моделью - принимает на вход сообщения и выдает саммари.

  4. Хранилище сообщений - для оригиналов и саммари текста.

  5. Платежный сервер - на него ловим вебхкуки от платежной системы.

  6. Брокер сообщений, который связывает все компоненты.

Как обычно, клиент даже не подозревает, что творится на беке
Как обычно, клиент даже не подозревает, что творится на беке

Если очень сильно упрощать, то флоу такой:

  1. Пользователь добавляет канал в боте

  2. Бот-аккаунт подписывается на этот канал, забирает оттуда сообщения и пересылает их в хранилище

  3. В момент Х из хранилища в LLM отправляется запрос на создание саммари

  4. Полученные саммари пересылаются пользователю в бота.

Конечно, есть нюансы, но о них в следующих статьях.

Стек

Все компоненты написаны на python.

  1. Пользовательский бот написан на aiogram. В нем используются aiogram-dialog для работы с меню, APscheduler для планировщика саммари, SQLAlchemy для хранения пользовательских данных, redis для кеширования стейта

  2. Кастомный телеграм клиент написан на Telethon. В нем дополнительно ничего нет, так как все данные хранятся в автоматически создаваемом файле сессии.

  3. Хранилище сообщений - приложение без фреймворка. В нем так же используется SQLAlchemy.

  4. LLM враппер - тоже приложение без фреймворка. Работает через официальную библиотеку от open ai. Хорошего промпта оказалось достаточно, использовать langchain было бы оверкилом. Клиент работает через прокси.

  5. Платежный сервер написан на FastAPI. Буквально пара файлов и пара методов. Но чтобы завести его, пришлось повозиться с доменами, сертификатами и обратным прокси.

  6. Брокер сообщений - NATS. Асинхронный, быстрый, с поддержкой pub-sub и request-response механик. Удобнее, чем http запросы.

Все это добро крутится на VPS сервере от Selectel под ubuntu.

Заключение

Лучше один раз увидеть

Бот рассчитывает сэкономленное время при средней скорости чтения в 180 слов в минуту
Бот рассчитывает сэкономленное время при средней скорости чтения в 180 слов в минуту

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

Название "скаут" как предзнаменование будущих фич. Я планирую добавить фильтры, чтобы из тонны каналов пользователь мог получать только интересующие его сообщения.

Что касается следующих статей, я совершенно точно хочу рассказать про подключение платежной системы, а именно, как работает связка "бот-вебхук-платежка".

Вопросы, замечания, комментарии велком.
Спасибо.

Теги:
Хабы:
+5
Комментарии10

Публикации

Истории

Работа

Python разработчик
193 вакансии
Data Scientist
94 вакансии

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн