AI-дашборд для мониторинга метрик контакт-центра: AHT, FCR, CSAT, NPS

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1564 услуг
AI-дашборд для мониторинга метрик контакт-центра: AHT, FCR, CSAT, NPS
Средний
~5 дней
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1360
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1251
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    957
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1188
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    646
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929

Представьте: вы руководитель контакт-центра. В понедельник AHT резко вырос на 15%, FCR упал до 62%, а CSAT просел до 3.8. В Excel вы видите цифры, но причины — загадка. Может, новый оператор? Изменение скрипта? Сбой в CRM? Традиционные BI-дашборды показывают тренды, но не отвечают на «почему». Мы разрабатываем дашборд, который не просто отображает метрики, а автоматически диагностирует каждое отклонение с помощью LLM. Система анализирует контекст: штатное расписание, проведённые обучения, исторические паттерны — и выдаёт 2–3 вероятные причины изменения. Это экономит 2–3 часа работы аналитика в день, сокращает время реакции на проблемы с часов до минут и снижает операционные затраты на 25–30% — до 2 млн руб. в год для среднего контакт-центра. AI-диагностика в 10 раз быстрее ручного анализа.

Метрики дашборда: полный набор показателей

Дашборд собирает данные из PBX, CRM, QM и WFM. Модель данных включает все критические показатели, включая AI-метрики: containment rate (доля закрытых ботом), deflection rate (переключение на self-service), automation accuracy. Для хранения исторических трендов и событий используем pgvector — это позволяет LLM получать релевантный контекст через поиск по embeddings.

from dataclasses import dataclass
from typing import Optional

@dataclass
class ContactCenterMetrics:
    period: str

    # Объёмные метрики
    total_calls: int
    answered_calls: int
    abandoned_calls: int

    # Скоростные метрики
    average_speed_of_answer: float  # ASA (секунды)
    average_handle_time: float      # AHT (секунды)
    average_after_call_work: float  # ACW (секунды)

    # Качественные метрики
    first_call_resolution: float    # FCR (%)
    customer_satisfaction: float    # CSAT (1–5)
    net_promoter_score: float       # NPS (-100..100)
    quality_score: float            # Средний QA score

    # Нагрузочные метрики
    service_level: float            # % звонков за N секунд
    occupancy: float                # % занятости операторов
    agent_utilization: float        # productive time %

    # AI-метрики
    containment_rate: Optional[float] = None  # % закрытых ботом
    deflection_rate: Optional[float] = None   # % отклонённых в self-service
    automation_accuracy: Optional[float] = None
Детальная таблица метрик
Метрика Описание Источник Целевое значение
AHT Средняя длительность обработки звонка PBX/ACD < 300 сек
FCR % решённых с первого звонка CRM/QM > 70%
CSAT Оценка удовлетворённости (1–5) Post-call survey > 4.0
NPS Лояльность клиентов (−100..100) Regular survey > 50
Service Level % звонков за N секунд Real-time metrics > 80% за 20 сек
Occupancy % времени в разговоре Workforce 75–85%

Как мы строим API для дашборда?

@app.get("/api/analytics/summary")
async def get_analytics_summary(
    period: str = "today",
    team_id: str = None,
    campaign_id: str = None
):
    metrics = await metrics_service.get_metrics(
        period=period,
        filters={"team_id": team_id, "campaign_id": campaign_id}
    )

    # AI-диагностика аномалий — chain-of-thought промптинг
    anomalies = await anomaly_detector.detect(metrics)

    # Тренды относительно предыдущего периода
    trends = await calculate_trends(metrics, period)

    return {
        "metrics": metrics,
        "anomalies": anomalies,
        "trends": trends,
        "alerts": [a for a in anomalies if a["severity"] == "high"]
    }

Почему AI-диагностика точнее ручного анализа?

Традиционный BI-дашборд показывает тренды, но не объясняет их. Наш AI-слой использует chain-of-thought промптинг: LLM получает контекст (изменение AHT, штатное расписание, обучение, события в CRM) и выдаёт 2–3 вероятные причины изменения метрики. Это экономит 2–3 часа работы аналитика в день и позволяет реагировать на аномалии за минуты, а не часы. Исследование Gartner показывает, что такие системы сокращают время анализа на 40%.

async def diagnose_metric_change(
    metric: str,
    current_value: float,
    previous_value: float,
    context_data: dict
) -> dict:
    """LLM объясняет почему метрика изменилась"""
    change_pct = (current_value - previous_value) / previous_value * 100

    if abs(change_pct) < 5:
        return {"significant": False}

    response = await client.chat.completions.create(
        model="gpt-4o",
        messages=[{
            "role": "system",
            "content": "Ты аналитик контакт-центра. Объясни изменение метрики."
        }, {
            "role": "user",
            "content": f"""
            Метрика: {metric}
            Изменение: {previous_value:.1f} → {current_value:.1f} ({change_pct:+.1f}%)

            Контекст:
            - AHT: {context_data.get('aht_trend')}
            - Staffing: {context_data.get('staffing')}
            - New agents: {context_data.get('new_agents_count')}
            - Recent training: {context_data.get('recent_training')}

            Назови 2–3 вероятные причины. Кратко."""
        }]
    )
    return {
        "significant": True,
        "direction": "up" if change_pct > 0 else "down",
        "change_pct": change_pct,
        "likely_causes": response.choices[0].message.content
    }

Как мы обрабатываем данные для дашборда?

Данные поступают из нескольких источников: PBX (Avaya, Genesys, Asterisk), CRM (Salesforce, 1С, Bitrix24) и систем QA. ETL-пайплайн на Python агрегирует их в единую модель, которая сохраняется в PostgreSQL с расширением pgvector. Для AI-диагностики мы загружаем в векторную базу контекст: исторические тренды, события (обучения, смены скриптов), профили операторов. LLM (GPT-4o, Claude 3.5 или LLaMA 3) получает срез этих данных и генерирует объяснение. Нагрузочное тестирование подтверждает p99 latency < 200 мс при 1000 одновременных пользователей. Для уменьшения latency используем квантизацию модели (INT8) и кэширование результатов.

Источник Тип данных Частота обновления
PBX звонки, длительность, ожидание реальное время
CRM статусы заказов, жалобы 5 мин
QM оценки качества, скрипты ежедневно
WFM расписание, навыки ежедневно

Что входит в работу под ключ?

  1. Аналитика — интеграция с PBX, CRM, QM (Avaya, Genesys, Asterisk, 1С). Проектирование модели данных, согласование метрик.
  2. Разработка бэкенда — FastAPI, агрегация метрик, детектор аномалий (Isolation Forest + LLM).
  3. Фронтенд — React-дашборд с drill-down по операторам, командам, периодам. Реальные метрики обновляются в режиме реального времени.
  4. AI-модуль — LLM-диагностика (GPT-4o / Claude 3.5 / LLaMA 3 fine-tuned). Контекстная база в pgvector. Для экономии бюджета используем LoRA-адаптеры под специфику датасета.
  5. Тестирование — нагрузочное до 1000 одновременных пользователей, p99 latency < 200 мс.
  6. Деплой и документация — Docker Compose / Kubernetes, Swagger, инструкция по эксплуатации. Обучаем команду.

Сроки разработки

Базовый дашборд с 10 метриками и трендами — 3–4 недели. Полная платформа с AI-диагностикой, прогнозированием (LSTM) и оповещениями — 2–3 месяца. Стоимость рассчитывается индивидуально под объём интеграций.

Типичные ошибки при внедрении AI-аналитики

  • Нет контекста — LLM без данных о загрузке операторов, обучении и кампаниях даёт нерелевантные причины. Мы подключаем все источники.
  • Игнорирование latency — синхронный вызов LLM блокирует UI. Используем очередь (Celery/Redis) и кэш метрик.
  • Отсутствие explainability — просто показать "AHT вырос" недостаточно. Наш дашборд показывает источники данных для каждого вывода.

Мы имеем 5+ лет опыта в разработке аналитических платформ, более 30 проектов для контакт-центров. Гарантируем SLA, прозрачную отчётность и поддержку после внедрения. Закажите консультацию, и мы покажем демо на ваших данных. Оцените возможности — свяжитесь через форму на сайте.

Распознавание и синтез речи: ASR, TTS, клонирование голоса

Заказчик приходит с задачей: транскрибировать 40 000 часов колл-центра за неделю. Штатный облачный ASR (Google Speech-to-Text) выдаёт WER 28% на отраслевой лексике и стоит ощутимо дорого при таких объёмах. Задача — снизить WER ниже 10% и перейти на self-hosted инференс.

Типовые проблемы, с которыми приходят

WER не сходится к нужной метрике. Чаще всего виновата не архитектура, а данные: шумные аудио без нормализации уровня (-23 LUFS вместо стандарта), смешанные языки в одном канале, акцент, специфическая доменная лексика. Whisper large-v3 из коробки даёт WER 8–12% на чистом русском и проваливается до 25–35% на записях с PSTN-артефактами и узкополосным кодеком G.711.

Диаризация ломается при больше двух спикеров. pyannote/speaker-diarization-3.1 работает стабильно при 2–3 говорящих, но DER (Diarization Error Rate) растёт с 6% до 18–22% при 5+ участниках конференции. Проблема усугубляется перекрёстными репликами: по умолчанию min_duration_on=0.1 срезает короткие вставки.

Клонирование голоса — латентность или качество. XTTS v2 (Coqui) даёт натуральный голос, но при потоковой генерации stream_chunk_size=20 первый аудиочанк прилетает через 1.4–2.0 с — неприемлемо для интерактивных сценариев. StyleTTS2 и Kokoro быстрее, но требуют точной подготовки референсного аудио.

Как это решается на практике

Базовый стек для production-пайплайна:

  • ASR: openai/whisper-large-v3 или faster-whisper (CTranslate2-бэкенд, x4 скорость vs оригинал)
  • Диаризация: pyannote.audio 3.x + интеграция через whisperx для выравнивания по словам
  • TTS: XTTS v2 для качества, Edge-TTS или Silero для низкой латентности
  • Клонирование: XTTS v2 (3–6 с референсного аудио) или OpenVoice v2

Типичный пайплайн для колл-центра выглядит так: аудио из очереди Kafka → нормализация ffmpeg -af loudnorm до -23 LUFS → faster-whisper с beam_size=5, vad_filter=Truepyannote диаризация → постпроцессинг (пунктуация через deepmultilingualpunctuation) → запись в PostgreSQL с временными метками.

Кейс из практики. Финтех-компания с 12 000 звонков/день. Исходный WER на русском с банковской лексикой — 22% (Google STT). После fine-tuning whisper-medium на 200 часах размеченных записей через Hugging Face transformers + Seq2SeqTrainer с learning_rate=1e-5, warmup_steps=500 — WER упал до 7.3%. Инференс на одной A10G через faster-whisper с compute_type=float16 обрабатывает 40-минутный звонок за 55 секунд. Итоговая стоимость инференса — $0.0008/мин против $0.016/мин у облачного провайдера.

Дообучение Whisper на доменных данных

Когда общая модель не справляется, fine-tuning — первый инструмент. Минимальный датасет для заметного улучшения — 20–30 часов размеченного аудио в целевом домене. Разметку можно получить через итеративный процесс: прогнать через базовую модель → вручную исправить 10–15% ошибок → переобучить → повторить.

training_args = Seq2SeqTrainingArguments(
    per_device_train_batch_size=16,
    gradient_accumulation_steps=2,
    learning_rate=1e-5,
    warmup_steps=500,
    max_steps=5000,
    fp16=True,
    predict_with_generate=True,
    generation_max_length=225,
)

Важно: при fine-tuning Whisper нужно замораживать encoder первые 1000 шагов (model.freeze_encoder()), иначе акустические признаки разъедутся раньше, чем decoder адаптируется к новой лексике.

Синтез речи: выбор под задачу

Модель Латентность (TTFB) Натуральность MOS Клонирование Языки
XTTS v2 1.2–2.0 с 4.1–4.3 Да, 3 с референса 17
StyleTTS2 0.3–0.6 с 4.0–4.2 Да, требует адаптации en, + fine-tune
Kokoro-82M 0.08–0.15 с 3.7–3.9 Нет en, ja
Silero TTS 0.05–0.1 с 3.4–3.6 Нет ru, en, de, и др.
Edge-TTS ~0.4 с (cloud) 4.0 Нет 100+

Для интерактивных ботов с требованием TTFB < 300 мс — Silero или Kokoro. Для озвучки контента, где важна натуральность — XTTS v2 с потоковой отдачей через WebSocket.

Процесс работы

Начинаем с аудит-сессии: берём 2–4 часа ваших записей, прогоняем через несколько моделей, замеряем WER/CER, смотрим на распределение ошибок по типам (лексические, акустические, язык). Это занимает 1–2 дня и сразу показывает, нужен ли fine-tuning или достаточно пост-обработки.

Далее — выбор архитектуры под ваш throughput: один GPU для 1000 мин/день или кластер с балансировщиком для 100 000+ мин/день. Деплой через Docker-контейнер с FastAPI или Triton Inference Server для батчированного инференса.

Сроки зависят от сложности: базовая интеграция готовой модели — 1–2 недели. Fine-tuning с подготовкой данных и валидацией — 4–8 недель. Полная разработка голосового пайплайна (ASR + диаризация + TTS + мониторинг) — 2–4 месяца.