Промпт для скоринга резюме с структурированным выводом
Готовый промпт для автоматического анализа и скоринга резюме кандидатов через LLM. Извлекает ключевые данные, оценивает соответствие вакансии и выдаёт структурированный JSON-отчёт.
Рекрутер тратит в среднем 6–8 секунд на первичный просмотр резюме. При потоке в 200–500 откликов на вакансию это превращается в часы монотонной работы, где неизбежны ошибки и пропущенные кандидаты. LLM-скоринг решает эту задачу: модель читает резюме, сопоставляет с требованиями вакансии и выдаёт структурированную оценку — с баллами, обоснованием и готовым shortlist.
Главная ценность AI-скоринга — не скорость, а единообразие. Модель применяет одинаковые критерии к каждому резюме, исключая «усталость третьего часа» и неосознанные предубеждения.
Задача
Промпт выполняет три операции за один вызов:
- Извлечение данных — парсит неструктурированное резюме в JSON с фиксированной схемой
- Скоринг — оценивает кандидата по каждому требованию вакансии от 0 до 10
- Вердикт — выдаёт итоговую рекомендацию: пригласить / maybe / отклонить
Результат — машиночитаемый JSON, который можно загрузить в ATS, Google Sheets или дашборд.
Для кого
- HR и рекрутеры — автоматизация первичного отсева при массовом найме
- Тимлиды — быстрая оценка технических кандидатов по хардскиллам
- HR-tech разработчики — прототипирование скоринговых пайплайнов
- Фрилансеры и агентства — обработка большого объёма откликов без расширения команды
response_format для гарантированного JSON.Промпт
<role>
Ты — опытный IT-рекрутер с 10-летним стажем, специализируешься
на техническом найме. Ты умеешь выделять главное в резюме,
оценивать реальный уровень кандидата (не только по ключевым словам)
и обосновывать каждую оценку конкретными фактами из резюме.
</role>
<task>
Проанализируй резюме кандидата и сопоставь его с требованиями
вакансии. Выполни три шага:
1. ИЗВЛЕЧЕНИЕ: Разбери резюме на структурированные поля
2. СКОРИНГ: Оцени соответствие каждому требованию (0-10)
3. ВЕРДИКТ: Дай итоговую рекомендацию с обоснованием
Верни результат СТРОГО в JSON-формате по схеме ниже.
</task>
<scoring_rules>
- 0-3: Требование не выполнено или опыт нерелевантный
- 4-5: Частичное соответствие, есть смежный опыт
- 6-7: Соответствует, но без глубокой экспертизы
- 8-9: Сильное соответствие с подтверждённым опытом
- 10: Превышает требования, есть выдающиеся достижения
</scoring_rules>
<output_schema>
{
"candidate": {
"name": "string",
"email": "string | null",
"phone": "string | null",
"location": "string | null",
"current_role": "string | null",
"years_of_experience": "number",
"education": [
{
"degree": "string",
"institution": "string",
"year": "number | null"
}
],
"skills": ["string"],
"languages": ["string"],
"certifications": ["string"]
},
"scoring": {
"requirements": [
{
"requirement": "string — текст требования из вакансии",
"score": "number 0-10",
"evidence": "string — конкретный факт из резюме",
"gap": "string | null — чего не хватает"
}
],
"total_score": "number — среднее арифметическое",
"max_possible": 10
},
"verdict": {
"decision": "invite | maybe | reject",
"confidence": "high | medium | low",
"summary": "string — 2-3 предложения с обоснованием",
"red_flags": ["string — потенциальные риски"],
"green_flags": ["string — сильные стороны"]
}
}
</output_schema>
<vacancy>
{ВСТАВЬТЕ_ОПИСАНИЕ_ВАКАНСИИ}
</vacancy>
<resume>
{ВСТАВЬТЕ_РЕЗЮМЕ_КАНДИДАТА}
</resume>
<vacancy> с требованиями, иначе скоринг будет абстрактным.Как работает промпт
graph TD
A[Резюме кандидата
неструктурированный текст] --> B[LLM принимает роль
IT-рекрутера]
V[Описание вакансии
с требованиями] --> B
B --> C[Шаг 1: Извлечение]
C --> D[Структурированный профиль:
навыки, опыт, образование]
D --> E[Шаг 2: Скоринг]
E --> F[Оценка 0-10
по каждому требованию]
F --> G[Шаг 3: Вердикт]
G --> H[invite / maybe / reject
+ обоснование]
H --> I[JSON-отчёт
готов для ATS]
Пример результата
Вакансия: Middle Python Developer (Django, PostgreSQL, REST API, Docker)
Резюме: Иванов Алексей, 4 года опыта, работал с Flask и FastAPI, знает PostgreSQL, деплоил в Docker, но с Django не работал.
Модель вернёт:
{
"candidate": {
"name": "Иванов Алексей",
"email": null,
"phone": null,
"location": null,
"current_role": "Python Developer",
"years_of_experience": 4,
"education": [],
"skills": ["Python", "Flask", "FastAPI", "PostgreSQL", "Docker", "REST API", "Git"],
"languages": ["Русский"],
"certifications": []
},
"scoring": {
"requirements": [
{
"requirement": "Python 3+ года опыта",
"score": 8,
"evidence": "4 года коммерческого опыта на Python",
"gap": null
},
{
"requirement": "Django",
"score": 3,
"evidence": "Опыт с Flask и FastAPI — смежные фреймворки",
"gap": "Нет прямого опыта с Django, потребуется онбординг"
},
{
"requirement": "PostgreSQL",
"score": 7,
"evidence": "Указан в навыках, использовал в проектах",
"gap": "Нет деталей об уровне — оптимизация запросов, миграции"
},
{
"requirement": "REST API",
"score": 8,
"evidence": "Работал с FastAPI и Flask — оба заточены под API",
"gap": null
},
{
"requirement": "Docker",
"score": 7,
"evidence": "Деплоил проекты в Docker",
"gap": "Не указан опыт с Docker Compose / Kubernetes"
}
],
"total_score": 6.6,
"max_possible": 10
},
"verdict": {
"decision": "maybe",
"confidence": "medium",
"summary": "Кандидат имеет релевантный Python-опыт и владеет смежными технологиями. Главный пробел — отсутствие опыта с Django, что потребует 2-4 недели онбординга. При готовности команды инвестировать в обучение — стоит пригласить на техническое интервью.",
"red_flags": [
"Нет прямого опыта с Django — ключевым фреймворком вакансии"
],
"green_flags": [
"Сильный Python-бэкграунд с несколькими фреймворками",
"Опыт с REST API и контейнеризацией"
]
}
}
total_score: 6.6 из 10 — кандидат закрывает большинство требований, но не все. Поле decision: "maybe" сигнализирует: не автоматическое приглашение, но стоит рассмотреть. Поле evidence позволяет HR проверить, откуда модель взяла каждую оценку — это не чёрный ящик.Вариации и настройки
| Вариация | Что изменить в промпте | Когда использовать |
|---|---|---|
| Массовый скоринг | Обернуть несколько резюме в <resume id="1">...</resume>, вывод — массив JSON | Обработка 10-50 откликов за один запрос |
| Без вакансии (общий профиль) | Убрать <vacancy>, добавить: «Оцени общий уровень кандидата и предложи подходящие роли» | Формирование кадрового резерва |
| С весами требований | Добавить weight к каждому требованию: "Django (weight: 3), Docker (weight: 1)" | Когда одни навыки критичнее других |
| Для нетехнических вакансий | Заменить <role> на: «Ты — HR-директор с опытом найма в [маркетинге/продажах/финансах]» | Вакансии вне IT |
| С проверкой soft skills | Добавить секцию: «Оцени коммуникативные навыки по стилю написания резюме и описанию достижений» | Позиции с клиентской коммуникацией |
Настройка порогов решения
Добавьте в промпт правила принятия решений:
<decision_rules>
- invite: total_score >= 7.0 И нет ни одного critical-требования с оценкой < 4
- maybe: total_score >= 5.0 ИЛИ есть хотя бы одно требование с оценкой >= 9
- reject: total_score < 5.0
</decision_rules>
Интеграция в рабочий процесс
graph LR
A[Отклик на вакансию] --> B[Извлечение текста
из PDF/DOCX]
B --> C[LLM-скоринг
этот промпт]
C --> D{decision?}
D -->|invite| E[Автоматическое
письмо-приглашение]
D -->|maybe| F[В очередь на
ручной просмотр]
D -->|reject| G[Вежливый отказ
+ фидбек]
Сравнение подходов к скорингу резюме
| Критерий | Ручной скрининг | Keyword-матчинг (ATS) | LLM-скоринг (этот промпт) |
|---|---|---|---|
| Скорость | 6-8 сек/резюме | Мгновенно | 3-5 сек/резюме |
| Понимание контекста | Высокое | Нулевое | Высокое |
| Учёт смежного опыта | Да | Нет | Да |
| Масштабируемость | Низкая | Высокая | Высокая |
| Единообразие оценки | Падает с усталостью | Абсолютное | Абсолютное |
| Стоимость (500 резюме) | ~40 часов работы HR | Бесплатно (встроено в ATS) | ~$2-5 через API |
LLM-скоринг занимает нишу между дорогим ручным обзором и примитивным keyword-матчингом: он понимает контекст («FastAPI — это тоже Python-фреймворк для API»), но стоит копейки за одно резюме.
Советы по улучшению
1. Всегда заполняйте <vacancy>. Без описания вакансии модель оценивает резюме «в вакууме» — скоринг теряет смысл. Чем детальнее требования, тем точнее evidence и gap в ответе.
2. Используйте few-shot для калибровки. Добавьте 1-2 примера «идеально оценённых» резюме перед основным запросом. Это особенно важно, если ваша шкала отличается от стандартной — модель подстроится под ваш стиль оценки.
3. Добавьте <anti_bias> секцию. Для объективности включите инструкцию: «Не учитывай при оценке: пол, возраст, национальность, название вуза (оценивай только релевантность специальности), фото.» Это снижает риск переноса предубеждений из обучающих данных.
4. Валидируйте JSON программно. При использовании через API включите response_format (OpenAI) или structured output (Claude) для гарантированного JSON. Для ручного использования в чате — попросите модель обернуть ответ в тройные обратные кавычки.
5. Итерируйте с уточнениями. После первого скоринга задайте follow-up: «Сравни трёх кандидатов с наивысшим баллом и выбери лучшего для команды из 5 человек, где уже есть сеньор Django-разработчик.»
6. Сохраняйте промпт как системное сообщение. Если используете API — вынесите всё, кроме <vacancy> и <resume>, в system prompt. Это экономит токены при пакетной обработке и обеспечивает единообразие.
pymupdf или pdfplumber, (2) отправляет в LLM с этим промптом, (3) собирает JSON-ответы в CSV/Excel. Полный пайплайн из 100 резюме обойдётся в $1-3 и займёт 5-10 минут.