Фильтрация резюме на HH с помощью ИИ

Часть 4. Как я научился делать грубую фильтрацию разюме с помощью API HH.ru и Gemini.

Привет! На связи снова Евгений.

Это четвертая часть цикла о моем самописном инструменте (написанным человеком, который далек от программирования), который вырос из простого поисковика по Excel-файлам в полноценную систему управления бизнес-процессами.

Чтобы вы понимали контекст:

Сначала я сделал поиск по внутренней базе товаров, чтобы менеджеры не путались в ассортименте. Потом добавил парсер и модуль сравнения цен, чтобы мы понимали, что происходит у конкурентов. Затем прикрутил генератор контента и изображений.

И как всегда аппетит растет во время еды. В малом бизнесе часто нет отдельного HR-специалиста. Эту функцию выполняет собственник или руководители отделов. И это всегда привносит определенные неудобства.

Процесс найма обычно выглядит так:

Ты публикуешь вакансию на HeadHunter.

За день прилетает 50–100 откликов.

Ты начинаешь их открывать.

Через час у тебя дергается глаз.

Половина кандидатов вообще не читала описание вакансии. Люди откликаются веерно: «Авось куда-то возьмут». Ты ищешь менеджера в B2B со знанием тендеров, а тебе присылают резюме продавца-консультанта из салона сотовой связи. Формально и то, и то — «продажи», но по факту — разные вселенные.

Чтобы найти одного достойного кандидата, нужно просеять сотни анкет. Это часы монотонной работы, которая отвлекает от реальных дел. Я посмотрел на свой инструмент, где уже успешно трудились нейросети Gemini, и подумал: «Если ИИ может понять, подходит ли этот товар под запрос клиента, почему он не может понять, подходит ли этот человек под нашу вакансию?»

Так началась разработка модуля «Поиск резюме (HH.ru)».

Задача был достаточно простой: построить эффективную воронку отбора

Стандартный поиск на работных сайтах — это набор фильтров. Это работает, но грубо. Мне нужен был инструмент, который бы автоматизировал не просто поиск, а весь процесс первичного отсева, работая по принципу умной воронки: от широкого захвата к глубокому анализу только лучших (ну или хотя бы отсеять ненужные резюме).

Вот как я это реализовал.

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

Первым делом нужно было научить мое Python-приложение общаться с HH.ru. Я зарегистрировал приложение в кабинете разработчика HeadHunter, получил Client ID и Client Secret.

В интерфейсе своего инструмента я добавил кнопку авторизации. Работает это через стандартный протокол OAuth. Я нажимаю «Войти через HH». Открывается окно браузера, где я подтверждаю доступ. Приложение получает токен и сохраняет его (в зашифрованном виде, разумеется). Теперь мой скрипт может официально делать запросы к базе резюме от моего имени.

Предварительный поиск

Я сознательно отказался от сложных интерфейсов. Вместо этого — два простых поля: Город и Текстовый запрос. В поле запроса я пишу так, как сказал бы живому рекрутеру.

Пример: «Нужен активный менеджер по продажам спецодежды. Обязателен опыт работы с юрлицами (B2B), понимание 44-ФЗ и тендеров. Желательно наличие автомобиля».

Как это работает под капотом:

Скрипт берет точный текст моего запроса и город. Он находит ID города (например, Москва — это 1, Краснодар — 53) для API.

Затем он делает запрос к HH.ru, прося выдать до 200 самых свежих резюме, которые соответствуют поисковой фразе в указанном регионе.

Сразу после получения списка, запускается строгий локальный фильтр. API HH.ru может выдать кандидатов из всего края или тех, кто готов к переезду. Мой скрипт проверяет поле «Город» в каждом резюме и отбрасывает всех, у кого оно не совпадает с введенным мной названием.

На выходе мы получаем отфильтрованный список кандидатов строго из нужного нам города.

«Быстрый сканер» — локальный предварительный рейтинг

Анализировать все 150-200 резюме с помощью Gemini — дорого и долго. Поэтому следующий этап — быстрая внутренняя сортировка.

Система проходит по каждому резюме из отфильтрованного списка и начисляет ему предварительные баллы. Ищет совпадения ключевых слов из моего запроса в названии должности и ключевых навыках кандидата. Добавляет бонусные баллы, если резюме было обновлено недавно. Это не ИИ, а простой и быстрый алгоритм. Его задача — поднять наверх списка тех, кто с наибольшей вероятностью подходит под запрос.

Глубокий анализ лучших с помощью Gemini

Вот здесь и начинается ИИ-магия. Система берет топ-50 (или меньше, в зависимости от настроек) кандидатов из предварительно отсортированного списка и только для них запускает глубокий анализ.  Для этих 50 кандидатов скачиваются их полные резюме: весь опыт работы, обязанности, достижения, раздел «Обо мне». Далее, для каждого кандидата, этот массив текста отправляется модели Gemini (роль «HH-Analyst»). В промпте для нее заложены инструкции опытного HR-директора.

ИИ делает следующее:

Сравнивает профиль с запросом. Он проверяет, действительно ли опыт кандидата релевантен. Если человек 10 лет продавал, но не в B2B, а в рознице — ИИ это заметит и снизит балл. Выставляет оценку. От 1 до 10 баллов по шкале соответствия моей вакансии. Пишет саммари (Summary). Это краткая выжимка в 2-3 предложения. Например: «Кандидат с сильным профилем в продажах, знает наш рынок. Из минусов — часто меняет работу (4 места за 2 года)».

Генерирует вопросы для собеседования. Это доп фича для руководителя. ИИ видит пробелы или интересные места в резюме и формулирует конкретные вопросы. Пример: «Вы указали, что выиграли крупный тендер в 2023 году. Какова была ваша роль в подготовке документации?»

Весь этот процесс для 50 кандидатов занимает пару минут. Вручную я бы потратил на это несколько часов.

Результат: Как это выглядит на экране

Когда анализ завершен, я вижу перед собой информативные карточки, отсортированные по финальному рейтингу от ИИ. Сверху — «десятки» и «девятки».

В карточке я сразу вижу:

ФИО, возраст, город.

Вердикт ИИ: Оценка и обоснование (почему этот кандидат подходит или нет).

Опыт работы

Вопросы: Готовый список, который можно распечатать перед звонком.

Если мне нравится кандидат, я нажимаю «Показать опыт работы», и разворачивается детализация, где уже подсвечены ключевые навыки, которые я искал.

Экспорт и работа с командой

К примеру, мне нужно показать кандидатов руководителю отдела продаж. Скидывать ссылки в мессенджер неудобно. Поэтому я добавил кнопку «Скачать отчет в Excel». Система формирует аккуратную таблицу. В ней есть колонки: ФИО, Ссылка, Зарплата, Телефон и, самое главное, — Комментарий ИИ и Вопросы.

Итоги внедрения

Потенциальный эффект: что может измениться в нашем найме?

Внедрение такого автоматизированного подхода может кардинально изменить процесс подбора персонала в компании, особенно там, где нет выделенного HR-отдела. Скорость найма. Больше не нужно копить резюме днями, чтобы выделить время на их чтение. Запустили скрипт, ушли пить кофе, вернулись — список лучших кандидатов готов.

Качество кандидатов. Снижается риск пропустить хороших специалистов, у которых просто неидеально оформлено резюме (хотя тут большой вопрос, если он не может продать себя, как он будет продавать что-то еще). ИИ видит суть опыта, даже если он описан корявым языком, и находит скрытые таланты.

Уровень собеседований. Даже если интервью проводит не профессиональный рекрутер, а линейный руководитель, у него перед глазами будет список умных, предметных вопросов, сгенерированных ИИ на основе анализа конкретного резюме. Разговор сразу становится более глубоким и по делу.

Конечно, ИИ не заменит личного общения. Он не оценит адекватность человека, его харизму и то, как он вольется в коллектив. Но он может снять с руководителей огромный пласт рутинной работы по первичному отсеву. В результате можно тратить свою энергию и время только на тех, кто этого действительно стоит.

Всех благодарю за прочтение. Всем успехов в ваших начинаниях!
оригинал статьи

P.S.: в ходе обсуждений пришел к тому, что необходимо внедрить ИИ детектинг резюме. То есть определять резюме, которые были написаны с помощью ИИ. Это не говорит, что их нужно отфильтровать, но знать об этом не помешало бы.