Для кода ревью в проекте использовался CodeRabbit и Copilot.
Документация на Sphinx: Docs
Проект предназначен для автоматической обработки резюме, извлечения ключевых данных и
оценки соответствия кандидата вакансиям с использованием языковых моделей.
Сначала происходит извлечение данных из резюме, затем осуществляется
сопоставление кандидатов с вакансиями на основе их навыков и требований вакансий. Для работы
проекта вместе с Ollama требуется как минимум 4гб видеопамяти. Для работы
контейнера с gpu для быстрой работы необходим Nvidia Toolkit. Если
нет возможности использовать GPU, то в файле docker-compose нужно удалить строчку:
runtime: nvidia.
В будущем для улучшения масштабирования вместо ollama можно будет использовать vllm.
Пример извлечённых данных из резюме представлен в файле data/example.json.
Предоставленные вакансии представлены в файле data/vacancies.json.
Чтобы добавить новые вакансии, в json файле должны быть указаны следующие поля: название вакансии, описание и компетенции.
Компетенции должны содержать как минимум один блок навыков (например, общие_компетенции),
в котором будет список из компетенций, содержащий название компетенции и необходимый уровень. Например:
{"название": "Методы машинного обучения", "уровень": 2},.
В docker-compose файле можно изменить модель, которая будет использоваться.
Для интеграции с frontend необходимо указать токен для cloudflare туннеля и в
frontend сервере указать новый адрес. Либо, если сервер будет работать в локальной
сети с ML-сервисом, то можно указать адрес без cloudflare туннеля по localhost.
Для запуска проекта достаточно выполнить команду:
docker-compose up --buildПосле этого порту 8000 и с эндпоинтом /candidate_match можно отправлять запрос с
резюме в виде docx, pdf и txt форматах, после чего будет возвращён
json с результатами. Результат будет содержать два поля: поле с подходящей
вакансией (если хоть одна подходит) vacancy, поле, на сколько процентов
кандидат подходит: percentage. За отсутствующие навыки будут вычитаться проценты.
поле с описанием и рассуждением explaining и рекомендации recommendations. Кроме того,
возвращает full_name с именем, email с email (если есть) и phone с номером телефона.
- Парсинг резюме (PDF/DOCX/TXT):
- Извлечение контактов (email, телефон, соцсети)
- Автоматическое определение блоков (навыки, опыт, образование)
- Распознавание базовой информации (ФИО, возраст, город)
- Анализ данных:
- Извлечение ключевых слов с помощью YAKE
- Нейросетевая оценка соответствия вакансиям (Ollama)
- Генерация рекомендаций по обучению
Обработка документов:
pdfplumberpython-docx
NLP:
spaCy+ru_core_news_md(NER)YAKE(ключевые слова)RapidFuzz(fuzzy-сопоставление)
ML/LLM:
Ollama(локальные LLM)- Кастомные промпты
- JSON Schema валидация
Инфраструктура:
- Poetry
- Логирование
- Конфигурация через ENV