Skip to content

Modular Telegram bot with RAG over user documents. Built with Haystack pipelines, Docling document parsing, Pinecone vector search, and OpenAI. Features automatic document summarization and context-aware Q&A.

Notifications You must be signed in to change notification settings

ergon73/haystack-rag-docling-bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🤖 Haystack RAG Telegram Bot (Docling + Pinecone)

Модульный 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

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

🚀 Быстрый старт

1) Установка

python -m venv .venv
# macOS/Linux
source .venv/bin/activate
# Windows PowerShell
.venv\Scripts\Activate.ps1

pip install -U pip
pip install -r requirements.txt

2) Настройка переменных окружения

cp .env.example .env

Заполни .env:

  • TELEGRAM_BOT_TOKEN
  • OPENAI_API_KEY и OPENAI_BASE_URL
  • PINECONE_API_KEY, PINECONE_INDEX_NAME

3) Pinecone index

Создай индекс в Pinecone:

  • dimension: 1536 (для text-embedding-3-small)
  • metric: cosine

4) Запуск бота

python -m hay_v2_bot.main

📖 Использование в Telegram

  • /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 — только шаблон

📸 Скриншоты для сдачи (минимальный набор)

  1. Дерево проекта (папка hay_v2_bot/ + bot/ pipelines/ components/)
  2. Терминал: успешный старт (Bot started polling... / без ошибок)
  3. Telegram: /start
  4. Telegram: загрузка файла + “готово” + резюме 1 предложением
  5. Telegram: вопрос по документу → ответ
  6. (опционально) Pinecone dashboard: видно индекс/namespace и что есть векторы

🗺️ Roadmap (необязательно)

  • Команда /reset для очистки пользовательского namespace/фильтра
  • Ссылки на источники (chunk_id / page) в ответах
  • Поддержка других форматов документов (TXT, MD и др.)

📄 License

MIT


👤 Автор

Георгий Белянин (Georgy Belyanin)
Email: georgy.belyanin@gmail.com


📝 Примечания

  • Проект создан в рамках курса "Кейс 3: Поиск по своим данным" (VPg07)
  • Все зависимости указаны в requirements.txt
  • Для работы требуется .env файл (см. .env.example в репозитории или создай по шаблону из README)

About

Modular Telegram bot with RAG over user documents. Built with Haystack pipelines, Docling document parsing, Pinecone vector search, and OpenAI. Features automatic document summarization and context-aware Q&A.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages