Речевая аналитика звонков
Клиника теряла пациентов, и никто не знал почему. ИИ разобрал 25 000 разговоров регистратуры и показал, где люди уходят.
- Python
- GigaAM
- Gemma 4
- Qwen
- Claude Opus
- Firebird
- FFmpeg
Пациентов в клинике становилось меньше. Записаться можно только по телефону, поэтому ответ был где-то в звонках регистратуры: о чём просят люди, в чём им отказывают, как с ними говорят. Прослушать тысячи разговоров вручную было некому.
Руководство поставило задачу: найти причину.
Конвейер, который сам слушает каждый звонок и раскладывает его по полочкам. Записи не покидают клинику: распознавание и основной анализ идут на её собственном оборудовании.
Сбор
Архив записей выгружается из виртуальной АТС в локальное хранилище, каждый звонок встаёт в очередь.
Подготовка звука
FFmpeg приводит записи к одному формату. В стереозаписях оператор и пациент звучат на разных каналах: я разделяю их и свожу слова на общую временную шкалу, чтобы восстановить ход разговора «вопрос — ответ».
Распознавание
GigaAM — модель, обученная на русской речи, — работает параллельно на трёх видеокартах.
Исправление текста
Плохая связь и нечёткая речь дают ошибки. Локальная модель Gemma 4 их исправляет, а в монозаписях ещё и разделяет реплики оператора и пациента.
Анализ
Из текста удаляются персональные данные. Затем локальная модель Qwen раскладывает звонок по 36 параметрам: с чем обратился человек, что ему предложили, чем закончился разговор, какой был тон и что важно именно для этой клиники.
Отчёты
Конструктор, в котором сотрудник сам собирает цепочку: выборка из базы → обработка моделью → новая выборка → итоговая сводка. Сводку по обезличенным данным пишет Claude Opus. Для нового отчёта разработчик не нужен.
Непростое
Объём
4–6 тысяч звонков в месяц — это 90–130 часов разговоров. Конвейер работает пачками, а каждый звонок проходит этапы со своим статусом в базе. Поэтому после остановки обработка продолжается с того места, где прервалась.
Сомнительное — человеку
Пустые записи, плохой звук и ответы модели, не прошедшие проверку, попадают в отдельную очередь. Для неё я сделал веб-окно: текст, запись и выводы модели рядом, решение принимает человек.
Данные пациентов
В облачную модель уходят только обезличенные данные.
- Pythonвесь конвейер, очередь и отчёты.
- GigaAMраспознавание русской речи на своих видеокартах.
- Gemma 4, Qwenлокальные языковые модели: исправление текста и разбор звонка по JSON-схеме.
- Claude Opus через OpenRouterитоговые сводки по обезличенным данным.
- Firebirdочередь, статусы, тексты и результаты анализа. Сами записи в базе не хранятся.
За полгода разобрано больше 25 000 звонков. Директор впервые увидел, о чём на самом деле просят пациенты, где им отказывают и как регистратура ведёт разговор, и получил развёрнутый отчёт по потерянным клиентам.
Только чтобы прослушать эти записи, человеку понадобилось бы около 70 рабочих дней — без пауз и без заметок.