Как я построил ATS, где рекрутёр — это робот

Я освободил рекрутёра от рутины. Его работу делает AI ATS, которая сам договаривается с кандидатами и проводит живое голосовое интервью. Рекрутёр перестал быть оператором переписки — остался только тем, кто решает.

Не «ещё один канбан для резюме». Это система, где AI сам разбирает резюме, оценивает кандидата, договаривается с ним в мессенджере, проводит голосовое интервью в реальном времени, проверяет тестовое и выставляет оценки. И уже работает с живыми клиентами каждый день.

Как я построил ATS, где рекрутёр — это робот

Откуда это взялось

В прошлый раз я рассказывал, как в одиночку с AI-агентами собрал ERP-платформу на Kubernetes из 30+ микросервисов. ATS — один из её модулей,. Но именно он первым вышел в промышленную эксплуатацию, поэтому в него вложено больше всего AI-логики.

О нём и рассказываю отдельно. Рекрутинг — это воронка, и почти на каждом её шаге сидит рутина: прочитать резюме, понять, подходит ли человек, написать ему, дождаться ответа, согласовать время, провести первичный созвон, дать тестовое, оценить.

Один рекрутёр физически не тянет сотню кандидатов в неделю на этой рутине. Я задался вопросом: что из этого может делать машина — не «подсказывать», а именно делать. Оказалось — почти всё, кроме финального решения.

Воронка, которая не тормозит

Основа ATS — канбан-воронка: колонки-статусы, кандидаты-карточки, перетаскивание между этапами. Звучит банально, пока у вас не 30 кандидатов, а 800+ на одной вакансии. Тогда обычный канбан начинает грузиться секундами и лагать на каждом движении.
Я это прошёл.

Решение: сервер отдаёт первые 20 карточек на колонку сразу (рендер на сервере, браузер получает готовый HTML за полсекунды), показывает реальные счётчики по всем этапам, а остальные карточки подтягивает фоном одним запросом через долю секунды — без «мигания» и без блокировки интерфейса. На вакансии в 878 кандидатов доска открывается мгновенно. Перетаскивание защищено от гонок, чтобы карточка не «отскакивала» при быстрых перемещениях.Мелочь? Нет. Это разница между «инструментом, которым пользуются» и «ещё одной системой, которую все ненавидят».

Как я построил ATS, где рекрутёр — это робот

Воронка — это конструктор, а не жёсткая схема

Ни один рекрутинг не похож на другой, поэтому в системе настраивается почти всё. Этапы воронки — свои под каждый процесс: колонки, их порядок, правила переходов между ними. На вход и выход из любого этапа вешаются автоматизации — те самые рецепты: написать кандидату, запустить автоскрининг, выслать тестовое, сменить статус на HH, дёрнуть вебхук. Процесс собирается как из кубиков: «попал на этап Х — бот договорился об интервью», «сдал тестовое — ушёл на автопроверку».

Вакансии можно объединять в группы и задавать на них сроки — за сколько дней подбор должен быть закрыт и где проходит «красная линия». И тут снова в игру вступает копайлот: он ориентируется на эти сроки и сам сигналит, если группа вакансий отстаёт от графика или кандидат завис на этапе дольше нормы. То есть вы один раз описываете, как должен идти найм, — а система следит, чтобы он так и шёл, и подсказывает, когда процесс сходит с рельсов.

Резюме на входе: что угодно превращается в структуру

Кандидат приходит в разных форматах: PDF-резюме, ссылка на hh.ru, или рекрутёр просто вставляет текст руками. ATS принимает всё три способа и приводит к единой структуре через LLM: ФИО, должность, контакты, опыт по местам работы, образование, навыки — из сырого текста или PDF извлекается заполненная карточка.

Тонкость, на которой я обжёгся и починил: извлечение идёт асинхронно, и если создать кандидата в вакансии до того, как модель дочитала резюме, весь дальнейший анализ пойдёт по пустой карточке — мусор на входе, мусор на выходе. Поэтому система дожидается завершения разбора и только потом связывает кандидата с вакансией. Такие «незаметные» гонки — половина работы над продуктом, который реально используют.

Плагин для браузера: кандидат с любого сайта в один клик

Рекрутёры живут на джоб-сайтах. Поэтому есть расширение для браузера: открываешь резюме на hh, linkedin, habr — прямо на странице появляется кнопка «Отправить в ATS».

Нажал — данные кандидата уже в ATS, разобраны и привязаны, куда нужно. Не надо копировать поля руками, скачивать PDF, потом загружать. Увидел подходящего человека — забрал одним движением, не выходя со страницы.

AI-оценка: насколько кандидат подходит

Как только резюме связано с вакансией, система считает релевантность — насколько кандидат подходит под конкретную позицию. И это не одна модель и не «ключевые слова совпали». Здесь работают три слоя.

Первый — семантика. У каждого резюме и каждой вакансии есть векторное представление (эмбеддинг), и близость считается по смыслу, а не по словам: «питонист» и «Python-разработчик» для системы одно и то же, и это не разваливается ни на опечатках, ни на синонимах.

Так система заодно находит похожих кандидатов под вакансию и похожие вакансии под кандидата.Второй — LLM. Модель читает опыт кандидата и требования вакансии и разбирает совпадение по критериям: не просто «70%», а из чего эти 70% складываются.Третий — мой секретный ингредиент. Есть приём, который я оставлю за кадром: именно он вытягивает точность там, где обычная связка «эмбеддинг + промпт» даёт шум. Балл виден в карточке и в списке, по нему сортируется воронка.

Точечный подбор и интеграция с HH

Сейчас основной сценарий — точечный подбор: рекрутёр работает не с абстрактным потоком, а с конкретными людьми под конкретную вакансию. И здесь готова самая важная для российского рынка интеграция — hh.ru.

Рекрутёр подключает свой аккаунт HH, и дальше ATS сам собирает отклики по вакансии, импортирует резюме — вместе с фото и статусом поиска работы кандидата, а статус.

Резерв: база, которая работает на вас

Каждый кандидат, прошедший через систему, остаётся в резерве — это не архив, а живой пул. Открываешь новую вакансию, жмёшь «Подобрать из резерва» — и система находит среди всех накопленных кандидатов тех, кто подходит под неё по смыслу, с процентом близости.

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

Бот, который сам договаривается с кандидатом

Вот тут начинается то, чего в обычных ATS нет. У рекрутёра есть автоматизация «Договориться» — и это не рассылка шаблонов, а живой диалог.

Кандидат попал в нужную колонку — бот сам пишет ему в мессенджер и ведёт переписку человеческим языком: представляется, напоминает, на какую вакансию человек откликался, отвечает на вопросы, предлагает время и понимает ответ («давайте во вторник после обеда» — понимает).

Каждую реплику кандидата обрабатывает модель, а не regex по ключевым словам. Работает только в рабочие часы, ходит по нескольким каналам в заданном порядке, если человек молчит — возвращается через паузу, и так несколько дней.Агент отлажен так, чтобы не выдумывал условия, зарплату, название компании и площадку встречи, а даты и слоты подбирает не модель, а код — иначе модель предлагала кандидатам субботы.

Предусмотрена и защита от Prompt Injection: реплики кандидата подаются модели как данные, а не как инструкции, поэтому «а теперь забудь всё и сделай вот что» не уводит бота со сценария. А если рекрутёр вмешался в переписку сам — бот встаёт на паузу и не мешает; вернуть его в диалог можно одной кнопкой.Цель диалога настраивается: договориться о собеседовании, об автоматическом интервью или о тестовом задании.

В конце бот сам создаёт встречу или выдаёт ссылку и переносит кандидата на нужный этап. Живой человек подключается только там, где действительно нужен: кандидат торгуется по деньгам, просит перезвонить, ведёт себя странно — бот честно передаёт разговор рекрутёру, а не выдумывает.

Автоматическое интервью: голосом, в реальном времени

Дальше — интервью. У меня три режима, и все три работают. Это была эволюция — от простого к сложному, — но старое никуда не делось: режим выбирается под задачу конкретной вакансии, а не «последний отменяет предыдущие».

Асинхронное аудио: кандидат переходит по ссылке, слышит вопросы голосом (не роботный синтезатор из браузера, а нормальный русский голос, который мы синтезируем сами на gpu) и записывает голосовые ответы в удобное время.

Система их расшифровывает, анализирует и выдаёт рекрутёру транскрипт с оценкой и рекомендацией.С видео: то же самое, но кандидат смотрит на озвученные вопросы и записывает видеоответы в 720p.

Вопросы озвучиваются заранее, ответы хранятся ограниченный срок и удаляются автоматически.Живое: полноценный голосовой диалог в реальном времени(привет Ксенья). Кандидат разговаривает с AI-интервьюером как по телефону — тот задаёт вопросы, слушает, реагирует, уточняет.

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

Куда простую вакансию можно закрыть асинхронной записью, а где нужен живой диалог — решает рекрутёр под задачу. Но все три режима сходятся в один и тот же скоринг: неважно, записал кандидат аудио, видео или поговорил вживую — на выходе рекрутёр получает транскрипт, оценку и рекомендацию в единой карточке.

Отдельно повозился с паузами: первая версия «думала» слишком быстро и перебивала человека. Пришлось вернуть человеческие паузы — дать кандидату договорить, не торопить. Скорость ради скорости тут вредна; важна естественность.

Тестовые задания

Рекрутёр составляет тестовое из открытых вопросов, кандидат получает персональную ссылку, отвечает в удобное время (ответы сохраняются на лету, чтобы ничего не потерять) и отправляет.

После сдачи кандидат автоматически переносится дальше по воронке, а рекрутёру приходит уведомление. Договориться о тестовом и выслать ссылку тоже может бот — в той же переписке, где он вёл кандидата раньше.

Оценки по этапам и критериям

Одна общая оценка кандидата — это ложь: человек может быть сильным на бумаге и провалить интервью. Поэтому у каждого этапа своя оценка: резюме, скрининг, тестовое — каждое оценивается по одним и тем же критериям вакансии, а в шапке карточки показывается среднее.

Раньше общий балл переоценивался автоматически после каждого шага и «прыгал»; я это убрал — теперь видно, где именно кандидат показал себя, а где просел.Тестовое проверяет модель.

Один раз на каждый вопрос генерируется эталон «хорошего ответа», по нему выставляется балл, а к самому ответу модель оставляет замечания «на полях» — как живой проверяющий. Автор проверки в системе так и подписан — «Искин». Рекрутёр не правит оценку руками, но может пересчитать её заново и посмотреть историю.

Копайлот, который смотрит за воронкой

Отдельная история — AI-копайлот, который следит за процессом, а не ждёт вопроса. Он анализирует состояние воронки и подсказывает, что делать дальше: где кандидат завис без движения, у кого просрочен этап, что пора закрыть. И делает это периодически, сам — не рекрутёр идёт к системе, а система приходит к рекрутёру с подсказкой.

Причём копайлот не просто советует — он умеет действовать: переместить кандидата по статусу, оставить комментарий. Важный принцип: все его действия идут через те же механизмы, что и действия человека (со всей историей, автоматизациями и уведомлениями), а не «в обход» напрямую в базу. AI здесь — полноценный участник процесса, а не костыль сбоку.

Заказчик работает в воронке — без входа в систему

Часто в найме участвует тот, у кого нет и не будет доступа в ATS: нанимающий менеджер на стороне клиента, заказчик у агентства. Раньше рекрутёр пересылал им кандидатов в мессенджере и руками собирал ответы.

Здесь для этого есть одна ссылка на вакансию. Заказчик открывает её — и видит всю воронку: кандидатов по этапам. И это не режим «только посмотреть»: он сам двигает людей между этапами — берёт дальше, отправляет в отказ или в резерв — прямо со страницы, без логина и без обучения интерфейсу. Рекрутёр заранее настраивает, какие этапы и какие переходы показывать заказчику. Фактически клиент работает в вашей воронке, не заходя в систему.

Голосование, когда решают несколько человек

Когда решение коллегиальное — кандидата смотрят несколько участников процесса, — по той же ссылке включается голосование: каждый ставит палец вверх или вниз.

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

Отчётность

По ночам система собирает витрины: воронки по вакансиям и кандидатам, конверсию и отказы по этапам, разбивку по рекрутёрам. Рекрутёр видит, где именно теряются люди, а руководитель — кто сколько закрывает. Это не «выгрузка в Excel», а готовые срезы, которые считаются сами.

Как я построил ATS, где рекрутёр — это робот

И то, что обычно продают как отдельные сервисы

Каждый из этих пунктов — чей-то отдельный продукт. Здесь они просто части одной карточки кандидата:

  • Тестирование — психометрика: Big Five, типология Юнга, профориентация RIASEC, управленческие роли по Адизесу. Ссылка кандидату, результат — в профиль. Всё на открытых методиках, без спорных товарных знаков.
  • Генерация оффера — оффер собирается по шаблону и отправляется кандидату в пару кликов.
  • Электронная подпись — кандидат подписывает согласие на ПД простой электронной подписью: код-подтверждение с фиксацией времени, IP и устройства.
  • Пребординг — пошаговая форма после оффера: кандидат загружает документы, а наш OCR их распознаёт. От «нашли» до «оформили» — в одной системе.
  • Календарь и слоты — единый календарь встреч с планировщиком слотов, который учитывает занятость интервьюера и переговорной, чтобы не назначить двоих на одно время.
  • Оргструктура найма и кастомные поля — штатные позиции под наём и возможность добавить свои поля и раскладку форм под собственный процесс.

Почему данные никуда не уходят

Резюме, записи интервью, переписка — это персональные данные живых людей. Поэтому вся чувствительная обработка идёт на наших моделях в нашем кластере в РФ, а не в чужих облаках.

Аудиоответы интервью не копятся: в базе они живут только до расшифровки, после чего удаляются, а по ночам отдельная задача добивает остатки. Видео тоже удаляется автоматически. Для рынка, где утечка персональных данных — это не абстрактный риск, а условие входа, всё это не приятная опция, а требование.

Интеграции: там, где кандидаты уже есть

ATS не живёт в вакууме. Резюме и отклики приходят с hh.ru, а расширение для браузера тащит кандидатов прямо со страниц сайтов; переписка ведётся в тех каналах, где кандидат есть — Telegram, почта и дальше по списку; вакансии одной галочкой публикуются на наш публичный джоб-сайт с семантическим поиском по смыслу; внешние источники вакансий парсятся отдельным конвейером. Кандидат заходит с любой стороны воронки — а собирается всё в одной карточке.

Что из этого уже работает

Всё, о чём я рассказал, — не демо и не роадмап. Это работает в продакшене, с живыми клиентами, каждый день: воронка на тысячи кандидатов, разбор резюме, расширение для браузера, AI-оценка релевантности и семантический подбор, резерв, интеграция с HH, бот, который сам договаривается с кандидатами в мессенджерах, асинхронное и живое голосовое интервью, тестовые с автопроверкой, оценки по этапам, AI-копайлот, внешние ссылки для заказчика с голосованием, отчётность, психометрика, оффер с электронной подписью и пребордингом.

Реальные рекрутёры ведут реальных кандидатов — а бóльшую часть рутины уже делает машина.

Что это меняет

Обычный ATS помогает не потерять кандидата. Этот — забирает на себя саму работу с кандидатом: прочитать, оценить, написать, договориться, поговорить, проверить, напомнить.

Рекрутёр перестаёт быть оператором переписки и становится тем, кто принимает решения — а рутину ведёт AI, круглосуточно и без выгорания.И собрано это одним человеком с командой AI-агентов, на собственной платформе, где следующий подобный модуль поднимается за недели, а не за годы — потому что авторизация, мультитенантность, CI/CD, мониторинг и AI-инфраструктура уже построены.

Мы сами этим живём каждый день

И это, наверное, главное. Это не подрядная разработка «на заказ, лишь бы сдать». У нас собственное кадровое агентство, и ATS — наш ежедневный рабочий инструмент: мы ведём в нём своих кандидатов сами. Поэтому каждая фича здесь — не гипотеза продакт-менеджера с доски, а ответ на конкретную боль, о которую мы сами спотыкались. Мы знаем, что нужно рекрутёру, потому что рекрутёр — это мы.

Первая версия заняла месяц, вторая — два, третья — три. А потом ещё около полугода ушло на то, чего не видно в демо, но что решает всё: полировку, отладку и те самые «незаметные» гонки и грабли, из-за которых система либо работает с живыми людьми, либо разваливается на первом же нестандартном кандидате.

Мы потихоньку выходим на публику, заявку на попробвоать можно оставить на

Про саму платформу — в предыдущей статье, про её AI-мозг (единое окно к моделям и роутер) — в отдельном цикле, который сейчас выходит.

Telegram: @rekrutai_ru — там техническая кухня, ворклог и мысли. Если интересны детали по конкретной части — живому интервью, боту-переговорщику, копайлоту или оценке этапов — пишите в комментариях.

22