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

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

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

Часті запитання

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

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

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

Клієнт телефонує в техпідтримку і каже «рахунок за інтернет прийшов». Традиційне 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 тижні.