Telegram bot для групп который ничего не забывает (RAG, CHATGPT)

 Публичный пост
30 марта 2025  248

У меня, как наверное, и у многих есть множество телеграм груп, довольно активных, накопивших много информации (полезной и не очень) за продолжительное время.

В той сингулярности что мы с вами сейчас живём, хочется попробовать сделать из этого что полезное.

Я какое то время использовал ботов с бекендом от lllm модели, и быстро, как мне кажется, нашупал проблему в том, как передавать контекст боту-помошнику (или имеющуему другую роль в зависимости от system prompt).

Я пробовал разные подходы:

  • просто накапливал последние сообщения в кеше, и подсовывал как контекст
  • пробовал ходить по цепочкам reply_to и так, поддерживать связный диалог

но у всех у них есть свои плюсы и минусы.

Захотелось, немного усложнить и попробовать добавить к боту "память" к которой он может обращаться, и загрузить в эту память все сообщения с сотворения мира.

Но проблема ограниченного контекста, остается, нужно как то фильтровать то что релевантно.

В качестве подхода, попробовал считать ембединги по тексту, складывать их в векторную базу, и затем доставать релевантные к запросу и подавать их контекстом.

То есть подход, который сейчас называется RAG: Retrieval-Augmented Generation.

Результат тут: https://github.com/korjavin/ragtgbot

Взял all-MiniLM-L6-v2 model из sentence-transformers для еmbeddings, qdrant для векторной базы, и написал
а) загрузчик из экспортируемой истории группы телеграма в базу.
Он создает батчи сообщений, считает ембединги и складывает в базу.
б) телеграм бота который

  • поддерживает базу актуальной добавляя туда новые сообщения
  • если его упомянуть по имени, то текст сообщения он считает запросом, забирает из базы релевантный контекст, и генерирует ответ с помощью gpt-4o-mini

Всё self-hosted, докеризировано, запускайте у себя на здоровье. Есть docker-compose файл, который запускает уже всё собранное.

Вам только нужно создать бота, взять токен, засунуть его в env, и также в env положить свой openai api key.

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

У меня пока более интересные чем раньше, но явно есть место для улучшения по группировке сообщений.

Пользуйтесь, делитесь, буду рад если оно полезно.

1 комментарий 👇
Pavel Cherkashin ИТшник со стажем, начинающий фаундер 29 марта в 23:19

В свое время делал подобный бот в Телеграме и использовал команды, чтобы запускать цепочки - таким образом решал проблему системных промптов. На тот момент использовал Make (Integromat), позже перетащил на n8n. На скрине - некоторые из команд

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб