До рекрутера не дошло
Прототип работал. Медленно, на одной странице, с костылями — но работал. Расширение инжектировалось на страницу вакансии, вытаскивало текст, отправляло на бэкенд. Получало ответ.
Я был доволен примерно три дня.
Потом начал разбираться как устроен найм на той стороне стола.
Я знал про ATS — упоминал в первом посте. Но «знал» — мягко сказано. Думал что ATS это такая штука которая парсит резюме и ищет ключевые слова. Грубый фильтр, понятная механика.
Нет.
Потратил вечер который планировал потратить на код — читал треды рекрутеров. ATS — это не один алгоритм. Это целая индустрия. Huntflow, Talantix, iRecruit, Potok. Разные системы, разная логика скоринга, разные правила парсинга резюме. Одна режет всё старше 2015 года как «устаревший опыт». Другая требует конкретный формат дат чтобы вообще распознать что перед ней резюме, а не случайный текст. Третья нормализует должности — если ваш тайтл не совпадает с её словарём, вы автоматически попадаете в другую категорию кандидатов.
Ни одна компания не публикует правила. Это конкурентное преимущество HR-отдела.
Но главное — не это.
Главное — разрыв в словаре.
Вакансию пишет HR или нанимающий менеджер. Один язык. Резюме пишет соискатель. Другой язык. Одно и то же — разными словами.
PostgreSQL и «реляционная база данных» — одно и то же. С точки зрения ATS — нет. Система сравнивает токены. «PostgreSQL» в вакансии есть. В резюме — нет. Кандидат идёт ниже в рейтинге. «Управление командой» и «тимлид» — одно и то же. «Agile» и «гибкие методологии» — одно и то же. ATS не интерпретирует. Он сравнивает.
Я нашёл пост на Хабре — кто-то тестировал своё резюме через несколько ATS-систем. Прогонял одно и то же, читал что система выдавала как «распознанные навыки». Одна система нашла «Python» но не нашла «Django» хотя оба были написаны. Другая решила что он работает в компании с 2010 года — потому что год основания был указан в описании проекта, и система посчитала это датой трудоустройства.
Это не редкость. Это норма.
Стало понятно: задача сложнее чем я думал.
Не «оцени — подхожу я или нет». Это слишком простой вопрос. Нужен инструмент который видит вакансию и резюме одновременно, находит разрывы в словаре и говорит: «вот тут вы пишете X, они ищут Y, это одно и то же но ATS их не склеит». Это не про ключевые слова. Это про понимание смысла. Про семантику.
Простым алгоритмом не сделаешь.
Я начал думать про языковую модель. Не как чатбот — как аналитический движок внутри расширения. Который читает два документа и находит смысловые разрывы.
Это оказалось значительно веселее чем я рассчитывал.
Следующая часть — про первую попытку встроить LLM в content script, почему это сломало всё что работало, и что такое API-ключ в браузере с точки зрения безопасности.
Если вы проходили через ATS и знаете как это работает с той стороны — что реально происходит с резюме? Интересно в комментарии.