Парсинг резюме через API: навыки и опыт в JSON для ATS
Как извлечь профессиональные сведения из резюме, сохранить основания полей и проверить данные до записи в ATS. Синтетический пример и код подключения.

Задача интеграции
Парсинг резюме через API превращает перечисленные в документе профессиональные сведения в поля ATS. Это задача извлечения фактов: должность, названные навыки, периоды работы и образование. Ниже — синтетический пример через API429 с цитатой для каждого непустого значения. Он не оценивает пригодность человека к работе и не формирует рейтинг кандидатов.
Подготовка исходного текста
Подготовьте текст резюме и устойчивый идентификатор документа. Если вход — скан, сначала отдельно проверьте распознавание: потерянная строка о стаже не восстанавливается достоверно последующим запросом к модели. В примере нет настоящих кандидатов, контактов или других персональных данных. Перед реальной интеграцией определите допустимый состав передаваемых данных.
Схема полей
| Поле | Допустимый результат | Отдельная проверка |
|---|---|---|
| role | Указанная должность | Не заменять её предположенным seniority |
| skills | Навыки из текста | Не считать упоминание доказанным владением |
| experience | Период и описание из резюме | Не суммировать пересекающиеся периоды автоматически |
| education | Сведения либо null | Не выводить образование из должности |
Учебный документ и эталон JSON
Все данные ниже вымышлены. JSON подготовлен как эталон для проверки: он не является результатом замера или гарантией ответа модели.
Код: DEMO-CV-42.
Должность: Python-разработчик.
Навыки: Python, SQL.
Опыт: Компания DEMO, 2022–2024.
{
"role": {
"value": "Python-разработчик",
"quote": "Должность: Python-разработчик."
},
"skills": {
"value": "Python, SQL",
"quote": "Навыки: Python, SQL."
},
"experience": {
"value": "Компания DEMO, 2022–2024",
"quote": "Опыт: Компания DEMO, 2022–2024."
},
"education": {
"value": null,
"quote": null
}
}
Подключение к API429
Выберите точный ID модели в каталоге, затем проверьте доступ своего ключа по GET /v1/models. Используйте тот же ключ и базовый URL, что и при генерации. Само наличие модели на сайте не подтверждает доступ конкретного ключа.
curl https://gateway.api429.com/v1/models \
-H "Authorization: Bearer $API429_API_KEY"
Ключ храните в переменной окружения API429_API_KEY, выбранный ID — в API429_MODEL. Не записывайте секрет в исходник или журнал. Контракт запроса и примеры авторизации — в документации API429.
Запрос и проверка ответа
Возьмите полный пример Python с валидатором и замените в нём только эти две строки:
FIELDS = ('role', 'skills', 'experience', 'education')
SOURCE = 'Код: DEMO-CV-42.\nДолжность: Python-разработчик.\nНавыки: Python, SQL.\nОпыт: Компания DEMO, 2022–2024.\n'
Запрос использует POST /v1/chat/completions с полями model, messages, max_tokens, stream. Пример выводит результат, прошедший структурные и текстовые проверки, и сам не создаёт записей в рабочей системе. Параметры специальных JSON-режимов выбранной модели проверяйте отдельно; код не предполагает их поддержку по одному имени модели.
Проверка отклоняет пропущенные и лишние ключи, неверные типы и значения без цитаты. Пара null/null допустима только как обозначение отсутствующих сведений. Даже дословная цитата не доказывает, что она относится к нужному полю: это проверяется на контрольных документах.
Проверка перед передачей в систему
Записывайте извлечённые факты в черновик профиля с идентификатором резюме и версией источника. Обновление ATS должно сохранять различие между исходным текстом, выводом парсера и проверенным значением. Отсутствие поля не является отрицательной характеристикой кандидата.
Не добавляйте к этой схеме оценку возраста, пола, здоровья, происхождения или иных личных характеристик, рейтинг кандидата и рекомендацию об отказе. Проверка профессиональных сведений и решение о найме остаются отдельными процессами; технический парсер не выполняет их вместо команды.
Какие ошибки включить в тестовую выборку
Проверьте резюме без образования, с несколькими одновременными работами и с навыком только в описании проекта. Строка «знаком с SQL» должна остаться исходной формулировкой, а не превратиться в «эксперт SQL». Отдельно проверьте, что результат не содержит незапрошенный score или решение о следующем этапе.
Повторы и стоимость обработки
Храните идентификатор и версию исходного документа, а также состояние обработки в своём приложении. После перезапуска не создавайте вторую запись для уже принятого результата. При 429 сначала изучите сообщение и баланс; повторяйте только временные ошибки с ограничением попыток. Неудачный разбор JSON и HTTP-ошибка требуют разных действий.
Выбирайте модель по своему набору документов, а не по названию семейства. Считайте цену принятого результата вместе с повторами и проверкой; текущие тарифы API429 и сравнение Gemini отделены от проверки качества. Сначала запустите небольшую размеченную выборку, затем расширяйте поток.
Частые вопросы
Можно ли считать годы опыта прямо этим примером?
Код сохраняет текст периода и не вычисляет стаж. Для подсчёта нужны отдельные правила пересечения периодов, неполной занятости и незавершённых дат. Не подменяйте ими отсутствующие сведения.
Можно ли сразу отклонять резюме без нужного поля?
Этот пример не предназначен для отбора или отказов. Пустое поле может означать отсутствие сведений в документе или ошибку извлечения; такие случаи проверяют отдельно.
Источники и документация
Следующий шаг — на практике.
Перед интеграцией проверьте ID модели, актуальную цену и формат запроса. Доступность зависит от модели и маршрута провайдера.


