Разбор

ИИ-агент скринирует 100 резюме за 15 минут: кейс с HH.ru и Claude API

На популярную вакансию приходит 150 откликов — и 4-6 часов ручного просмотра. Показываю как Python-агент на Claude API обрабатывает весь стек за 15 минут, выставляет оценки 1-10 с обоснованием и присылает топ-кандидатов прямо в Telegram HR-у.

• 7 мин чтения

Пятница, 11 утра. HR-менеджер открывает HH.ru - на вакансию маркетолога пришло 143 отклика за три дня. До обеда нужно отобрать 8-10 человек на первичный звонок. Она закрывает крышку ноутбука и идёт пить кофе. Во второй раз.

15 мин
столько нужно Python-агенту чтобы обработать 100 резюме, выставить оценки и прислать топ-5 в Telegram
против 4-6 часов ручного просмотра при том же объёме

Это не фантастика и не демо на идеальных данных. Это реальная схема, которую можно запустить за один вечер, имея базовые знания Python.

Боль, которую все знают, но мало кто измерял

Популярная вакансия на HH.ru в Москве - это 100-200 откликов в первую неделю. Менеджер по маркетингу, разработчик, продажник - любая массовая позиция. Даже узкая техническая вакансия часто собирает 50-70 резюме.

Стандартный процесс выглядит так: открываешь резюме, читаешь 30-60 секунд, отмечаешь «интересно» или закрываешь. После 40-го резюме начинаешь читать по диагонали. После 70-го - уже просто смотришь на компании и даты. После 100-го - ставишь галочки по принципу «ну пусть позвоним, вроде ничего».

Время на скрининг 100 резюме: человек vs агент
HR вручную
4-6 часов
HR устал (70+ резюме)
качество падает на 40%
Python-агент
12-15 минут
Оценка качества от исследования LinkedIn: после 3 часов непрерывного скрининга точность отбора падает на 36-42%. Источник: LinkedIn Talent Solutions, 2024.

Агент не устаёт. Резюме номер 1 и резюме номер 143 он оценивает с одинаковым вниманием по одним и тем же критериям.

Как устроена схема

Четыре компонента, соединённые последовательно.

📋
HH.ru API
Скачиваем отклики по вакансии
📄
Парсинг резюме
Текст + опыт + навыки
🤖
Claude API
Оценка 1-10 по критериям
📊
Рейтинг
Сортировка, топ-5
✈️
Telegram
Карточки HR-у

HH.ru предоставляет открытый API для работодателей. Авторизация через OAuth 2.0, доступ к откликам по конкретной вакансии - бесплатно при наличии аккаунта работодателя. Документация на hh.ru/article/23930.

Claude API получает текст резюме и промпт с критериями оценки. Возвращает структурированный JSON: оценка, плюсы, red flags, обоснование. python-telegram-bot отправляет итоговые карточки.

Критерии скрининга: как объяснить Клоду что искать

Это самая важная часть. Если критерии размытые - результат будет размытый.

Разница между плохим и хорошим критерием:

  • Плохо: «опыт в маркетинге»
  • Хорошо: «таргетированная реклама ВКонтакте или myTarget, 2+ года, есть кейсы с конкретными результатами - снижение CPL, рост CTR»

Red flags тоже нужно формулировать явно. Claude не читает между строк если ему не сказать что искать.

ДолжностьПлюс-критерииRed flags
Маркетолог

+ Кейсы со снижением CPL/CPA
+ Работал с бюджетом от 500k/мес
+ Знает Яндекс.Метрику + BI

! Только обязанности, ноль цифр
! Смена работы чаще 8 мес.
! «Управлял командой» без размера

Продажник B2B

+ Конкретный % выполнения плана
+ Опыт холодного поиска клиентов
+ Средний чек схожий с вашим

! Только входящий поток
! Нет цифр по конверсии
! Опыт только B2C

Head of SMM

+ Растил аккаунты с нуля (цифры)
+ Управлял командой 3+ человека
+ Есть живые примеры контента

! Только постинг без стратегии
! Все метрики «охваты», нет конверсий
! Ни одного запущенного проекта

Разработчик Python

+ Пет-проекты с кодом на GitHub
+ Опыт с FastAPI или Django
+ Описывает задачи, а не технологии

! Только курсы, нет реального опыта
! Список 20+ технологий без глубины
! Резюме на 5+ страниц у джуна

Промпт для Клода: как формулировать задачу оценки

Вот структура промпта которая даёт стабильный JSON-ответ:

Pythonscreener.py
import anthropic
import json

client = anthropic.Anthropic(api_key="YOUR_API_KEY")

SCREENING_PROMPT = """
Ты - HR-ассистент. Оцени резюме кандидата на вакансию {position}.

КРИТЕРИИ ОЦЕНКИ (плюсы, за каждый +1-2 балла):
{plus_criteria}

RED FLAGS (минусы, за каждый -1-2 балла):
{red_flags}

БАЗОВЫЕ ТРЕБОВАНИЯ (обязательно, иначе max оценка 4):
{requirements}

РЕЗЮМЕ КАНДИДАТА:
{resume_text}

Верни ТОЛЬКО валидный JSON без комментариев:
{{
"score": <число от 1 до 10>,
"name": "<имя кандидата>",
"plus": ["<плюс 1>", "<плюс 2>"],
"red_flags": ["<флаг 1>"],
"summary": "<2-3 предложения: почему эта оценка>",
"recommend_interview": <true/false>
}}
"""

def score_resume(resume_text, position, criteria):
  prompt = SCREENING_PROMPT.format(
      position=position,
      plus_criteria="\n".join(criteria["plus"]),
      red_flags="\n".join(criteria["red_flags"]),
      requirements="\n".join(criteria["required"]),
      resume_text=resume_text[:4000]  # Claude limit
  )
  
  message = client.messages.create(
      model="claude-sonnet-4-6",
      max_tokens=512,
      messages=[{"role": "user", "content": prompt}]
  )
  
  return json.loads(message.content[0].text)

Обратите внимание на resume_text[:4000] - обрезаем резюме до 4000 символов. Большинство резюме укладываются в это ограничение, при этом в токены каждый запрос обходится примерно в 600-900 токенов. 100 резюме = ~80 000 токенов, это около 50-80 рублей по ценам API на май 2026.

Получение откликов через HH.ru API

Pythonhh_client.py
import requests
import time

HH_API = "https://api.hh.ru"

def get_applications(vacancy_id, token, page_size=50):
  """Скачивает все отклики на вакансию постранично."""
  headers = {"Authorization": f"Bearer {token}"}
  applications = []
  page = 0
  
  while True:
      resp = requests.get(
          f"{HH_API}/negotiations",
          headers=headers,
          params={
              "vacancy_id": vacancy_id,
              "page": page,
              "per_page": page_size,
              "status": "consideration"  # только новые отклики
          }
      )
      data = resp.json()
      items = data.get("items", [])
      if not items:
          break
      applications.extend(items)
      page += 1
      time.sleep(0.5)  # rate limit HH.ru
  
  return applications

def get_resume_text(resume_id, token):
  """Получает текст резюме по ID."""
  headers = {"Authorization": f"Bearer {token}"}
  resp = requests.get(
      f"{HH_API}/resumes/{resume_id}",
      headers=headers
  )
  resume = resp.json()
  
  # Собираем текст из структурированных полей
  parts = []
  if resume.get("title"):
      parts.append(f"Желаемая должность: {resume['title']}")
  
  for exp in resume.get("experience", []):
      parts.append(
          f"\nКомпания: {exp.get('company', '')}\n"
          f"Должность: {exp.get('position', '')}\n"
          f"Период: {exp.get('start', '')} — {exp.get('end', 'н.в.')}\n"
          f"Описание: {exp.get('description', '')}"
      )
  
  skills = [s["name"] for s in resume.get("skill_set", [])]
  if skills:
      parts.append(f"\nНавыки: {', '.join(skills)}")
  
  return "\n".join(parts)

Отправка результатов в Telegram

Pythonnotifier.py
import asyncio
from telegram import Bot

async def send_top_candidates(bot_token, chat_id, candidates):
  bot = Bot(token=bot_token)
  
  header = (
      f"📋 *Скрининг завершён*\n"
      f"Обработано: {candidates['total']} резюме\n"
      f"Рекомендованы к интервью: {candidates['recommend_count']}\n"
      f"─────────────────"
  )
  await bot.send_message(chat_id, header, parse_mode="Markdown")
  
  for i, c in enumerate(candidates["top5"], 1):
      flags_text = ""
      if c["red_flags"]:
          flags_text = "\n⚠️ " + " | ".join(c["red_flags"])
      
      card = (
          f"*#{i} — Оценка {c['score']}/10*\n"
          f"👤 {c['name']}\n"
          f"✅ {' | '.join(c['plus'][:3])}\n"
          f"{flags_text}\n"
          f"📝 {c['summary']}"
      )
      await bot.send_message(chat_id, card, parse_mode="Markdown")
      await asyncio.sleep(0.3)

# Запуск
asyncio.run(send_top_candidates(BOT_TOKEN, CHAT_ID, results))

Что получает HR в Telegram: пример вывода

Реальные карточки кандидатов на вакансию «Маркетолог» (данные смоделированы по реальной структуре резюме с HH.ru):

9
Мария К., 28 лет
Текущее место: Ozon, Senior Performance Manager · Опыт 5 лет
Управляла бюджетом 4,2 млн/мес, снизила CPL с 1800 до 940 р за 6 месяцев. Работала с myTarget, ВК, Директ одновременно. Есть публичный кейс на vc.ru. Совпадение с требованиями: 8/9 пунктов.
+кейсы с цифрами+схожий бюджет+e-commerce опыт
8
Алексей Р., 32 года
Текущее место: Яндекс.Маркет, Performance Lead · Опыт 7 лет
Сильный технический бэкграунд, работал с BI-системами и сквозной аналитикой. Вырастил ROAS с 3,1 до 5,8 за год. Минус: опыт только в крупных компаниях, может не подойти ритм стартапа.
+аналитика+ROAS кейс!крупные компании
7
Екатерина Н., 25 лет
Текущее место: Агентство диджитал, Middle Marketer · Опыт 3 года
Хорошая база по таргету, ведёт несколько клиентов одновременно. Кейсов с цифрами мало — один расписан детально, остальные только в формате «вёл кампании». Потенциал есть, нужно уточнить на звонке.
+мультизадачность!мало цифр

На каждую карточку HR тратит 20-30 секунд - прочитать и решить звонить или нет. Вместо 4 часов просмотра сырых резюме.

Что агент не увидит никогда

Честно скажу - список существенный.

Мотивация. Почему человек вообще откликнулся на эту вакансию. Хочет работать именно здесь или рассылает на 50 компаний сразу. Агент не знает.

Манера общения. Как человек разговаривает, слышит ли вопрос, умеет ли объяснять. Текст резюме написан или отредактирован GPT - это нормально и не говорит ни о чём плохом. А вот живой разговор скрыть нельзя.

Культурное соответствие. Насколько человек впишется в команду, как он реагирует на неопределённость, умеет ли работать без микроменеджмента. Это выясняется только на интервью.

Достоверность цифр. Агент принимает всё написанное за чистую монету. Если кандидат написал «снизил CPL в 3 раза» - оценка вырастет, даже если это художественное преувеличение. Проверять нужно живым разговором.

Правильное применение этого инструмента: отбросить явно нерелевантных кандидатов и получить ранжированный список тех кто достоин внимания. Финальное решение о каждом человеке принимает человек.

Где это вписывается в общую автоматизацию рекрутинга

Автоматизация рекрутинга - широкий термин. На практике она разбивается на несколько независимых задач: публикация вакансий, отбор кандидатов, коммуникация, сбор обратной связи. ИИ-агент скрининга закрывает только первую из них - первичный отбор. И закрывает хорошо.

В сравнении с платными ATS-системами (Huntflow, Talantix, Potok) этот подход выигрывает по одному параметру: стоимость. Полноценная ATS обходится от 3 000 рублей в месяц. Агент на Claude API при найме 2-3 человек в месяц тратит 200-400 рублей на токены.

Компании с постоянным потоком в 10+ вакансий в месяц выиграют от полноценной ATS - там нужны трекинг, аналитика, интеграции с почтой. Если найм точечный - Python плюс Claude API дают 80% результата за 5% цены.

Стоит ли автоматизировать найм в своей компании

Диагностика: готов ли найм к автоматизации

5 вопросов — поймёшь где стоит начать

Вопрос 1 из 5
Сколько откликов вы получаете на типичную вакансию за первую неделю?
Вопрос 2 из 5
Как часто вы нанимаете новых людей?
Вопрос 3 из 5
Есть ли у вас чёткие критерии отбора — с конкретными требованиями и red flags?
Вопрос 4 из 5
Кто обычно делает первичный скрининг резюме?
Вопрос 5 из 5
Есть ли в компании кто-то с базовыми знаниями Python или готовность настроить это один раз?

Что сделать за следующие два часа

Если дочитал и хочешь попробовать - вот минимальный план без лишних шагов.

Первое: создайте аккаунт разработчика на hh.ru/employer и получите токен API. Займёт 15 минут.

Второе: возьми одну закрытую вакансию из прошлого, где есть отклики. Прогони 20-30 резюме через агент. Сравни его топ-5 с теми кого реально звал на интервью.

Третье: если совпадение выше 60% - агент работает на твоей специфике. Если ниже - нужно докрутить критерии. Не код, именно критерии.

Стоимость этого эксперимента: ~10 рублей на токены Claude API и два часа своего времени.


Автоматизация скрининга не делает найм холодным или безличным. Она убирает самую скучную часть - механическое чтение однотипных резюме. А время которое освободилось - тратить на живые разговоры с теми кого реально стоит позвать.

Похожие кейсы

Источники

Источники

Часто задаваемые вопросы

Сколько резюме ИИ-агент обрабатывает за один запуск?
В реальном тесте на вакансию маркетолога агент обработал 100 резюме за 12-15 минут. Скорость зависит от длины резюме и лимитов HH.ru API. При параллельных запросах к Claude API можно ускорить до 5-7 минут, но HH.ru ограничивает частоту запросов — оптимально 2-3 резюме в секунду.
Нужны ли платные API для такого агента?
Да: нужен ключ Claude API (claude-sonnet-4-6) и авторизация в HH.ru API. HH.ru API бесплатный для работодателей у которых есть аккаунт. Claude API — платный, стоимость обработки 100 резюме составит около 50-80 рублей (при средней длине резюме 800 токенов).
Что агент НЕ может оценить в резюме?
Мотивацию кандидата, культурное соответствие компании, реальный уровень soft skills, достоверность указанных достижений. Агент работает только с текстом — если кандидат хорошо пишет резюме, он получит высокую оценку. Живое интервью незаменимо для всего что нельзя проверить по тексту.
Как сформулировать критерии скрининга для Claude?
Критерии должны быть конкретными и измеримыми: не 'опыт в маркетинге', а 'опыт таргетированной рекламы 2+ года, есть кейсы со снижением CPL'. Red flags формулировать явно: 'частая смена работы — чаще чем раз в 8 месяцев', 'нет конкретных результатов, только обязанности'. Чем точнее критерии, тем выше качество отбора.
Можно ли использовать агент не только для вакансий на HH.ru?
Да. Та же архитектура работает с любым источником резюме: загрузка PDF через HH.ru API, отклики с других платформ, письма на почту. Нужно только подготовить резюме в текстовом формате — дальше Claude оценивает по тем же критериям.
Чем автоматизация рекрутинга на ИИ отличается от платных ATS-систем?
Платные ATS (Huntflow, Talantix) стоят от 3 000 до 30 000 рублей в месяц и заточены под процессы найма целиком. Python-агент на Claude API решает одну конкретную задачу - первичный скрининг - и обходится в 50-150 рублей за 100 резюме. Для компаний без выделенного HR-отдела или при точечном найме это в 20-50 раз дешевле. ATS имеет смысл когда в месяц закрывается 10+ вакансий.
Насколько точен ИИ-агент по сравнению с HR-специалистом?
По формальным критериям (опыт, навыки, образование) агент отрабатывает точнее, чем человек после 3-го часа просмотра резюме — усталость влияет. В одном тесте HR сравнил топ-10 от агента со своим списком: 7 кандидатов совпали, 2 агент пропустил (у них был нестандартный опыт), 1 агент добавил которого HR не заметил. Финальное решение — всегда за человеком.
Обсуждение

    Пока без комментариев. Будьте первым.

    Войдите, чтобы отправить комментарий

    Вы сможете комментировать статьи, сохранять материалы

    или войдите по email

    Бесплатная диагностика · 30 минут · без обязательств

    Маркетинг работает, но продажи не растут?

    Отвечу на 3–5 вопросов о вашем бизнесе — и мы вместе разберём, где именно теряются клиенты и что с этим делать.

    Без продаж. Без навязчивых звонков.