Это Telegram-бот, предназначенный для ответов на вопросы пользователей, использующий базу знаний (FAQ) и историю чатов. Бот построен с использованием Langchain, LangGraph, SQLAlchemy для взаимодействия с базой данных Supabase (PostgreSQL + pgvector) и Alembic для управления миграциями схемы БД.
Ядро бота — граф LangGraph с guardrails на входе и выходе, LLM-роутером и набором инструментов:
flowchart TD
TG[Telegram message] --> IG[input_guardrails]
IG --> R{router LLM}
R -->|tool_calls| TE[tool_executor]
R -->|direct answer| OG[output_guardrails]
TE --> TOG[tool_output_guardrails]
TOG --> RG[response_generator]
RG --> OG
OG --> OUT[Reply to user]
subgraph Tools
T1[search_faq — векторный поиск pgvector]
T2[chat_history_search]
T3[add / update / delete FAQ]
T4[web search — Tavily / Yandex Cloud]
T5[context_analyzer]
end
TE -.-> Tools
subgraph Storage
S1[(Supabase: PostgreSQL + pgvector)]
S2[(SQLite checkpointer — состояние диалогов)]
end
T1 -.-> S1
T2 -.-> S1
R -.-> S2
Состояние диалога персистится через AsyncSqliteSaver (LangGraph checkpointing), поэтому бот переживает рестарты без потери контекста беседы.
- Язык: Python 3.11+
- Telegram API:
python-telegram-bot - LLM Оркестрация: Langchain & LangGraph
- LLM: Используется через API-прокси (например, OpenRouter) - модель настраивается в
.envиagent/agent_executor.py. - База Данных: Supabase (PostgreSQL)
- Векторное хранилище:
pgvector(расширение PostgreSQL в Supabase) - ORM: SQLAlchemy
- Миграции БД: Alembic
- Распознавание текста (OCR): EasyOCR (для обработки изображений)
- Контейнеризация: Docker, Docker Compose
- Зависимости: Управляются через
requirements.txt
- Ответы на вопросы: Бот отвечает на вопросы в личных сообщениях, при упоминании в группе или при ответе на его сообщение.
- Поиск по FAQ: Использует векторный поиск (эмбеддинги) для нахождения наиболее релевантных ответов в базе знаний FAQ.
- Поиск по Истории Чата: Ищет похожие вопросы в сохраненной истории чата (также с использованием эмбеддингов).
- Управление FAQ: Администраторы могут добавлять, обновлять и удалять записи FAQ через команды бота (требуется реализация/доработка команд или использование инструментов).
- Управление Администраторами: Супер-администраторы (заданные в
.env) могут управлять списком администраторов бота через команду/admin. - Распознавание текста (OCR): Может извлекать текст из присланных изображений и использовать его для ответа. Эта функция является опциональной.
- Анализ Контекста: Определяет, нужно ли отвечать в группе, на основе упоминаний, ответов и содержания сообщения.
- Автоматическая Очистка БД: Периодически удаляет старые записи из FAQ и истории чатов (настраивается).
-
Клонировать репозиторий:
git clone <URL репозитория> cd QA-bot
-
Создать и активировать виртуальное окружение:
python -m venv .venv # Windows .\.venv\Scripts\activate # Linux/macOS source .venv/bin/activate
-
Установить зависимости:
pip install -r requirements.txt
Примечание по зависимостям для OCR (EasyOCR): Функция распознавания текста из изображений (OCR) требует следующих библиотек:
easyocr(~10-15MB)torch(библиотека PyTorch, может занимать от ~200MB до 1GB+ в зависимости от версии и наличия компонентов CUDA)torchvision(дополнение к PyTorch, ~10-50MB)torchaudio(дополнение к PyTorch, ~10-50MB)opencv-python-headless(OpenCV, ~40-60MB)Pillow(уже может быть установлена как зависимость других библиотек)numpy(уже может быть установлена как зависимость других библиотек)scipyscikit-imagepyclippershapely
Если вам не нужна функция распознавания текста из изображений, вы можете вручную удалить эти зависимости из файла
requirements.txtперед установкой, чтобы сэкономить место и время установки. ВDockerfileэти зависимости включены. -
Настроить переменные окружения:
- Скопируйте
.env.exampleв.env. - Заполните
.envвашими данными:TELEGRAM_BOT_TOKEN: Токен вашего Telegram бота.TELEGRAM_BOT_USERNAME: Username бота (без @).ADMIN_USER_IDS: ID супер-администраторов через запятую.API_KEY,API_BASE: Ключ и URL для вашего LLM API (например, OpenRouter).DB_HOST,DB_PORT,DB_NAME,DB_USER,DB_PASSWORD: Данные для подключения к пулу транзакций Supabase (НЕ прямое подключение).OPENAI_API_KEY,OPENAI_API_BASE: ДублируютAPI_KEY,API_BASEдля совместимости с некоторыми частями Langchain/OpenAI client. Установите те же значения.TEST_DATABASE_URL: URL для тестовой базы данных (если запускаете тесты).
- Скопируйте
-
Применить миграции базы данных:
- Убедитесь, что расширение
vectorвключено в вашей базе Supabase. - Выполните:
alembic upgrade head
- Убедитесь, что расширение
-
Запустить бота:
python main.py
- Убедитесь, что Docker и Docker Compose установлены.
- Настройте файл
.env(см. шаг 4 в локальном запуске). Docker Compose автоматически подхватит этот файл. - Собрать и запустить контейнеры:
docker-compose up --build -d
-dзапускает контейнеры в фоновом режиме.--buildпересобирает образ, если были изменения вDockerfileили коде.
- Просмотр логов:
docker-compose logs -f qa-bot
- Остановка:
docker-compose down
Alembic используется для управления изменениями схемы базы данных.
- Создание новой миграции (после изменения моделей в
database/models.py):alembic revision --autogenerate -m "Краткое описание изменений"- Важно: Проверьте сгенерированный файл миграции в
alembic/versions/перед применением. Автогенерация не всегда идеальна.
- Важно: Проверьте сгенерированный файл миграции в
- Применение последней миграции:
alembic upgrade head
- Откат последней миграции:
alembic downgrade -1
- Проверка текущего состояния:
alembic current
- Проверка расхождений между моделями и БД:
alembic check
agent/: Логика LangGraph агента, состояние, инструменты, промпты.database/: Модели SQLAlchemy, CRUD операции, подключение к БД, управление эмбеддингами.telegram_interface/(неявный, логика вmain.py): Обработчики Telegram.core/: Общие утилиты (если появятся).tests/: Юнит-тесты.alembic/: Файлы конфигурации и версий миграций Alembic.logs/: Файлы логов бота.main.py: Точка входа приложения, инициализация Telegram бота и агента.Dockerfile,docker-compose.yml: Файлы для контейнеризации.requirements.txt: Зависимости Python..env: Переменные окружения (секреты) - не коммитить в Git!.env.example: Пример файла.env.alembic.ini: Конфигурация Alembic.README.md: Этот файл.
- Проект прошел рефакторинг, удалены зависимости FastAPI/Gunicorn, настроено подключение к БД через пул транзакций Supabase.
- Управление схемой БД теперь полностью осуществляется через Alembic. НЕ вносите изменения в структуру таблиц напрямую через интерфейс Supabase, используйте миграции.