Модульный Telegram-бот на Python для RAG (Retrieval-Augmented Generation) по своим документам.
- Docling парсит PDF/DOCX и разбивает контент на чанки
- Haystack 2.x Pipelines собирают ingestion + generation пайплайны
- Pinecone хранит эмбеддинги и делает быстрый векторный поиск
- После загрузки файла бот отправляет резюме ровно одним предложением
- Дальше бот отвечает на вопросы с учетом загруженных документов (RAG)
Проект сделан как домашка “Кейс 3: Поиск по своим данным” (VPg07).
Автор: Георгий Белянин (Georgy Belyanin)
Email: georgy.belyanin@gmail.com
- 📄 Загрузка документов (PDF, DOCX и др.)
- 🧩 Автоматическое чанкование через Docling
- 🔎 Векторный поиск по Pinecone
- 💬 Ответы на вопросы по документам (RAG)
- 📝 Авто-резюме документа (строго 1 предложение)
- 🔐 Изоляция пользователей: поиск и ответы только по документам текущего chat_id
Docling обрабатывает документы локально (в том числе OCR), поэтому при первом запуске и на больших PDF это может занять заметное время.
В уроке отдельно отмечают, что обработка идёт локально через ML-стек (например, PyTorch) — это нормально, просто подожди завершения.
Рекомендация:
- тестируй сначала на маленьком PDF (2–5 страниц)
- включи подробные логи (chunk count, documents_written), чтобы видеть прогресс
hay_v2_bot/
├── bot/ # Telegram handlers (I/O)
├── pipelines/ # Haystack pipelines
│ ├── ingestion.py # Docling -> embeddings -> Pinecone
│ └── generation.py # question -> retrieve -> LLM answer
├── components/ # Custom Haystack components + helpers
├── config.py # .env settings + validation
└── main.py # entrypoint
- Python 3.10–3.12 (рекомендуется 3.11)
- Pinecone аккаунт + API key
- Telegram bot token (BotFather)
- OpenAI API key (или совместимый прокси) + base url
python -m venv .venv
# macOS/Linux
source .venv/bin/activate
# Windows PowerShell
.venv\Scripts\Activate.ps1
pip install -U pip
pip install -r requirements.txtcp .env.example .envЗаполни .env:
TELEGRAM_BOT_TOKENOPENAI_API_KEYиOPENAI_BASE_URLPINECONE_API_KEY,PINECONE_INDEX_NAME
Создай индекс в Pinecone:
- dimension:
1536(дляtext-embedding-3-small) - metric:
cosine
python -m hay_v2_bot.main/start— приветствие- Отправь боту файл (PDF/DOCX)
- бот пишет “получил / обрабатываю…”
- потом “готово”
- затем одно предложение резюме
- Дальше просто задавай вопросы текстом — бот ответит с учетом документов
python -m compileall hay_v2_bot
python -c "from hay_v2_bot.config import Settings; print('config ok')"
python -c "from hay_v2_bot.pipelines.ingestion import build_ingestion_pipeline; print('ingestion ok')"
python -c "from hay_v2_bot.pipelines.generation import build_generation_pipeline; print('generation ok')"- Никогда не коммить
.env - Не логируй ключи и токены
.env.example— только шаблон
- Дерево проекта (папка
hay_v2_bot/+bot/ pipelines/ components/) - Терминал: успешный старт (
Bot started polling.../ без ошибок) - Telegram:
/start - Telegram: загрузка файла + “готово” + резюме 1 предложением
- Telegram: вопрос по документу → ответ
- (опционально) Pinecone dashboard: видно индекс/namespace и что есть векторы
- Команда
/resetдля очистки пользовательского namespace/фильтра - Ссылки на источники (chunk_id / page) в ответах
- Поддержка других форматов документов (TXT, MD и др.)
MIT
Георгий Белянин (Georgy Belyanin)
Email: georgy.belyanin@gmail.com
- Проект создан в рамках курса "Кейс 3: Поиск по своим данным" (VPg07)
- Все зависимости указаны в
requirements.txt - Для работы требуется
.envфайл (см..env.exampleв репозитории или создай по шаблону из README)