Мы с важной новостью: с 28 февраля 2025 года сервис Хабр Фриланс прекратит свою работу.

Купить услуги можно до 28 февраля 2025, но пополнить баланс уже нельзя. Если на вашем счете остались средства, вы можете потратить их на небольшие услуги — служба поддержки готова поделиться бонусами, на случай, если средств немного не хватает.
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