Разработка AI-системы распознавания намерения звонящего в IVR

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Разработка AI-системы распознавания намерения звонящего в IVR
Средняя
~5 рабочих дней
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Разработка AI-системы распознавания намерения звонящего в IVR

Распознавание намерения в IVR — точная классификация запроса из одной-двух фраз в первые секунды звонка. Высокая точность маршрутизации (>90%) — ключевой показатель эффективности AI-IVR.

Многоуровневая классификация намерений

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)

Обработка неоднозначных намерений

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% — целевой показатель
    }

Сроки: классификатор намерений + тестирование — 2–3 недели. Полная интеграция в IVR — 4–6 недель.