AI-автогенерация описаний вакансий
HR-отдел тратит от 30 до 90 минут на составление одного описания вакансии. AI-система генерирует структурированный job description за 15–30 секунд по названию должности, стеку и ключевым требованиям — с соблюдением tone of voice компании, нейтральными формулировками по гендеру и SEO-оптимизацией для job-агрегаторов.
Генератор описаний вакансий
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)
Мультиязычная генерация и адаптация под платформы
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
Массовая генерация для найма
При закрытии нескольких вакансий одновременно система принимает CSV с должностями и стеками, генерирует описания батчами по 10–15 вакансий параллельно через asyncio.gather, сохраняет в форматах для каждой платформы. Для компаний с наймом 50+ позиций в год это сокращает нагрузку HR-команды на 200–300 часов ежегодно.
Анализ эффективности текстов
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)
Генератор описаний вакансий с адаптацией под 3 платформы готов за 1–2 недели. Интеграция с ATS (Huntflow, Talantix, Greenhouse) и авторазмещение — ещё 2–3 недели.







