Разработка AI-системы автоматической генерации описаний вакансий

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Разработка AI-системы автоматической генерации описаний вакансий
Простая
~2-3 рабочих дня
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    854
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

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 недели.