Проблема: классификация намерения в первые секунды звонка
Клиент звонит в техподдержку и говорит «счёт за интернет пришёл». Традиционное 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
- Анализ логов текущей IVR — сбор типовых запросов, выделение категорий (1-2 дня).
- Проектирование таксономии — совместно с вашими экспертами (1-2 дня).
- Разработка классификатора — настройка LLM, embeddings, кларификации (1-2 недели).
- Интеграция с IVR-платформой — через REST API или WebSocket (1-2 недели).
- Нагрузочное тестирование — проверка latency p99 и точности на боевых данных (3-5 дней).
- Запуск в пилотном режиме — параллельная работа с мониторингом (1-2 недели).
Что входит в работу
- Модель классификации — обученная на ваших данных, с документацией по таксономии.
- API-сервис — обёртка для вызова из IVR, включая обработку ошибок.
- Тестовый набор — размеченные звонки для верификации точности.
- Инструкция по поддержке — добавление новых категорий, обновление модели.
- Обучение операторов — как реагировать на переводы от AI-классификатора.
Сроки и стоимость
Базовый классификатор и тестирование — 2-3 недели. Полная интеграция с IVR-платформой, обучение модели на ваших данных и настройка сценариев — 4-6 недель. Стоимость рассчитывается индивидуально — оценим ваш проект после знакомства с спецификой.
Гарантируем точность >90% на этапе тестирования. Сокращение затрат на колл-центр до 40% за счёт снижения нагрузки на операторов. Экономия бюджета на маршрутизацию вызовов достигает 30%. Наш опыт — более 5 лет в AI-решениях для голосовых интерфейсов.
Свяжитесь с нами, чтобы обсудить архитектуру вашего AI-IVR. Проведём аудит текущей системы и предложим план внедрения. Закажите пилотный проект — протестируем классификатор на ваших логах за 2 недели.







