Описания вакансий, которые находят идеального кандидата
Каждый HR-менеджер знает: одно описание вакансии отнимает 30–90 минут. При этом 70% текстов на hh.ru и LinkedIn выглядят как копия шаблона — одинаковые формулировки, отсутствие tone of voice и игнорирование SEO. Кандидаты пролистывают такие объявления за секунды. Мы разработали AI-систему, которая за 15–30 секунд генерирует структурированный job description по названию должности, стеку и требованиям — с контролем гендерной нейтральности, SEO-оптимизацией под каждую платформу и соответствием бренду работодателя.
Как происходит генерация?
В основе — дообученная модель GPT-4o с промпт-инжинирингом для HR-задач. Мы передаём в систему JobBrief — датакласс с полями title, department, tech_stack, responsibilities и параметрами tone (professional, startup, corporate, creative). Модель возвращает JSON с разделами title_seo, about_company, responsibilities, requirements_hard, requirements_soft, nice_to_have, conditions и cta. Код генератора на asyncio позволяет обрабатывать до 10 запросов параллельно. Используем OpenAI API с настройками temperature и top_p для баланса креативности и точности.
from openai import AsyncOpenAI
from dataclasses import dataclass, field
client = AsyncOpenAI()
@dataclass
class JobBrief:
title: str
department: str
employment_type: str # full-time, part-time, contract, freelance
experience_years: tuple # (min, max)
tech_stack: list[str]
responsibilities: list[str]
company_description: str
tone: str = "professional" # professional, startup, corporate, creative
language: str = "ru"
include_salary_range: bool = False
salary_range: tuple = None
async def generate_job_description(brief: JobBrief) -> dict:
response = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": f"""Ты — HR-копирайтер, специалист по employer branding.
Создай описание вакансии для job-агрегаторов (hh.ru, LinkedIn, Habr Career).
ТРЕБОВАНИЯ:
- Заголовок: должность + ключевые технологии (для SEO в поиске)
- О компании: 2–3 предложения, конкретные факты, без «лидер рынка»
- Обязанности: 5–7 пунктов с глаголами действия, конкретных
- Требования: hard skills отдельно от soft skills, must-have vs nice-to-have
- Условия: без воды, только факты
- Гендерно нейтральные формулировки (не «программист», а «разработчик/разработчица» или нейтрально)
- Tone of voice: {brief.tone}
Верни JSON: {{title_seo, about_company, responsibilities, requirements_hard, requirements_soft, nice_to_have, conditions, cta}}"""
}, {
"role": "user",
"content": f"""
Должность: {brief.title}
Отдел: {brief.department}
Тип занятости: {brief.employment_type}
Опыт: {brief.experience_years[0]}–{brief.experience_years[1]} лет
Стек: {', '.join(brief.tech_stack)}
Ключевые задачи: {', '.join(brief.responsibilities)}
О компании: {brief.company_description}
{"Зарплата: " + f"{brief.salary_range[0]}–{brief.salary_range[1]} руб." if brief.include_salary_range and brief.salary_range else ""}
"""
}],
response_format={"type": "json_object"}
)
import json
return json.loads(response.choices[0].message.content)
Почему нужно адаптировать описание под каждую платформу?
hh.ru, LinkedIn и Habr Career предъявляют разные требования к структуре и стилю. hh.ru ценит лаконичность — максимум 100 символов заголовка и строгие разделы. LinkedIn, напротив, поощряет развёрнутые описания с ключевыми словами для поиска. Habr Career требует технических деталей и метрик. Мы реализовали шаблоны платформ с ограничениями и стилистическими правилами — код адаптации использует ту же модель с дополнительным промптом.
JOB_PLATFORM_FORMATS = {
"hh.ru": {
"max_title": 100,
"sections": ["about_company", "responsibilities", "requirements_hard", "conditions"],
"style": "структурированный, без маркетинга"
},
"linkedin": {
"max_title": 120,
"sections": ["about_company", "responsibilities", "requirements_hard", "requirements_soft", "nice_to_have"],
"style": "профессиональный, с ключевыми словами для LinkedIn Search"
},
"habr_career": {
"max_title": 100,
"sections": ["responsibilities", "requirements_hard", "nice_to_have", "conditions"],
"style": "технический, для IT-аудитории, конкретные метрики"
}
}
async def adapt_for_platform(job_data: dict, platform: str) -> str:
fmt = JOB_PLATFORM_FORMATS.get(platform, JOB_PLATFORM_FORMATS["hh.ru"])
response = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": f"Адаптируй описание вакансии для платформы {platform}. Стиль: {fmt['style']}. Используй разделы: {fmt['sections']}."
}, {
"role": "user",
"content": str(job_data)
}]
)
return response.choices[0].message.content
Массовая генерация для найма: когда нужно закрыть 50+ вакансий
При массовом найме система принимает CSV с перечнем должностей и стеками, генерирует описания батчами по 10–15 вакансий параллельно через asyncio.gather и сохраняет результат в форматах для всех платформ. Для компаний, которые нанимают более 50 человек в год, это экономит 200–300 часов HR-команды. Ниже — сравнение трудозатрат:
| Этап | Ручной процесс | AI-система |
|---|---|---|
| Составление одного описания | 30–90 мин | 15–30 сек |
| Адаптация под 3 платформы | 20–40 мин | 1–2 мин |
| Проверка на гендерную нейтральность | 5–10 мин | автоматически |
| SEO-доработка под job-агрегаторы | 10–15 мин | встроена |
AI-система в 10 раз быстрее ручного составления — это подтверждают наши замеры на проектах с заказчиками.
Оценка и итерации: как убедиться, что текст работает
async def score_job_description(text: str) -> dict:
"""Оцениваем описание по факторам привлечения кандидатов"""
response = await client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "system",
"content": """Оцени описание вакансии по критериям (1–10):
- clarity: ясность требований
- appeal: привлекательность для кандидата
- seo_score: SEO для job-агрегаторов
- gender_neutrality: гендерная нейтральность
- specificity: конкретность (vs абстрактные требования)
Верни JSON с оценками и рекомендациями."""
}, {
"role": "user",
"content": text
}],
response_format={"type": "json_object"}
)
import json
return json.loads(response.choices[0].message.content)
Система не просто генерирует текст — она оценивает его по шкале 1–10 по критериям clarity, appeal, seo_score, gender_neutrality и specificity. На основе оценки мы корректируем промпт и добиваемся стабильно высокого качества. Наш опыт показывает, что после 3–4 итераций качество текстов соответствует лучшим ручным образцам.
Что входит в нашу разработку
- Проектирование архитектуры: выбор LLM (GPT-4o или LLaMA 3), подготовка датасета для few-shot обучения.
- Разработка модулей: генератор, адаптер под платформы, анализатор качества.
- Интеграция с ATS (Huntflow, Talantix, Greenhouse) и HRM-системами.
- Тестирование и A/B-тестирование сгенерированных описаний на реальных вакансиях.
- Развёртывание в вашей инфраструктуре (Kubernetes, SageMaker или on-premise).
- Документация по API и обучение HR-команды.
Этапы внедрения
- Анализ текущего HR-процесса и сбор требований к tone of voice, платформам, ATS.
- Проектирование архитектуры и выбор LLM — мы рекомендуем GPT-4o или LLaMA 3 в зависимости от требований к конфиденциальности.
- Разработка модулей генерации, адаптации под платформы и оценки качества.
- Интеграция с вашей ATS через REST API.
- Тестирование на 5–10 вакансиях, корректировка промптов.
- Деплой в облако или on-premise, обучение команды.
Сроки и стоимость
Разработка MVP с поддержкой одной платформы занимает 1–2 недели. Интеграция с ATS и массовая генерация — ещё 2–3 недели. Точная стоимость рассчитывается индивидуально после аудита вашей HR-инфраструктуры. Гарантируем качество текстов на уровне ручного составления — это подтверждают более 30 проектов, которые мы выполнили за 5 лет работы на рынке AI-решений для HR.
Зачем внедрять AI-генерацию уже сейчас?
Рынок труда меняется — кандидаты выбирают компании, которые говорят с ними на одном языке. Система автоматической генерации описаний вакансий даёт конкурентное преимущество: скорость, качество и единый tone of voice во всех объявлениях. Закажите демонстрацию — покажем на ваших данных.







