← На главную

Опубликовано

book2rag: как загнать книги из Telegram в RAG

Автор: Гусев Николай [портфолио]

Темы: agent-memory, ai-agents, benchmarks, local-models

**Сложность: **средняя (Telethon + Rag + ChromaDB)

Превратить Telegram-канал с техническими книгами в поисковую базу знаний - задача, которая решается один раз и работает годами. Под катом - generic пайплайн, который вытаскивает книги из любого Telegram-канала, конвертирует PDF/EPUB в текст, режет на чанки, классифицирует по доменам и индексирует в отдельную RAG-коллекцию. Всё локально, без облаков.

Проблема

У вас есть Telegram-канал, где годами копятся книги, курсы, статьи. Вручную искать - боль. Telegram search - боль. Хочется спросить "что там было про RAG в продакшне" и получить не ссылку на сообщение, а цитату из книги.

Решение: book2rag

Пайплайн из пяти шагов, каждый заменяем на любой аналог:

**1. Download. **Telethon достаёт медиафайл из любого сообщения канала по msg_id. Канал не должен быть приватным, аккаунт - участником.

**2. Convert. **PDF → text через pdftotext (быстро) или pdfminer (fallback). EPUB → text через pandoc. На выходе - чистый текст без вёрстки.

**3. Chunk. **Текст режется на параграфы по 1500 символов с перекрытием 200. Это золотая середина между контекстом LLM и точностью поиска.

**4. DCD. **Domain-Collection-Document классификатор. Книга по security уходит в домен "Безопасность", книга по микросервисам - в "Архитектуру". 12 доменов, keyword-based, без LLM.

**5. Index. **Чанки эмбеддятся через LM Studio (bge-m3, 1024d) и пишутся в отдельную ChromaDB-коллекцию books. Коллекция живёт рядом с wiki и sessions - не пересекаются.

Установка и запуск

Репозиторий: github.com/NikolayGusev-astra/Book2rag

Зависимости: telethon, chromadb, requests, bs4, pdfminer.six:

`pip install telethon chromadb requests beautifulsoup4 pdfminer.six`

Запуск по msg_id из канала:

`python3 book2rag.py --msg-ids 5904,6028,5075`

Запуск по прямым ссылкам:

`python3 book2rag.py --urls https://t.me/sl1vakerA/5904,https://t.me/sl1vakerA/6028`

Повторная индексация без скачивания (если файлы уже есть):

`python3 book2rag.py --no-download --msg-ids 5904,6028,5075`

Индексация всех книг из канала:

`python3 book2rag.py --all --output /mnt/books`

Generic-архитектура

Пайплайн не привязан к конкретному каналу. Заменить источник - поменять username. Заменить модель эмбеддинга - поменять URL в конфиге. Заменить векторную БД - ChromaDB на ZVec или Qdrant. Заменить парсер - pdftotext на marker или docling. Каждый этап - независимый блок.

Факт: 13 книг по RAG, архитектуре и Python дали 9 377 чанков (127 MB PDF/EPUB). Одна книга "Fluent Python" - 1 426 чанков, 1.9 млн символов текста. Всё проиндексировано за ~15 минут на RTX 4060.

Что делать с результатом

Коллекция books живёт в ChromaDB рядом с wiki и sessions. Поиск по книгам - отдельный domain-фильтр в DCD-роутере. Запрос "как деплоить RAG в production" идёт только в домен rag_llm, не шумит по остальным 30к чанков wiki.

Ограничения

PDF с отсканированными страницами (без OCR) не конвертируются - нужен tesseract или Azure Document Intelligence. EPUB падают, если свёрстаны через InDesign с кастомными стилями. Для каналов с 1000+ книг полная загрузка - часы эмбеддинга на CPU, но работает в фоне.

Ссылки

Book2rag - репозиторий | auto-rag - RAG pipeline | @sl1vakerA - канал с книгами

Подписывайся: @hermesagentru