Мы строим SlovoAI - сервис, который учит продавать.
Эта статья — первая глава нашего рассказа о выборе технологий, ошибках, неудачных решениях и неожиданных находках — всём, что обычно остаётся за кадром стартапов.
Введение: куда мы идём:
Мы строим SlovoAI — сервис, который учит продавать лучше. Не через теорию и вебинары, а через разбор реальных звонков. Как это работает: менеджер поговорил с клиентом, мы взяли запись и показываем — вот тут ты не дал клиенту договорить, тут забыл спросить про бюджет, здесь слишком торопился. И главное — что с этим делать на следующем звонке. Цель на год — 100 000 активных продавцов в неделю получают такой коучинг.
Чтобы это построить, нужна архитектура из нескольких слоёв:
И вся эта архитектура нужна лишь ради одного: чтобы после звонка продавец понимал, что надо улучшить, чтобы продажа точно состоялась. Так что вся последующая аналитика начинается с одного шага: правильного превращения аудио в текст, разделением, кто это сказал, как и когда. Качество и глубина ASR определяет ценность, которую сервис может предоставить нашему клиенту. Ошибемся здесь — дальше потеряем на качестве во всех этапах: неправильно считается темп речи, путаются реплики клиента и продавца, рекомендации становятся менее глубокими и полезными, система выявляет меньше инсайдов. Поэтому прежде чем переходить к разработке аналитического и рекомендательных блоков, мы поставили себе цель разобраться в конкурентных технологиях на рынке, протестировать все, выявить качество каждой по отдельности, сравнить между собой и выбрать финальный вариант, который будем использовать в продакшене (+ один запасной fall-back вариант, на случай не-предусмотренных рисков).
Почему ASR — это первый реальный выбор:
Вся аналитика — темп речи, слова-паразиты, прошёл ли менеджер по этапам продажи — начинается с одного — с превращения аудио в текст, разделением кто что сказал и когда. Звучит просто. Но на практике это выбор, который определяет качество всего продукта среди множества конкурентных решений, каждый из которых обладает своими как сильными, так и слабыми сторонами. Среди базовых критериев того, что нам нужно мы изначально сформулировали: ● Транскрипция — перевод аудио в текст ● Диаризация — кто говорит: менеджер или клиент (причем нам нужна была именно встроенная система диаризации, на случай, если клиент загружает аудио не из телефонии (там предустановлено разделение сторон разговора), а из других источников) ● Word-level timestamps — когда произнесено каждое слово (для расчёта темпа, пауз, перебиваний) ● Низкая доля ошибок транскрибации из аудио в текст на русском (наш главный рынок), то есть стандартная метрика Words Error Rate, которую учитывают при сравнении ASR.
Кандидаты:
Определились с задачей, определились с критериями и пошли ресерчить. Нашли большое количество площадок сравнения различных ASR сервисов с различными метриками, сделали предварительную оценку и остановились на следующих наиболее вероятных вариантах - Yandex SpeechKit, Deepgram, AssemblyAI, OpenAI Whisper API.
Как тестировали: Нам было важно проверить сервисы не в теоретических рамках, а в реальных разговорах — с шумом, перебиваниями и возможно плохим качеством связи. Ведь продукту все равно придется работать с реальными, иногда грязными записями звонков. Взяли реальные записи из CRM бизнес-партнёров. Усложнили себе задачу, для чего выбрали файлы без преднамеренной диаризации. Никакого разделения на каналы «агент слева, клиент справа» из телефонии. Один аудиопоток, несколько голосов — разбирайтесь сами. Тестовая выборка получилась такой: ● 27 записей общей длительностью 4.5 часа ● Длина аудиозвонков от 3 до 25 минут ● От 2 до 3 участников в разговоре ● Разное качество записей: чистые записи, фоновый шум, телефонное сжатие Для оценки качества на части аудио сделали ручную разметку — ground truth. Прослушали, расставили границы реплик, отметили кто говорит. Потом уже сравнивали с тем, что выдают провайдеры. Проверяли: ● Распознаёт ли текст корректно (особенно русский) ● Разделяет ли спикеров и сколько их находит ● Есть ли таймстемпы по словам ● Скорость обработки ● Цена
Первые грабли: Yandex и публичный доступ:
Начали с Yandex — логично для русского языка. Качество транскрипции отличное. Но v2 API требует загрузить аудио в Object Storage. Загрузили, отправили запрос — 403 Permission Denied. Два часа дебага. Проверяли права, перепроверяем ключи.Оказалось, файлы в бакете просто приватные по умолчанию. SpeechKit не может их прочитать. Нужно явно указывать ACL=“public-read” при загрузке. Мелочь, но нигде это явно не подсвечено, в итоге потерян почти час времени. Хоть разовая настройка и не влияет на выбор с точки зрения долгосрочных «отношений» с сервисом, работа с Yandex оказалась чуть более сложной, чем хотелось. У этого решения очень хорошее качество транскрипции, точного WER не рассчитывали, определяли на глаз, но вот их главная проблема Yandex это отсутствие встроенной диаризации. Все реплики приходят от одного speaker_id. Для нашего решения, где критично разделить менеджера и клиента, такой вариант не подходит. Возможно, в будущем мы вернемся к этому решению и попробуем его совместить с некоторой другой моделью (одна модель будет делать диаризацию, другая транскрибировать и выставлять временные отметки), но пока решили отложить.
Deepgram vs AssemblyAI: скорость против точности:
Скорость:
Deepgram — в 66 раз быстрее реального времени. Час аудио за 55 секунд. AssemblyAI — в 17 раз быстрее. Час за 3.5 минуты. С точки зрения скорости оба варианта нас устраивали. Решение в итоге упёрлось в качество диаризации.
Диаризация — ключевой тест:
На файлах с 3+ спикерами:
И именно здесь скорость перестала быть главным фактором. Deepgram стабильно терял одного человека в групповых звонках. Это критично — мы не поймём, кто что сказал. AssemblyAI корректно разделял всех участников и правильно группировал реплики.
Цена:
OpenAI:
Попробовали новый gpt-4o-transcribe с диаризацией. Результат: диаризация не работает. API возвращает один сегмент без разделения спикеров. Плюс галлюцинации — в конце русского текста появлялись английские фразы. Закрыли вопрос. Локальные модели не тестировали заведомо, т. к. это сильное усложнение и от этого решения нет никакого потенциального преимущества.
Итоговая таблица:
Решение: AssemblyAI:
После нескольких раундов тестов стало понятно: именно AssemblyAI даёт тот стабильный результат, который нам нужен для создания отличного продукта. Почему выбрали в итоге AssemblyAI: ● Единственный с надёжной диаризацией на 2+ спикеров ● Word-level timestamps с confidence score ● Автоматическая пунктуация — текст сразу читаемый ● Простая интеграция — pip install assemblyai, 10 строк кода ● Цена разумная — $0.90 в час Deepgram оставили как fallback — если критична скорость или AssemblyAI упадёт.
Что дальше:
Теперь у нас есть фундамент: текст, разметка спикеров и таймстемпы по каждому слову. Но сам продукт на этом только начинается. Следующий шаг — научить систему понимать и обрабатывать разговоры так же хорошо, как это делает сильный руководитель отдела продаж.