TL;DR
LLM плохо различает кандидатов, когда разница между ними небольшая. Если резюме двух кандидатов отличаются всего одним навыком или опытом — большинство моделей угадывают правильного примерно в 50–80% случаев. Это уровень монетки. Чем больше разница в квалификации, тем надёжнее модель — но даже топовые Claude Sonnet 4 и GPT-5 не дотягивают до 100% даже при очевидной разнице.
Главная находка: у LLM есть систематическая слабость именно на «пограничных» кандидатах — тех, кто почти одинаково подходит. В реальном найме это самая частая ситуация: на конкурентную вакансию приходят десятки схожих резюме. Именно здесь модель отказывается принимать решение (абстенция) или выбирает случайно. При этом явные демографические сигналы в резюме — например, упоминание «Ассоциации чернокожих специалистов» или женских профессиональных наград — сдвигают выбор модели, даже если квалификация идентична.
Как это устроено: исследователи создали контролируемые пары резюме с известным «правильным ответом» — один кандидат объективно сильнее другого на k навыков (k=1, 2, 3). Затем проверили, насколько часто LLM выбирает правильного. Чем меньше k, тем хуже результат. Отдельно протестировали равные резюме, различающиеся только демографическими деталями — и большинство моделей всё равно выбирали одного из двух, хотя должны были воздержаться.
Схема метода
Это не техника промптинга — это аудиторская рамка для оценки надёжности LLM. Для пользователя чата важны выводы:
СИТУАЦИЯ 1: Кандидаты сильно отличаются (3+ критерия)
→ Топовые модели (Claude S4, GPT-5, Gemini 2.5 Pro) надёжны: >95%
→ Слабые модели (Llama 8B): ~80% — всё ещё рискованно
СИТУАЦИЯ 2: Кандидаты отличаются минимально (1 критерий)
→ Топовые модели: 82–93% — монетка с небольшим перевесом
→ GPT-4o-mini, Llama: 50–67% — хуже монетки или как монетка
СИТУАЦИЯ 3: Кандидаты одинаковые, но разные имена/демография
→ Любая модель: начинает выбирать "на ощупь"
→ Явные сигналы (награды, ассоциации) → сильнее смещают, чем имена
Пример применения
Задача: Ты — founder небольшой IT-компании в Москве. Ищешь продакт-менеджера. Пришло 40 резюме, хочешь использовать Claude чтобы быстро отобрать топ-10.
Промпт (что НЕ делать — распространённая ошибка):
Вот 40 резюме. Выбери лучших 10 кандидатов на позицию
продакт-менеджера в B2B SaaS-компанию.
[резюме 1... резюме 40]
Почему это опасно: Модель будет выбирать ненадёжно именно там, где выбор самый важный — среди похожих, сильных кандидатов. Плюс имена, упоминание университетов, формулировки наград будут влиять на выбор без твоего ведома.
Промпт (что делать вместо этого):
Я ищу продакт-менеджера для B2B SaaS. Критерии отбора — строго:
ОБЯЗАТЕЛЬНЫЕ (без них — отклоняю):
- Опыт работы с продуктом от 2 лет
- Опыт работы с B2B-клиентами
- Умение писать PRD / технические задания
ЖЕЛАТЕЛЬНЫЕ (чем больше — тем лучше):
- Опыт в SaaS
- Работа с enterprise-сегментом
- Английский B2+
ИГНОРИРУЙ при оценке: имена, пол, возраст,
фото, названия университетов, хобби,
участие в профессиональных сообществах.
Сначала раздели на: [проходят обязательные] / [не проходят].
Потом среди прошедших — оцени только по желательным критериям.
Дай мне список с кратким обоснованием по каждому пункту.
[резюме]
Результат: Модель выдаст структурированный список по явным критериям. Решения по "обязательным" будут надёжными — разница очевидная. Ранжирование среди "прошедших" — уже менее надёжно, используй как черновик для финального просмотра вручную.
Почему это работает (и почему LLM всё равно ошибается)
Слабость LLM: Модель не «читает» резюме как рекрутер. Она генерирует текст, основываясь на паттернах из обучающих данных. Когда два резюме похожи, модели не на что опереться — паттерн «победителя» размыт. Это как просить угадать, кто чуть умнее, по двум похожим фотографиям — без контекста.
Что модель умеет хорошо: Следовать явным, структурированным критериям. Если ты говоришь «выбери того, у кого есть пункт X», — она справляется. Проблема начинается когда критерии неявные, субъективные или нужно взвешивать несколько факторов одновременно.
Демографическая «сверхкомпенсация»: Исследователи нашли любопытный эффект — в некоторых профессиях (разработка ПО) модели начали активнее выбирать женщин и чернокожих кандидатов при равной квалификации. Это «over-alignment» — модель знает, что нужно быть «справедливой», и перекомпенсирует. Явные сигналы (названия наград, ассоциаций) работают сильнее, чем имена.
Рычаги управления: - Критерии как чеклист → чем конкретнее, тем надёжнее решение - Просить абстенцию явно → «если кандидаты примерно одинаковые — скажи об этом» - Убирать демо-сигналы → попроси Claude сначала «анонимизировать» резюме (убрать имена, пол, возраст) перед оценкой - Разбивать на этапы → сначала фильтр по hard критериям, потом ранжирование среди прошедших
Шаблон промпта
Я отбираю кандидатов на позицию {должность}.
ОБЯЗАТЕЛЬНЫЕ КРИТЕРИИ (нет хотя бы одного → кандидат отклонён):
- {критерий 1}
- {критерий 2}
- {критерий 3}
ЖЕЛАТЕЛЬНЫЕ КРИТЕРИИ (оцениваю только у прошедших обязательный фильтр):
- {критерий A}
- {критерий B}
ИГНОРИРУЙ при оценке: имена, пол, возраст, университеты,
хобби, членство в профессиональных сообществах,
любые личные характеристики не связанные с работой.
Шаг 1. Раздели кандидатов на два списка:
[Прошли обязательный фильтр] / [Не прошли — укажи какой критерий отсутствует].
Шаг 2. Среди прошедших — оцени по желательным критериям.
Для каждого: перечисли присутствующие желательные критерии.
Если кандидаты примерно одинаковые — прямо скажи об этом.
{резюме кандидатов}
Плейсхолдеры:
- {должность} — конкретная позиция: «senior backend разработчик», «менеджер по продажам в B2B»
- {критерии} — только измеримые, проверяемые: не «коммуникабельность», а «опыт переговоров с enterprise-клиентами»
- {резюме} — вставляй текстом, не PDF
🚀 Быстрый старт — вставь в чат:
Вот шаблон для скрининга резюме через LLM.
Адаптируй под мою задачу: {опиши вакансию и контекст}.
Задавай вопросы, чтобы заполнить обязательные и желательные критерии.
[вставить шаблон выше]
LLM спросит про конкретные требования вакансии и контекст найма — потому что без явных критериев шаблон работает как монетка.
Ограничения
⚠️ Пограничные кандидаты: Когда разница между резюме минимальна (один навык, чуть больше опыта) — даже топовые модели ненадёжны. Используй LLM для грубого фильтра, финальный выбор среди схожих — делай сам.
⚠️ Явные демографические сигналы: Упоминания профессиональных ассоциаций, наград с демографической привязкой («Лучший молодой специалист — Women in Tech») сдвигают выбор модели. Если хочешь нейтральной оценки — попроси Claude сначала убрать всё, кроме профессиональных данных.
⚠️ Иллюзия объективности: LLM создаёт ощущение взвешенного, обоснованного решения — но за ним может стоять случайность или паттерн из обучающих данных. Обоснование звучит убедительно, даже когда выбор неверный.
⚠️ Мелкие и открытые модели: Llama 8B и 70B показали результаты на уровне случайного выбора при минимальных различиях. Не используй их для скрининга резюме.
Как исследовали
Команда из Принстона придумала элегантный способ обойти главную проблему любого исследования найма: у реальных резюме нет правильного ответа. Кто был «правильным» кандидатом — неизвестно, потому что нанятый человек мог оказаться хуже непринятого.
Решение: создать резюме с программируемым «правильным ответом». Берёшь базовое резюме, добавляешь k навыков → более сильный кандидат. Убираешь k навыков → более слабый. Теперь истина известна. Исследователи сгенерировали сотни таких пар по 186 реальным вакансиям с Greenhouse, в 25 отраслях.
Затем проверили 9 моделей: от маленькой Llama 8B до GPT-5 и Claude Sonnet 4. Каждой модели давали пары резюме и смотрели — выберет ли она объективно лучшего. Параллельно проверяли равные резюме, где менялись только имена и демографические сигналы — модель должна была воздержаться от выбора, но в большинстве случаев всё равно кого-то выбирала.
Неожиданная находка: ошибки у большинства моделей — это не неверный выбор, а отказ от выбора (абстенция). 93% ошибок Claude — это «не могу решить», а не «выбрал не того». Это хорошая новость для HR: лучше лишний раз попросить человека посмотреть, чем ошибочно отклонить.
Адаптации и экстраполяции
🔧 Техника: анонимизация перед оценкой → нейтральный скрининг
Прежде чем просить Claude сравнить кандидатов, попроси убрать всё нерелевантное:
Шаг 1. Прочитай эти резюме и удали:
- Имена (замени на Кандидат А, Кандидат Б...)
- Пол и возраст
- Названия университетов (замени на «университет»)
- Участие в профессиональных сообществах с демографической привязкой
- Хобби и личные интересы
Оставь только: опыт работы, навыки, достижения в цифрах.
Шаг 2. Теперь сравни анонимизированные версии по критериям: {критерии}
Это применение принципа «discriminant validity» из исследования: убираем всё нерелевантное ДО оценки, а не просим игнорировать его во время.
🔧 Техника: явный запрос на абстенцию → честная оценка
Исследование показало: модели по умолчанию стараются выбрать кого-то, даже когда не должны. Добавь явное разрешение:
Если кандидаты примерно одинаково подходят под критерии
и ты не можешь уверенно выбрать — напиши "НУЖНА ЧЕЛОВЕЧЕСКАЯ ОЦЕНКА"
и объясни в чём кандидаты схожи. Не выбирай наугад.
Ресурсы
Название работы: Measuring Validity in LLM-based Resume Screening (2025)
Авторы: Blossom Metevier, Jane Castleman, Zeyu Shen, Max Springer, Aleksandra Korolova
Университет: Princeton University
Конференция: Second Conference of the International Association for Safe and Ethical Artificial Intelligence (IASEAI'26)
Источники вакансий в исследовании: Greenhouse.com, LinkedIn, Indeed
