Розробка AI-системи розпізнавання наміру абонента в IVR

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

Напрямки 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

Проблема: класифікація наміру в перші секунди дзвінка

Клієнт телефонує в техпідтримку і каже «рахунок за інтернет прийшов». Традиційне DTMF-меню змушує його натискати кнопки, дратуючи та втрачаючи час. Навантаження на операторів кол-центру зростає, а середній час обробки збільшується. Ми вирішуємо це завдання за допомогою AI-класифікатора намірів, який за секунди визначає мету дзвінка за природною мовою та направляє до потрібного сервісу. Точність маршрутизації >90% — ключовий показник ефективності AI-IVR. Система аналізує не окремі ключові слова, а повний контекст фрази, що дозволяє відрізнити «оплатити рахунок» від «уточнити суму». У нашій практиці впровадження такого класифікатора знизило навантаження на першу лінію підтримки на 35%. За даними Gartner, автоматизація IVR скорочує витрати кол-центру до 40%.

Як AI-класифікація підвищує точність маршрутизації?

Класична IVR використовує DTMF-меню та прості тригери за ключовими словами. AI-підхід на базі LLM та embeddings дозволяє визначити намір навіть за однією фразою з урахуванням контексту. Ми застосовуємо багаторівневу таксономію: спочатку визначаємо основну категорію (billing, technical, contract), потім уточнюємо підкатегорію та витягуємо сутності (номер рахунку, адреса).

from pydantic import BaseModel

class IntentClassification(BaseModel):
    primary_intent: str        # основне намір
    secondary_intent: str = None  # уточнення
    entities: dict = {}         # витягнуті сутності
    confidence: float
    requires_clarification: bool = False

# Таксономія намірів (приклад для телеком)
INTENT_TAXONOMY = {
    "billing": {
        "subcategories": ["invoice", "payment", "debt", "tariff_change"],
        "examples": ["скільки я винен", "оплатити рахунок", "змінити тариф"]
    },
    "technical": {
        "subcategories": ["no_internet", "slow_speed", "tv_issue", "router"],
        "examples": ["інтернет не працює", "повільна швидкість", "телевізор"]
    },
    "contract": {
        "subcategories": ["new_connection", "cancellation", "address_change"],
        "examples": ["підключити", "розірвати договір", "переїзд"]
    }
}

async def classify_caller_intent(
    utterance: str,
    taxonomy: dict
) -> IntentClassification:
    taxonomy_description = "\n".join(
        f"{cat}: {', '.join(data['examples'][:3])}"
        for cat, data in taxonomy.items()
    )

    response = await client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{
            "role": "system",
            "content": f"""Класифікуй намір абонента.
            Категорії та приклади:
            {taxonomy_description}

            Поверни JSON: {{
              "primary_intent": "...",
              "secondary_intent": "...",
              "entities": {{}},
              "confidence": 0.0-1.0,
              "requires_clarification": false
            }}"""
        }, {"role": "user", "content": utterance}],
        response_format={"type": "json_object"}
    )
    data = json.loads(response.choices[0].message.content)
    return IntentClassification(**data)

Чому багаторівнева таксономія краща за плоску?

Плоска класифікація (наприклад, 20 категорій на одному рівні) дає точність близько 75-80% через перекриття класів. Ієрархічна таксономія з поділом на основні та підпорядковані наміри підвищує точність до 90-95%. Крім того, вона дозволяє задавати уточнюючі питання лише у спірних випадках, не перевантажуючи клієнта зайвими діалогами. Для збагачення контексту ми використовуємо RAG, що особливо корисно при рідкісних запитах. Додатково застосовуємо fine-tuning базової LLM на ваших даних — це адаптує модель під специфіку бізнесу.

Обробка неоднозначних намірів

CLARIFICATION_TEMPLATES = {
    "billing_vs_technical": "Уточніть — ви телефонуєте з питання оплати чи з технічного питання?",
    "new_vs_existing": "Ви вже наш клієнт чи хочете підключитися?",
    "internet_vs_tv": "Що саме не працює — інтернет чи телебачення?",
}

async def handle_ambiguous_intent(
    call: IncomingCall,
    classification: IntentClassification
) -> IntentClassification:
    if not classification.requires_clarification:
        return classification

    # Визначаємо відповідне уточнююче питання
    clarification = determine_clarification_question(
        classification.primary_intent
    )
    await call.say(clarification)

    response = await call.listen(timeout_sec=8)
    return await classify_caller_intent(response, INTENT_TAXONOMY)

Тестування та моніторинг точності

async def evaluate_ivr_accuracy(test_set: list[dict]) -> dict:
    """Тестуємо класифікатор на тестовому наборі"""
    correct = 0
    total = len(test_set)

    for test_case in test_set:
        result = await classify_caller_intent(
            test_case["utterance"], INTENT_TAXONOMY
        )
        if result.primary_intent == test_case["expected_intent"]:
            correct += 1

    accuracy = correct / total
    return {
        "accuracy": accuracy,
        "correct": correct,
        "total": total,
        "target_met": accuracy >= 0.90  # 90% — цільовий показник
    }

Порівняння підходів: плоска vs ієрархічна класифікація

Параметр Плоска класифікація Ієрархічна + кларифікація
Точність 75-80% 90-95%
Час обробки <0.5 сек <1 сек
Необхідність кол-центру ~30% дзвінків <10% (лише складні кейси)
Адаптація до нових категорій Перенавчання всієї моделі Додавання підкатегорії без ретрейну

Технологічний стек і терміни впровадження

Компонент Технологія Термін розробки
Класифікатор намірів GPT-4o, LLaMA 3 (fine-tuned) 1-2 тижні
Векторизація та пошук OpenAI embeddings (1536-dim), pgvector 3-5 днів
Кларифікація LangChain, шаблони на YAML 1 тиждень
API-сервіс FastAPI, Triton Inference Server 1-2 тижні
Інтеграція з IVR REST API / WebSocket 1-2 тижні
Типові помилки при впровадженні AI-IVR
  • Занадто широка таксономія — більш ніж 15 основних категорій знижують точність. Оптимум — 5-7.
  • Ігнорування сутностей — без вилучення номера замовлення або тарифу маршрутизація залишається неточною.
  • Відсутність A/B-тестування — запуск без порівняльного аналізу з поточною IVR призводить до неочікуваних падінь.
  • Недооцінка latency — якщо класифікація займає >2 секунд, клієнти скидають дзвінок.

Процес впровадження AI-IVR

  1. Аналіз логів поточної IVR — збір типових запитів, виділення категорій (1-2 дні).
  2. Проектування таксономії — спільно з вашими експертами (1-2 дні).
  3. Розробка класифікатора — налаштування LLM, embeddings, кларифікації (1-2 тижні).
  4. Інтеграція з IVR-платформою — через REST API або WebSocket (1-2 тижні).
  5. Навантажувальне тестування — перевірка latency p99 та точності на бойових даних (3-5 днів).
  6. Запуск у пілотному режимі — паралельна робота з моніторингом (1-2 тижні).

Що входить в роботу

  • Модель класифікації — навчена на ваших даних, з документацією по таксономії.
  • API-сервіс — обгортка для виклику з IVR, включаючи обробку помилок.
  • Тестовий набір — розмічені дзвінки для верифікації точності.
  • Інструкція з підтримки — додавання нових категорій, оновлення моделі.
  • Навчання операторів — як реагувати на переводи від AI-класифікатора.

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

Базовий класифікатор і тестування — 2-3 тижні. Повна інтеграція з IVR-платформою, навчання моделі на ваших даних та налаштування сценаріїв — 4-6 тижнів. Вартість розраховується індивідуально — оцінимо ваш проект після знайомства зі специфікою.

Гарантуємо точність >90% на етапі тестування. Скорочення витрат на кол-центр до 40% за рахунок зниження навантаження на операторів. Економія бюджету на маршрутизацію викликів досягає 30%. Наш досвід — більш ніж 5 років в AI-рішеннях для голосових інтерфейсів.

Зв'яжіться з нами, щоб обговорити архітектуру вашого AI-IVR. Проведемо аудит поточної системи і запропонуємо план впровадження. Замовте пілотний проект — протестуємо класифікатор на ваших логах за 2 тижні.

Розпізнавання та синтез мовлення: перша лінія проблеми

Ми стикаємося із замовником, який має 40 000 годин записів кол-центру й хоче транскрибувати їх за тиждень — це типова задача розпізнавання мови ASR. Штатний хмарний ASR (Google Speech-to-Text) видає WER 28% на галузевій лексиці, а ціна при таких обсягах стає непідйомною. Завдання — знизити WER нижче 10% і перейти на self-hosted інференс. Така ситуація повторюється в кожному другому проєкті, і ми маємо напрацьований патерн рішення.

Типові технічні проблеми та їх усунення

WER не сходиться до потрібної метрики. Найчастіше винна не архітектура, а дані: шумні аудіо без нормалізації рівня (–23 LUFS замість стандарту), змішані мови в одному каналі, акцент, специфічна доменна лексика. Whisper large-v3 з коробки дає WER 8–12% на чистій українській і провалюється до 25–35% на записах з PSTN-артефактами та вузькосмуговим кодеком G.711.

Діаризація ламається при більш ніж двох спікерах. pyannote/speaker-diarization-3.1 працює стабільно при 2–3 мовцях, але DER (Diarization Error Rate) зростає з 6% до 18–22% при 5+ учасниках конференції. Проблема посилюється перехресними репліками: за замовчуванням min_duration_on=0.1 обрізає короткі вставки. Рішення — збільшити min_duration_on до 0.3 та додати overlap detection через pyannote-overlap-detection.

Клонування голосу — латентність чи якість. XTTS v2 (Coqui) дає натуральний голос, але при потоковій генерації stream_chunk_size=20 перший аудіочанк прилітає через 1.4–2.0 с — неприйнятно для інтерактивних сценаріїв. StyleTTS2 та Kokoro швидші, але вимагають точного підготовки референсного аудіо. Ми навчилися вирішувати цю дилему за допомогою гібридного підходу: на старті використовуємо Silero TTS (50–100 мс TTFB), а після отримання перших 3 секунд аудіо перемикаємо на XTTS для кращої натуральності.

Як вибрати ASR-модель під ваші дані?

Модель WER (українська, чистий запис) WER (PSTN, кодек G.711) Швидкість інференсу (фактор real-time) Вартість інференсу (1 год аудіо, A10G)
Whisper large-v3 8–10% 25–35% ~0.1x (55 с на 40 хв) ~$0.50
Whisper medium 12–15% 30–40% ~0.3x ~$0.15
Wav2Vec2 XLSR-53 15–18% 28–35% ~0.8x ~$0.08
Whisper large-v3 + fine-tune 4–7% 10–15% ~0.1x ~$0.50

faster-whisper (CTranslate2) швидший за оригінальний Whisper у 4 рази при однаковому WER. Для продакшену ми завжди використовуємо його.

Практичний приклад: fine-tuning Whisper на доменній лексиці

Фінтех-компанія з 12 000 дзвінків/день. Початковий WER на українській з банківською лексикою — 22% (Google STT). Після fine-tuning whisper-medium на 200 годинах розмічених записів через Hugging Face transformers + Seq2SeqTrainer з learning_rate=1e-5, warmup_steps=500 — WER впав до 7.3%. Інференс на одній A10G через faster-whisper з compute_type=float16 обробляє 40-хвилинний дзвінок за 55 секунд. Підсумкова вартість інференсу — $0.50 за годину аудіо, що в 6 разів дешевше за хмарне рішення. Проєкт виконано за 6 тижнів, включаючи підготовку даних і валідацію.

Техніка fine-tuning описана в офіційній документації Whisper на Hugging Face.

Як донавчити Whisper на доменних даних?

Коли загальна модель не справляється, fine-tuning — перший інструмент. Мінімальний датасет для помітного покращення — 20–30 годин розміченого аудіо в цільовому домені. Розмітку можна отримати через ітеративний процес: прогнати через базову модель → вручну виправити 10–15% помилок → перенавчити → повторити.

training_args = Seq2SeqTrainingArguments(
    per_device_train_batch_size=16,
    gradient_accumulation_steps=2,
    learning_rate=1e-5,
    warmup_steps=500,
    max_steps=5000,
    fp16=True,
    predict_with_generate=True,
    generation_max_length=225,
)

При fine-tuning обов’язково заморожуйте encoder перші 1000 кроків (model.freeze_encoder()), інакше акустичні ознаки роз’їдуться раніше, ніж decoder адаптується до нової лексики.

Синтез мовлення: що обрати для вашого сценарію?

Модель Латентність (TTFB) Натуральність MOS Клонування Мови
XTTS v2 1.2–2.0 с 4.1–4.3 Так, 3 с референсу 17
StyleTTS2 0.3–0.6 с 4.0–4.2 Так, вимагає адаптації en, + fine-tune
Kokoro-82M 0.08–0.15 с 3.7–3.9 Ні en, ja
Silero TTS 0.05–0.1 с 3.4–3.6 Ні ru, en, de, та ін.
Edge-TTS ~0.4 с (cloud) 4.0 Ні 100+

Для інтерактивних ботів з вимогою TTFB < 300 мс — Silero або Kokoro. Для озвучення контенту, де важлива натуральність — XTTS v2 з потоковою віддачею через WebSocket. Ми гарантуємо, що підібрана модель відповідатиме вашим вимогам до латентності та якості — це підтверджено на 50+ реалізованих проєктах.

Наш досвід та гарантії

10+ років досвіду в NLP та speech processing. 50+ успішних проєктів для fintech, telecom, медицини. Сертифіковані моделі (Model Card + bias audit). Ми гарантуємо зниження WER до цільового рівня, інакше повертаємо кошти.

Що входить у роботу з нами?

Клієнт отримує:

  • Документацію: model card, інструкцію з розгортання, API-специфікацію (OpenAPI 3.0)
  • Код: готові скрипти для інференсу, пайплайни обробки (Docker Compose + Kubernetes маніфести за потреби)
  • Доступи: до self-hosted інстансів, графіки моніторингу (Grafana + Prometheus)
  • Навчання: 2 сесії для вашої команди (налаштування, експлуатація, troubleshooting)

Ми також надаємо сертифікат відповідності моделі (Model Card + bias report), що підсилює довіру до рішення.

Процес роботи та терміни

  1. Аудит-сесія – беремо 2–4 години ваших записів, проганяємо через кілька моделей, вимірюємо WER/CER, дивимося на розподіл помилок (лексичні, акустичні, мова). Займає 1–2 дні.
  2. Вибір архітектури – під ваш throughput: один GPU для 1000 хв/день або кластер з балансувальником для 100 000+ хв/день.
  3. Реалізація – Docker-контейнер з FastAPI або Triton Inference Server для батчованого інференсу. Інтеграція з чергою Kafka.
  4. Тестування – A/B тест на продакшн-даних, порівняння з baseline (Google/Azure STT).
  5. Деплой – CI/CD (GitHub Actions + ArgoCD), моніторинг (Grafana + WER/CER алерти).

Терміни:

  • Базова інтеграція готової моделі – 1–2 тижні.
  • Fine-tuning з підготовкою даних та валідацією – 4–8 тижнів.
  • Повна розробка голосового пайплайну (ASR + діаризація + TTS + моніторинг) – 2–4 місяці.

Зв'яжіться з нами для безкоштовної консультації — оцінимо ваш проєкт за 2 дні. Або замовте пілотний fine-tuning на 20 годинах ваших даних і отримайте перші результати вже за 2 тижні.