Разработка 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 недели.