R50 8d45658bd62c76ee49d4121753ba1e31
Разработка ботов автоматизация

Telegram-бот "PDF Resume GPT Assistant"

Добавлено 05 янв 2025 в 11:22
Описание проекта Telegram-бот "PDF Resume GPT Assistant" — это бот, который взаимодействует с пользователями через Telegram, проверяет их подписку на определённый канал, принимает резюме в формате PDF и с помощью OpenAI ChatCompletion (GPT-модели) формирует индивидуализированное описание вакансии. Также в нём предусмотрен отдельный функционал для администратора (или нескольких администраторов).

Основная идея
  • Цель бота: Автоматизировать первичный контакт с соискателями, получать их резюме и на основе анализа резюме с помощью GPT выдавать текст вакансии или проектного предложения, которое было бы максимально интересно кандидату.
  • Целевая аудитория: HR-специалисты, рекрутеры и кадровые агентства, которым нужно быстро обработать входящие резюме и сгенерировать релевантные вакансии / предложения.
Функциональные возможности
  1. Приветствие и проверка подписки

    • Пользователь при первом входе получает приветственное сообщение и ссылку на обязательный канал, на который нужно подписаться.
    • Бот проверяет, действительно ли пользователь подписался, и только после этого разрешает отправить резюме.
  2. Приём резюме и извлечение текста

    • Пользователь отправляет резюме в формате PDF.
    • Бот с помощью библиотеки PyPDF2 извлекает текст из PDF.
  3. Генерация вакансии через OpenAI GPT

    • Полученный из PDF текст резюме подставляется в шаблон промпта.
    • К GPT отправляется запрос (метод ChatCompletion), после чего бот возвращает пользователю сгенерированный текст вакансии.
  4. Возможность заново отправить резюме

    • После ответа бот предлагает пользователю кнопку “Отправить еще раз PDF”, которая возвращает его в состояние ожидания нового резюме.
  5. Админ-функционал

    • Несколько администраторов (ID хранятся в ADMIN_IDS):
      • Команда /admin открывает меню с действиями:
        1. Скачать список пользователей (файл, содержащий ID, username, имя и фамилию)
        2. Сделать рассылку (администратор вводит текст, и бот рассылает его всем пользователям)
        3. Сменить промпт (изменить текстовое содержимое, которое будет использоваться для генерации описаний вакансий)
    • Команда /export_users (для совместимости) тоже позволяет скачивать список пользователей.
    • Команда /broadcast <текст> (для совместимости) обеспечивает массовую рассылку.
  6. Сохранение данных

    • Данные о пользователях (ID, username, имя, фамилия) сохраняются в словаре и дублируются в файл users_data.json, чтобы при перезапуске бота сохранять информацию.
    • Токены, параметры OpenAI, список админов и другие конфигурации хранятся в config.py.
  7. Работа через прокси

    • Проект настроен на работу через 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)
Ключевые моменты реализации
  1. FSM (состояния) в telebot

    • В pyTelegramBotAPI нет встроенного FSM, поэтому состояния (например, "waiting_for_resume", "waiting_for_subscribe") реализованы вручную:
      • Словарь user_states, где ключ — user_id, значение — текущее состояние.
      • При получении команд и callback-данных проверяется текущее состояние пользователя.
  2. Прокси

    • Установка прокси для telebot.apihelper.proxy (для общения с Telegram Bot API).
    • Установка прокси для openai.proxy (для общения с OpenAI).
  3. Гибкость настройки промпта

    • При старте из файла prompt.txt загружается шаблон (prompt_template).
    • Администратор может динамически изменить промпт через бота, не меняя файл вручную.
  4. Удобное логирование

    • Для каждого ключевого шага (запуск бота, изменение состояния, отправка резюме, вызов API OpenAI, админские действия) выводятся сообщения на уровне INFO или ERROR.
8c495618e5