Опубликовано
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