Skip to content

Repository files navigation

AI Prescoring Candidates

Описание

Учебный Streamlit MVP для автоматического прескоринга кандидатов по тексту вакансии и PDF-резюме.

Возможности

  • ввод текста вакансии;
  • загрузка PDF-резюме;
  • извлечение и очистка текста из PDF;
  • анализ через OpenAI API или mock-режим;
  • структурированный JSON-анализ;
  • расчёт итогового score;
  • сохранение истории кандидатов в CSV.

Стек

  • Python 3.11+
  • Streamlit
  • pdfplumber
  • python-dotenv
  • openai
  • pandas
  • google-genai

Структура проекта

.
├── app.py
├── parser.py
├── gpt_service.py
├── scoring.py
├── models.py
├── storage.py
├── requirements.txt
├── .env.example
├── README.md
├── AGENTS.md
└── data/
    └── history.csv

Установка

pip install -r requirements.txt

Если команда pip недоступна, используйте:

python3 -m pip install -r requirements.txt

Настройка .env

Создайте .env рядом с app.py и заполните переменные:

GEMINI_API_KEY=your_gemini_api_key_here
GEMINI_MODEL=gemini-2.5-flash
OPENAI_API_KEY=your_api_key_here
OPENAI_MODEL=gpt-4o-mini

Если GEMINI_API_KEY задан, приложение использует Gemini. Если Gemini недоступен, но задан OPENAI_API_KEY, приложение использует OpenAI. Если оба ключа отсутствуют или запросы завершаются ошибкой, включается mock-режим.

Запуск

streamlit run app.py

Если streamlit не найден в PATH, запустите через Python:

python3 -m streamlit run app.py

Mock-режим

Mock-режим включается автоматически, если нет API-ключей или запросы к Gemini/OpenAI завершаются ошибкой. Он возвращает демонстрационный анализ в той же структуре, что и LLM-ответ.

Как пользоваться

  1. Вставьте текст вакансии.
  2. Загрузите PDF-резюме.
  3. Нажмите Запустить анализ.
  4. Проверьте извлечённый текст, итоговый score и списки сильных/слабых сторон.
  5. История автоматически сохраняется в data/history.csv.

Example Resumes

Demo resume files for testing are located in:

  • example/resumes/

JSON-схема анализа

{
  "hard_skills_score": 0,
  "experience_score": 0,
  "soft_skills_score": 0,
  "strengths": [],
  "weaknesses": [],
  "missing_skills": [],
  "summary": ""
}

Scoring logic

Итоговый score считается локально, не приходит от GPT:

final_score = hard_skills_score * 0.5 + experience_score * 0.3 + soft_skills_score * 0.2

По умолчанию используются веса 50% / 30% / 20%. В sidebar приложения веса можно изменить; они нормализуются автоматически до суммы 100%. Некорректные значения score приводятся к диапазону 0-100.

Ограничения

  • PDF без текстового слоя может вернуть пустой текст.
  • Mock-режим не выполняет реальную оценку соответствия.
  • CSV history не предназначен для многопользовательского production-хранения.
  • Приложение не хранит API-ключи в коде.
  • Gemini используется первым при наличии GEMINI_API_KEY.

GitHub Reference

Reference repository: https://github.com/MrGAN12009/prescore

Из референса взяты идеи модульной структуры, PDF-парсинга, GPT JSON-анализа и отображения истории. Упрощены Pydantic-валидация, эвристический скоринг, JSON-экспорт и сравнение кандидатов. История реализована иначе: через data/history.csv, как требуется в задании.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages