Розробка AI-системи для автоматичної генерації описів вакансій

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1564 послуг
Розробка AI-системи для автоматичної генерації описів вакансій
Простий
~2-3 дні
Часті запитання

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

Етапи розробки AI-рішення

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

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

Описи вакансій, які знаходять ідеального кандидата

Кожен 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-команди, що відповідає економії бюджету до $15,000 на рік. Наш job description generator підтримує генерацію описів українською та російською мовами, використовує інклюзивні формулювання. Нижче — порівняння трудовитрат:

Етап Ручний процес AI-система
Складання одного опису 30–90 хв 15–30 сек
Адаптація під 3 платформи 20–40 хв 1–2 хв
Перевірка на гендерну нейтральність 5–10 хв автоматично
SEO-доопрацювання під job-агрегатори 10–15 хв вбудована

AI-система в 10 разів швидша за ручне складання — це підтверджують наші виміри на проєктах із замовниками. Крім того, AI-генератор підвищує відгук кандидатів на 40% порівняно з шаблонними описами.

Оцінка та ітерації: як переконатися, що текст працює

Код оцінки якості
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-команди.

Етапи впровадження

  1. Аналіз поточного HR-процесу та збір вимог до tone of voice, платформ, ATS.
  2. Проєктування архітектури та вибір LLM — ми рекомендуємо GPT-4o або LLaMA 3 залежно від вимог до конфіденційності.
  3. Розробка модулів генерації, адаптації під платформи та оцінки якості.
  4. Інтеграція з вашою ATS через REST API.
  5. Тестування на 5–10 вакансіях, коригування промптів.
  6. Деплой у хмару або on-premise, навчання команди.

Терміни та вартість

Розробка MVP з підтримкою однієї платформи займає 1–2 тижні і стартує від $5,000. Інтеграція з ATS і масова генерація — ще 2–3 тижні. Точна вартість розраховується індивідуально після аудиту вашої HR-інфраструктури. Зв'яжіться з нами, щоб оцінити проєкт. Гарантуємо якість текстів на рівні ручного складання — це підтверджують більше 30 проєктів, які ми виконали за 5 років роботи на ринку AI-рішень для HR.

Навіщо впроваджувати AI-генерацію вже зараз?

Ринок праці змінюється — кандидати обирають компанії, які говорять з ними однією мовою. Система автоматичної генерації описів вакансій дає конкурентну перевагу: швидкість, якість і єдиний tone of voice у всіх оголошеннях. Замовте демонстрацію — покажемо на ваших даних.

Генеративний AI розробка: від промпта до production API

Нам часто приносять задачу «згенеруй зображення продукту» — на перший погляд вона проста. Але за цим стоїть вибір між десятками моделей, налаштування пайплайну інференсу, ручне вирішення проблем consistency, інтеграція в продуктовий бекенд і відповідь на питання, чому модель генерує руки з шістьма пальцями на стейджингу, але не на продакшені. Розберемо напрямки, з якими ми працюємо.

Генерація зображень: від промпта до production API

Актуальний ландшафт — FLUX.1 [dev/schnell/pro] від Black Forest Labs та Stable Diffusion 3.5. FLUX.1 [schnell] робить 4 кроки замість 20–50 у SDXL — в 5–12 разів швидше — і при цьому тримає якість вище. На A100 80GB — 1.2–1.8 с на зображення 1024×1024 при batch_size=4.

Типова проблема при розгортанні: FLUX.1 [dev] потребує 24+ GB VRAM в fp16. На A10G 24GB влізає в обріз, при batch_size>1 — OOM. Рішення: torch_dtype=torch.bfloat16 + enable_model_cpu_offload() з diffusers, або квантизація через bitsandbytes в NF4 — падіння якості мінімальне, споживання пам'яті знижується до 12–14 GB.

ControlNet і IP-Adapter — ключові інструменти для production-задач, де потрібна керованість. ControlNet з Canny/Depth/Pose картою дає структурний контроль. IP-Adapter (особливо IP-Adapter-FaceID) дозволяє переносити identity персонажа на генерації — це основа для персоналізованого контенту.

Кейс: e-commerce фото-зйомка. Рітейлер з 8000 SKU потребував lifestyle-фото для кожного продукту. Пайплайн: сегментація продукту (Segment Anything Model 2) → видалення фону → inpainting FLUX.1 [dev] з product image як IP-Adapter reference → upscale через RealESRGAN_x4plus. Вартість генерації на орендованих A100 значно нижча порівняно з професійною зйомкою, економія багатократна. Throughput — 200 зображень/год на 2× A100. Багаторічний досвід 30+ проектів гарантує, що ми оберемо оптимальну модель під ваше завдання — оцінку можна отримати на старті.

Чому вибір моделі — лише половина успіху?

Fine-tuning під конкретний стиль або персонаж

Dreambooth і LoRA — стандарт для адаптації під конкретний візуальний стиль або об'єкт. LoRA навчається за 2–4 години на 20–30 референсних зображеннях на одному A100. Rank 16–32 зазвичай достатньо для стилю, rank 64+ потрібен для точного відтворення облич.

Часта помилка: навчати LoRA занадто довго — модель перенавчається на референси, втрачає здатність до варіативності. Ознака: на cfg_scale=7 всі зображення схожі на copy-paste референсу. Лікується ранньою зупинкою (зазвичай 1500–2000 кроків для 20 зображень) та prior_preservation_loss.

Для більш глибокої кастомізації — full fine-tuning через diffusers + accelerate з FSDP на декількох GPU. Але це вже 40–80 годин навчання і потрібен дійсно великий датасет (1000+ зображень).

Порівняння підходів до генерації зображень

Модель Швидкість (1024×1024, A100) Якість (CLIP score) Керованість (ControlNet, IP-Adapter) VRAM (fp16)
Stable Diffusion 3.5 2.0–3.5 с 0.28–0.31 через ControlNet (дозволено) 16–20 GB
FLUX.1 [schnell] 0.8–1.2 с 0.30–0.33 обмежена (без ControlNet) 12–14 GB (4‑кроковий)
FLUX.1 [dev] 3–5 с (50 кроків) 0.32–0.34 через IP-Adapter, ControlNet (адаптер) 24+ GB
Midjourney (API) 5–10 с (черга) 0.31–0.33 промпт + style reference не потрібно

Які моделі кращі для генерації відео?

Модель Доступність Довжина Роздільна здатність Керованість
Sora (OpenAI) API (обмежений) до 60 с 1080p промпт, image-to-video
Wan2.1 (Alibaba) open weights до 81 кадр 720p промпт, I2V, V2V
CogVideoX-5B open weights 6 с 720p промпт, I2V
Kling 1.6 API до 30 с 1080p промпт, I2V
Mochi-1 open weights 5.4 с 480p промпт

Open-weight відеомоделі поки відстають від комерційних за стабільністю та довжиною. Wan2.1 — найкращий вибір для self-hosted: 14B параметрів, працює на 2× A100, дає прийнятну якість для коротких кліпів.

Головний біль відеогенерації — temporal consistency: персонаж змінює колір одягу на третій секунді, об'єкт «пливе». Часткове рішення — генерація з motion_bucket_id і noise_aug_strength в Stable Video Diffusion, або використання I2V (image-to-video) замість чистого text-to-video. Як зазначається в дослідженні VideoPoet, consistency досягається за рахунок навчання на довгих послідовностях.

AnimateDiff залишається робочим інструментом для коротких петель та motion-ефектів поверх SD/FLUX. Не Sora, але деплоїться локально і передбачуваний.

Генерація музики та аудіо

AudioCraft від Meta (MusicGen + AudioGen) — production-готовий стек для музичної генерації. musicgen-large (3.3B) генерує 30 с музики за ~8 с на A100. Керування через текстовий промпт та melody conditioning — можна задати мелодію наспівуванням.

Stable Audio Open від Stability AI — альтернатива з довжиною до 47 с, краща керованість структурою (intro/verse/chorus). Деплой аналогічний: diffusers + FastAPI.

Для voice-over та озвучки — ElevenLabs API або self-hosted XTTS v2 (див. послугу Speech AI). Для sound design та foley — AudioGen.

3D-генерація: практичний стан

3D-генерація все ще не дісталася тієї ж зрілості, що 2D. Але для конкретних задач інструменти вже робочі:

TripoSG та Shap-E — text/image-to-3D. Shap-E від OpenAI генерує прості 3D-меші за секунди, але геометрія грубувата. TripoSG дає більш детальні результати, але потребує постпроцесінгу (ремешинг, UV-розгортка).

Wonder3D та Zero123++ — реконструкція 3D з одного зображення. Працюють через генерацію multi-view (6–8 видів) та подальше 3D-відновлення через NeuS або instant-ngp.

Gaussian Splatting (3DGS) — не генерація, а реконструкція з серії фото/відео. Для товарних карток та нерухомості це вже production: 50–200 фото → 3DGS модель за 15–30 хв на RTX 4090 → інтерактивний 3D-в'ювер в браузері.

Інфраструктура та деплой

Для генеративних моделей критично:

  • Черга задач — Celery + Redis або Ray Serve. Синхронний HTTP для генерації зображень неприйнятний при >5 конкурентних запитах.
  • Кешування — схожі промпти дають схожі результати. Семантичний кеш через ембеддінги (faiss + sentence-transformers) може знизити навантаження на GPU на 20–40%.
  • Моніторинг якості — CLIP score для text-image alignment, FID для оцінки розподілу генерацій. Інтеграція в MLflow або Weights & Biases.
  • Зберігання — згенеровані зображення одразу в S3/MinIO, не на диску сервера інференсу.

Що входить в роботу (deliverables)

Ми беремо проект під ключ — від вибору моделі до деплою та моніторингу. В результат входить:

  • Модель (або API-інтеграція) з бенчмарками продуктивності (latency p99, throughput).
  • Документація пайплайну (prompt engineering guide, model card, версії залежностей).
  • Інтеграція з вашим бекендом (REST/gRPC, черги).
  • Налаштований моніторинг (дашборди, алерти по дрейфу якості).
  • Навчальний воркшоп для команди (2–4 години).
  • Гарантійна підтримка 3 місяці після запуску — в рамках сертифікату якості на нашу роботу.

Історично ми виконали 30+ проектів в генеративному AI — це дає нам право гарантувати результат.

Як будується процес розробки генеративного AI?

  1. Аналітика (1–2 дні): аудит поточної архітектури, уточнення use case, вибір моделей та метрик успіху. Оцінюємо проект безкоштовно.
  2. Proof of Concept (1–3 тижні): швидкий прототип на ваших даних — щоб бачити реальну якість, а не демо з блогу.
  3. Проектування (1–2 тижні): архітектура пайплайну, інфраструктура (GPU-кластер/API), план A/B-тестування.
  4. Реалізація та fine-tuning (4–12 тижнів): розробка, навчання LoRA/full fine-tuning, інтеграція з чергою та кешем.
  5. Тестування (1–2 тижні): навантажувальні тести, валідація метрик, перевірка на edge-case (негативні сценарії).
  6. Деплой та моніторинг (1–2 тижні): розгортання на production, налаштування моніторингу, документування.
Що ми перевіряємо на етапі Proof of Concept
  • Відповідність очікувань та реальної якості генерації (CLIP score, user study).
  • Швидкість інференсу при різних batch_size та типах GPU.
  • Ймовірність токсичних/некоректних генерацій — перевірка safety filters.
  • Можливість масштабування: чи буде модель вивозити пікове навантаження.

Строки орієнтовно

Інтеграція готового API (DALL‑E 3, Midjourney API, Stability API) — 1–2 тижні. Self-hosted пайплайн з fine-tuning — 6–12 тижнів. Повна платформа з UI, чергами та моніторингом — 3–6 місяців. Конкретна вартість розраховується індивідуально після аналізу вашого сценарію.

Зв'яжіться з нами — замовте консультацію, і ми підберемо оптимальну архітектуру для вашого проекту. Отримайте попередню оцінку термінів безкоштовно.