Проблема: классификация намерения в первые секунды звонка
Клиент звонит в техподдержку и говорит «счёт за интернет пришёл». Традиционное 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 недели.







