Первичный разбор резюме — однотипная работа: сверить опыт и навыки с требованиями вакансии. LLM может подготовить для рекрутера оценку по критериям с обоснованием, но решение о приглашении или отказе должен принимать человек. Ниже — типовая схема с учётом требований к персональным данным.
Схема
- Рекрутер описывает вакансию набором проверяемых критериев: обязательные навыки, опыт, желательные требования.
- Резюме переводится в текст, из него удаляются персональные данные.
- Модель оценивает каждый критерий отдельно и возвращает JSON: соответствие и цитату из резюме.
- Рекрутер видит оценку рядом с резюме и сам решает, кого приглашать.
Запрос
Оценка по отдельным критериям с цитатой полезнее одного балла от 1 до 10: рекрутер видит, на чём основан вывод, и быстро замечает ошибки модели. Альтернатива для быстрой классификации — anthropic/claude-haiku-4.5.
criteria = [
"Опыт коммерческой разработки на Python от 3 лет",
"Опыт работы с PostgreSQL",
"Английский на уровне чтения документации",
]
item = {
"type": "object",
"properties": {
"criterion": {"type": "string"},
"match": {"type": "string", "enum": ["yes", "partly", "no", "unclear"]},
"evidence": {"type": "string"},
},
"required": ["criterion", "match", "evidence"],
"additionalProperties": False,
}
schema = {"type": "object", "properties": {"criteria": {"type": "array", "items": item}},
"required": ["criteria"], "additionalProperties": False}
resp = client.chat.completions.create(
model="openai/gpt-5.4-mini",
messages=[
{"role": "system", "content": "Оцени резюме по каждому критерию. В evidence процитируй "
"фрагмент резюме. Если данных нет, ставь unclear."},
{"role": "user", "content": "Критерии:\n" + "\n".join(criteria) + "\n\nРезюме:\n" + resume_text},
],
response_format={"type": "json_schema",
"json_schema": {"name": "screening", "strict": True, "schema": schema}},
max_tokens=1500,
)Персональные данные и закон
- До отправки удалите ФИО, телефон, email, адрес, фото, дату рождения и ссылки на соцсети. Контакты находятся регулярными выражениями, имена и адреса — библиотеками распознавания именованных сущностей, например Natasha для русского языка.
- Статья 16 закона 152-ФЗ запрещает принимать решения, порождающие юридические последствия для человека или иначе затрагивающие его права, исключительно на основании автоматизированной обработки персональных данных — кроме случаев письменного согласия или прямо предусмотренных законом. Поэтому модель готовит оценку, а решение принимает рекрутер.
- Если персональные данные всё же попадают в модель, обсудите с юристом требования 152-ФЗ, включая правила трансграничной передачи.
- Heli не хранит содержимое запросов и ответов, в журнале остаются только метаданные. Полный текст резюме не храните и в логах своего сервиса.
Качество и недискриминация
Перед запуском прогоните схему на 30–50 резюме, по которым решение уже принято, и сравните оценки модели с выводами рекрутеров. Не включайте в критерии пол, возраст, национальность и другие обстоятельства, не связанные с деловыми качествами: статья 64 Трудового кодекса запрещает необоснованный отказ в заключении трудового договора, в том числе по таким признакам.
Что хранить
Сохраняйте оценку модели вместе с решением рекрутера и критериями вакансии. Если кандидат спросит о причинах отказа, ответ должен опираться на требования вакансии и вывод рекрутера, а не на ответ модели.
Попробуйте Heli
Ключ sk-heli- появляется после подтверждения почты. Через Google и Яндекс — сразу в кабинете.