Описание проекта
Telegram-бот "PDF Resume GPT Assistant" — это бот, который взаимодействует с пользователями через Telegram, проверяет их подписку на определённый канал, принимает резюме в формате PDF и с помощью OpenAI ChatCompletion (GPT-модели) формирует индивидуализированное описание вакансии. Также в нём предусмотрен отдельный функционал для администратора (или нескольких администраторов).
Основная идея
- Цель бота: Автоматизировать первичный контакт с соискателями, получать их резюме и на основе анализа резюме с помощью GPT выдавать текст вакансии или проектного предложения, которое было бы максимально интересно кандидату.
- Целевая аудитория: HR-специалисты, рекрутеры и кадровые агентства, которым нужно быстро обработать входящие резюме и сгенерировать релевантные вакансии / предложения.
Функциональные возможности
- Приветствие и проверка подписки
- Пользователь при первом входе получает приветственное сообщение и ссылку на обязательный канал, на который нужно подписаться.
- Бот проверяет, действительно ли пользователь подписался, и только после этого разрешает отправить резюме.
- Приём резюме и извлечение текста
- Пользователь отправляет резюме в формате PDF.
- Бот с помощью библиотеки PyPDF2 извлекает текст из PDF.
- Генерация вакансии через OpenAI GPT
- Полученный из PDF текст резюме подставляется в шаблон промпта.
- К GPT отправляется запрос (метод ChatCompletion), после чего бот возвращает пользователю сгенерированный текст вакансии.
- Возможность заново отправить резюме
- После ответа бот предлагает пользователю кнопку “Отправить еще раз PDF”, которая возвращает его в состояние ожидания нового резюме.
- Админ-функционал
- Несколько администраторов (ID хранятся в ADMIN_IDS):
- Команда /admin открывает меню с действиями:
- Скачать список пользователей (файл, содержащий ID, username, имя и фамилию)
- Сделать рассылку (администратор вводит текст, и бот рассылает его всем пользователям)
- Сменить промпт (изменить текстовое содержимое, которое будет использоваться для генерации описаний вакансий)
- Команда /export_users (для совместимости) тоже позволяет скачивать список пользователей.
- Команда /broadcast <текст> (для совместимости) обеспечивает массовую рассылку.
- Сохранение данных
- Данные о пользователях (ID, username, имя, фамилия) сохраняются в словаре и дублируются в файл users_data.json, чтобы при перезапуске бота сохранять информацию.
- Токены, параметры OpenAI, список админов и другие конфигурации хранятся в config.py.
- Работа через прокси
- Проект настроен на работу через HTTP-прокси (для Telegram Bot API и для OpenAI). Это может пригодиться, если нужно обойти блокировки или запустить бота в сети с ограниченным доступом.
Технологии и библиотеки
- Язык: Python 3
- Телеграм-бот: pyTelegramBotAPI (telebot)
- Обработка PDF: PyPDF2
- OpenAI API: openai-python
- Логирование: Стандартный модуль logging (уровень INFO, ERROR) с выводом в терминал
- Хранение данных:
- Словарь users_data в памяти
- Серии и загрузка в JSON-файл users_data.json (через модуль json)
Ключевые моменты реализации
- FSM (состояния) в telebot
- В pyTelegramBotAPI нет встроенного FSM, поэтому состояния (например, "waiting_for_resume", "waiting_for_subscribe") реализованы вручную:
- Словарь user_states, где ключ — user_id, значение — текущее состояние.
- При получении команд и callback-данных проверяется текущее состояние пользователя.
- Прокси
- Установка прокси для telebot.apihelper.proxy (для общения с Telegram Bot API).
- Установка прокси для openai.proxy (для общения с OpenAI).
- Гибкость настройки промпта
- При старте из файла prompt.txt загружается шаблон (prompt_template).
- Администратор может динамически изменить промпт через бота, не меняя файл вручную.
- Удобное логирование
- Для каждого ключевого шага (запуск бота, изменение состояния, отправка резюме, вызов API OpenAI, админские действия) выводятся сообщения на уровне INFO или ERROR.