Rychagov S.
🎯 AI Recruiting · HeadHunter · Matching

Production AI Resume Search с интеграцией с HeadHunter: архитектура, matching и anti-bias pipeline

Практический разбор системы AI-подбора кандидатов на базе hh.ru: от ingestion и нормализации резюме до explainable scoring и HR-ready short list.

TL;DR

Production AI-рекрутинг — это не просто список откликов по вакансии.

Рабочая система включает ingestion из HeadHunter API, нормализацию данных резюме, структурированный matching и explainable scoring.

В текущем контуре реализованы авторизация, обновление вакансий, сохранение резюме, пакетный AI-анализ кандидатов и выдача объяснимого рейтинга.

Ключевые сложности: шумные резюме, неоднородные форматы, устаревшие профили и риск bias в принятии решений.

Критичный принцип: AI помогает рекрутеру принимать решение быстрее, но не заменяет human review.

Что решает система

Задача: быстро и обоснованно найти релевантных кандидатов среди большого массива откликов и профилей.

Автоматический поиск

Система агрегирует кандидатов по вакансии и формирует единый массив для оценки.

Ранжирование

Кандидаты сортируются по суммарному match-скорингу, а не только по одному фактору.

Объяснимость

Показывается, почему кандидат подходит: совпавшие навыки, опыт, gaps и рекомендации.

Масштаб

Работа с тысячами резюме через пакетные операции и сохраненные датасеты.

Реальный сценарий: HR ищет «Senior Python + RAG + NLP». Система получает релевантные резюме, ранжирует их, показывает причины match и фиксирует пробелы.

Architecture Pipeline

Vacancy / Query
    ↓
Query Normalization
    ↓
Resume Ingestion (HeadHunter API)
    ↓
Resume Parsing
    ↓
Structured Extraction
    ↓
Candidate Filtering & Selection
    ↓
Scoring Engine
    ↓
LLM Explanation
    ↓
Ranked Candidates

Такой пайплайн делает подбор воспроизводимым: каждый этап можно отлаживать отдельно и улучшать без полной переработки системы.

Как устроено в текущей реализации

Система работает как пошаговый HR-процесс:

1

Авторизация работодателя

Подключение аккаунта HeadHunter через OAuth для безопасного доступа к данным вакансий и откликов.

2

Обновление вакансий

Система подтягивает актуальные вакансии и их параметры для дальнейшего матчинга кандидатов.

3

Загрузка и сохранение резюме

Резюме по выбранной вакансии загружаются постранично и сохраняются для воспроизводимого анализа.

4

AI-анализ и рейтинг

По каждому кандидату формируется рейтинг, сильные/слабые стороны, совпадения навыков и вопросы для интервью.

Интеграция с HeadHunter

HeadHunter API встраивается через OAuth + API-запросы к вакансиям и резюме. В реализации учитываются:

1

OAuth авторизация

Получение access token, refresh token и user context.

2

Пагинация

Резюме запрашиваются страницами (до 50 на страницу), с возможностью поэтапного сохранения.

3

Кеширование и snapshot

Данные сохраняются в JSON per-user для повторяемого анализа и повторных прогонов.

4

Обновление данных

Vacancies/Resumes можно обновлять и повторно анализировать без ручной пересборки.

Типичные проблемы источника: неполные профили, разные шаблоны резюме, устаревшая информация, отсутствие единого стандарта навыков.

Parsing резюме и structured extraction

Критичный этап — нормализация неструктурированных данных в единый профиль кандидата.

Сложности: свободный текст, разная плотность описаний, неодинаковые форматы, частичная заполненность секций.

Поле Пример
НавыкиPython, SQL, RAG, NLP
Опыт5 лет (60 месяцев)
РолиBackend Developer, ML Engineer
КомпанииКомпания X, Компания Y
ОбразованиеМГУ, прикладная математика
УровеньMiddle / Senior

Текст резюме vs структурированные поля

Один только свободный текст резюме недостаточен для точного подбора.

В production важны структурированные поля: опыт в месяцах, ожидаемая зарплата, локация, статус поиска, стек навыков и релевантность роли.

Практический подход: сначала структурирование профиля кандидата, затем скоринг и объяснение результата для HR.

Hybrid Retrieval

В контуре HH-подбора используется комбинированный отбор кандидатов:

Источник вакансии

Кандидаты отбираются по конкретной вакансии и ее параметрам из HeadHunter.

Структурированные фильтры

Учитываются опыт, статус поиска, локация, зарплатные ожидания и навыки.

AI-интерпретация

LLM анализирует профиль кандидата и формирует объяснимую оценку соответствия.

Итоговый shortlist

Результат — рейтинг кандидатов с причинами и рекомендациями для интервью.

Scoring / Matching Engine

Ключевой differentiator системы — explainable scoring, а не «черный ящик».

Skill match:      0.8
Experience match: 0.6
Role match:       0.9
Education match:  0.3

Final score = w1*Skill + w2*Experience + w3*Role + w4*Education

Пример explainable вывода: «Кандидат подходит, потому что имеет 5 лет Python, подтвержденный опыт NLP и практику RAG; пробел — мало данных по MLOps в продакшне».

LLM слой

LLM используется как интерпретационный слой:

1) объяснение match и ранжирования;

2) нормализация навыков и терминов;

3) query rewrite для точного поиска;

4) генерация краткого summary кандидата для HR.

Anti-bias и ограничения

AI-рекрутинг несет риски bias по полу, возрасту, компаниям и образовательным траекториям.

Практики снижения риска: исключение sensitive-признаков из scoring, прозрачные причины match, human-in-the-loop, регулярный аудит распределений рекомендаций.

Важно: система должна помогать принимать решение, а не автоматически «нанимать».

Docker / Production контур

Рекомендуемая production-схема:

API-интеграция с HeadHunter, слой бизнес-логики подбора, хранение snapshot-данных, пакетная обработка и аудит действий рекрутера.

Разделение на сервисы важно для стабильной работы, масштабирования batch-анализа и контроля SLA.

Типичные ошибки внедрения

1) Сравнивать кандидатов только по общему впечатлению, без структурированного скоринга.

2) Игнорировать опыт, seniority и salary constraints.

3) Не нормализовать навыки и названия ролей.

4) Не делать explainability для HR.

5) Не учитывать разнообразие форматов резюме.

6) Не строить feedback loop по факту найма.

Метрики качества

precision@k

Доля релевантных кандидатов в верхних позициях short list.

time-to-hire

Насколько система сокращает время закрытия вакансии.

match accuracy

Насколько итоговый рейтинг коррелирует с экспертной оценкой HR/hiring manager.

HR acceptance rate

Процент рекомендаций AI, которые проходят в следующий этап отбора.

JSON примеры (API-ready)

Запрос на анализ кандидата

GET /dashboard/hh/?action=analyze_candidate&vacancy_id=131173772&resume_id=abc123

Фрагмент explainable ответа

{
  "overall_rating": 78,
  "skill_match": {
    "match_percentage": 82,
    "matched_skills": ["Python", "NLP", "SQL"],
    "missing_skills": ["Production RAG", "MLOps"]
  },
  "conclusion": "Кандидат хорошо подходит с оговорками",
  "interview_questions": [
    "Опишите production-кейс с quality monitoring",
    "Как вы снижали ошибки в подборе?"
  ]
}

FAQ

Как система ищет кандидатов?

Через данные HeadHunter по выбранной вакансии, структурированную фильтрацию и AI-скоринг с объяснением.

Можно ли полностью заменить HR?

Нет. Система ускоряет и структурирует выбор, но финальное решение остается за человеком.

Что важнее для качества подбора?

Качество исходных данных HH, корректные фильтры и прозрачный скоринг с объяснением причин.

Можно ли запускать локально?

Да, при локальной инфраструктуре и контроле доступа к данным кандидатов.

Как снизить bias?

Через explainable scoring, исключение sensitive-признаков, аудит и human-in-the-loop review.

Key Takeaways

1) AI-рекрутинг = данные HH + structured matching + explainable scoring.

2) Structured data и нормализация навыков критичны для точного ранжирования.

3) Автоматизация ускоряет отбор, но не заменяет HR-экспертизу.

4) Главный риск и главный актив — качество данных, а не только модель.

Кому подходит

HR-командам, рекрутинговым агентствам, enterprise-компаниям и стартапам с массовым наймом, где важны скорость подбора, прозрачность решений и контроль качества short list.

Связаться в Telegram