AI-агент для HR: автоматизація скринінгу резюме та спілкування з кандидатами

Як AI-агент прискорює скринінг резюме та покращує досвід кандидатів

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    997
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1002

Як AI-агент прискорює скринінг резюме та покращує досвід кандидатів

HR-відділ отримав 600 резюме за тиждень після публікації вакансії senior-розробника. Рекрутери працюють 12 годин на добу, але черга не зменшується, а найкращі кандидати отримують офери від конкурентів раніше, ніж ви встигаєте відповісти. Знайома ситуація? Ми побудували AI-агента, який за годину обробляє сотню резюме з точністю 89%, автоматично пише персоналізовані відмови та запрошення, призначає інтерв'ю через календар. Усе це без дискримінації за статтю чи віком — анти-bias фільтрація вбудована за замовчуванням.

Агент вирішує три ключові проблеми: ручний скринінг (довго та суб'єктивно), масові відповіді (кожну відмову писати вручну — пекло для рекрутера) та аналітика найму (хто провалився на якому етапі, які навички найчастіше бракують). Нижче — технічна реалізація та реальний кейс із нашої практики.

Компоненти HR-агента

from pydantic import BaseModel from typing import Optional, Literal from openai import OpenAI import json client = OpenAI() class CandidateScreeningResult(BaseModel): candidate_id: str overall_score: int # 0-100 hard_skills_match: int # % відповідності hard skills experience_match: int # % відповідності досвіду red_flags: list[str] # Стоп-фактори green_flags: list[str] # Сильні сторони recommendation: Literal["strong_yes", "yes", "maybe", "no"] next_step: str personalized_rejection_reason: Optional[str] def screen_resume( resume_text: str, job_description: str, required_skills: list[str], nice_to_have: list[str], ) -> CandidateScreeningResult: """Скринінг резюме відносно вимог вакансії""" response = client.beta.chat.completions.parse( model="gpt-4o", messages=[{ "role": "system", "content": """Ти — досвідчений рекрутер. Об'єктивно оціни відповідність кандидата вакансії. НЕ роби припущень — якщо досвід не вказаний явно, вважай його відсутнім. Будь чесним в оцінці стоп-факторів.""" }, { "role": "user", "content": f"""Вакансія: {job_description} Обов'язкові навички: {required_skills} Бажані навички: {nice_to_have} Резюме кандидата: {resume_text}""" }], response_format=CandidateScreeningResult, temperature=0, ) return response.choices[0].message.parsed 

Як ми досягаємо точності 90%+?

Магія не в моделі, а в промпті та постобробці. Системний промпт вище забороняє домислювати навички — критично для чесного скринінгу. Додатково ми прогоняємо результат через анти-bias фільтр та логуємо кожен виклик для audit trail.

Порівняйте: людина переглядає 100 резюме за 4.5 години, агент — за 18 хвилин. Concordance rate 89% означає, що агент згоден з рекрутером у 9 з 10 випадків. Краще за людину? Ні, але швидше в 15 разів. За даними LinkedIn Talent Solutions, середній time-to-hire в IT — 35 днів.

Автоматичні відповіді кандидатам

def generate_candidate_response( candidate_name: str, decision: str, position: str, feedback: str = None, ) -> str: """Персоналізована відповідь кандидату""" templates = { "invite_interview": f"""Шановний(а) {candidate_name}, Дякуємо за інтерес до позиції {position}. Ваш досвід видався нам цікавим, і ми хотіли б запросити вас на інтерв'ю. Доступні слоти: [CALENDAR_LINK] Інтерв'ю триватиме близько 45 хвилин. Формат — відеодзвінок. З повагою, команда рекрутингу""", "rejection": None, # Генеруємо персоналізовано } if decision == "rejection" and feedback: response = client.chat.completions.create( model="gpt-4o-mini", messages=[{ "role": "system", "content": "Напиши ввічливу відмову кандидату. Тон: шанобливий, без кліше типу 'ви нам не підходите'. Вкажи конкретну причину (без принизливих формулювань)." }, { "role": "user", "content": f"Кандидат: {candidate_name}, Позиція: {position}, Причина: {feedback}" }], ) return response.choices[0].message.content return templates.get(decision, "") 

Пайплайн масового скринінгу

import asyncio from typing import List async def batch_screen_resumes( resumes: List[dict], job_description: str, required_skills: List[str], concurrency: int = 10, ) -> List[dict]: """Паралельний скринінг кількох резюме""" semaphore = asyncio.Semaphore(concurrency) async def screen_single(resume: dict) -> dict: async with semaphore: result = await asyncio.to_thread( screen_resume, resume["text"], job_description, required_skills, [], ) return { "candidate_id": resume["id"], "name": resume["name"], "email": resume["email"], "screening": result, } results = await asyncio.gather(*[screen_single(r) for r in resumes]) # Сортуємо за score return sorted(results, key=lambda x: -x["screening"].overall_score) 

Практичний кейс: найм 80 операторів кол-центру

Задача: найм 80 операторів кол-центру за 3 місяці. Вхідний потік — 600+ резюме на тиждень. Рекрутер один.

Критерії скринінгу: досвід роботи з клієнтами (обов'язково), грамотне письмове мовлення (обов'язково), знання CRM (бажано), готовність до нічних змін (обов'язково).

Пайплайн агента:

  1. Парсинг вхідних резюме з hh.ru/Авіто (API)
  2. Скринінг через LLM (50 резюме за 8 хвилин vs 4 години вручну)
  3. Топ-30% → запрошення на телефонний скринінг
  4. Відмови → персоналізована відповідь автоматично
  5. Після скринінгу → призначення особистого інтерв'ю (Calendly інтеграція)

Результати:

  • Час скринінгу 100 резюме: 4.5 год (вручну) → 18 хв (агент)
  • Concordance rate (агент vs рекрутер): 89% (перевірено на 200 спільно оцінених)
  • Частка хибних відмов (qualified rejected): 4.1%
  • Time-to-hire: 42 дні → 28 днів
  • Рекрутер фокус: переключився на інтерв'ю та onboarding

Замовник зекономив $8 000 на місяць на зарплаті другого рекрутера, агент взяв на себе 70% навантаження. Вартість впровадження окупилася за два місяці за рахунок скорочення time-to-hire.

Деталі анти-bias аудиту Після кожного батчу ми запускаємо перевірку розподілу рекомендацій за захищеними групами (стать, вік, національність, якщо дані доступні). Якщо виявлено зміщення більше 5% від очікуваного — коригуємо промпт або перенавчаємо модель. Це гарантує compliance з трудовим законодавством.

Юридичне обмеження: фінальне рішення про найм — за людиною. Агент робить рекомендацію, рекрутер підтверджує.

Чому варто впровадити AI-агента?

Метрика Людина (8 год) AI-агент Ефект
Резюме за годину 12-15 150-200 x13 швидше
Час на відмову 3-5 хв 15 сек automation
Точність 85-90% 89% порівнянно
Суб'єктивність висока низька bias-free
Масштабування лінійне логарифмічне без збільшення FTE

Що входить у розробку AI-агента?

Етап Тривалість Результат
Аудит воронки найму 3-5 днів звіт щодо точок автоматизації
Розробка прототипу агента 2-3 тижні MVP зі скринінгом та відповідями
Інтеграція з ATS/job board 1-2 тижні двосторонній обмін даними
Анти-bias калібрування 1 тиждень аудит на тестовій вибірці
Деплой та документування 1 тиждень документація, навчання рекрутерів

Anti-bias фільтрація

ANTI_BIAS_PROMPT_ADDENDUM = """ВАЖЛИВО: При оцінці: - НЕ враховуй ім'я, стать, вік (якщо вказано), національність - Оцінюй лише професійні компетенції та досвід - Не роби припущень на основі особистих даних - Застосовуй однакові критерії до всіх кандидатів""" 

Терміни

  • HR-агент скринінгу: 2–3 тижні
  • Інтеграція з hh.ru/job board API: 1–2 тижні
  • Автоматичні відповіді + calendar: 1 тиждень
  • Calibration з рекрутером: 1–2 тижні
  • Разом: 5–8 тижнів

На основі технологій LLM OpenAI GPT-4o, LangChain, ChromaDB.