Всем привет!
Меня зовут Азрет, я — 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.
Я рад, что пет-проджект оброс деталями и дошел до широкой аудитории.
В нем есть бесплатный тариф, можно спокойно потыкать, а так же есть возможность оставлять комментарии и отзывы.
Название «скаут» как предзнаменование будущих фич. Я планирую добавить фильтры, чтобы из тонны каналов пользователь мог получать только интересующие его сообщения.
Что касается следующих статей, я совершенно точно хочу рассказать про подключение платежной системы, а именно, как работает связка «бот-вебхук-платежка».
Вопросы, замечания, комментарии велком.
Спасибо.
ссылка на оригинал статьи https://habr.com/ru/articles/849532/
Добавить комментарий