Как создать эффективного голосового робота: от скриптовых ботов до генеративных

Скриптовые боты стали стандартом для автоматизации исходящих кампаний благодаря своей предсказуемости. Они звучат естественно благодаря предзаписи, и мы контролируем каждое слово, что особенно важно для телемаркетинга и коллекшена. Однако, когда дело доходит до автоматизации входящих звонков, где абоненты могут задавать любые вопросы, такие решения часто не оправдывают ожиданий.
Переход к генеративным моделям
С учетом имеющихся ограничений мы начали исследовать возможности больших языковых моделей (LLM) для создания более адаптивных голосовых роботов. С конца 2022 года мы активно тестировали ChatGPT и наблюдали за его развитием.
Однако у нас оставались три ключевых проблемы:
-
Конфиденциальность: Данные клиентов отправляются на внешние серверы.
-
Контроль скорости ответа: Задержки от внешних сервисов недопустимы.
-
Стоимость: Использование сторонних сервисов может быть экономически невыгодным.
Эти факторы подтолкнули нас к разработке собственной LLM, адаптированной для голосового канала и работающей на наших серверах.
Как выбрать подходящую LLM модель?
Начинать с нуля — неэффективно. Мы проанализировали 20 моделей кандидатов и сформировали множество критериев для выбора. Вот ключевые из них:
-
Средняя скорость ответа: Важно сократить время генерации.
-
Количество нелогичных ответов: Минимизировать наборы символов без смысла.
-
Эффективность в сложных темах: Оценка работы модели с деликатными темами и вопросами.
-
Релевантность ответов: Оценка сгенерированных ответов на соответствие контексту диалога.
-
Семантическая близость: Сравнение с эталонными ответами.
Создание тестового набора данных
Для оценки моделей мы собрали датасет из 800 реальных диалогов на различные темы. Каждый диалог включает:
-
Фрагмент разговора, где бот отвечает на вопрос клиента.
-
Вспомогательную информацию, представляющую инструкцию для модели.
-
Эталонный ответ, с которым мы будем сравнивать ответы LLM.
Структура генеративного голосового робота
Помимо LLM, наш генеративный голосовой робот включает в себя несколько ключевых компонентов, которые обеспечивают его эффективность и адаптивность в реальных условиях. Давайте рассмотрим, как именно работает этот механизм.
- Дайлер: основа взаимодействия
Когда пользователь инициирует звонок, его речь передается в дайлер — сервис, который управляет взаимодействием между Dialog Manager и абонентом. Дайлер является центральным узлом, который перенаправляет звуковой поток на модули TTS (Text-to-Speech) и STT (Speech-to-Text) для последующей обработки.
- Модуль VAD: определение голосовой активности
Далее звук поступает в модуль VAD (Voice Activity Detection), который отвечает за определение голосовой активности. Когда VAD фиксирует, что пользователь начал говорить, он передает звук модели распознавания речи.
- STT: преобразование речи в текст
Модель STT преобразует речь в текст и передает его в блок Intent Recognition. Этот этап критически важен для дальнейшей обработки запроса пользователя.
- Intent Recognizer: распознавание намерений
Intent Recognizer — это сервис, который определяет ключевые намерения пользователя, такие как продолжение диалога, завершение разговора или бронирование. Хотя LLM также может выполнять эту задачу, использование Intent Recognizer разгружает промпт для LLM и ускоряет обработку запросов.
- Dialog Manager: управление диалогом
Полученный интент отправляется в Dialog Manager. На основе фразы абонента он формирует правила работы системы. Например, в зависимости от интента, Dialog Manager может запросить дополнительный контекст, такой как доступные слоты для встречи или инициировать действия по созданию или отмене бронирования.
- Генерация ответа
На основе собранного контекста Dialog Manager формирует набор команд для дайлера, включая выбор LLM и соответствующий промпт. Дайлер обрабатывает эти команды и переходит к блоку "Генерация ответа".
Для обеспечения высокой скорости ответа мы используем потоковый TTS — синтез ответа начинается с момента появления первого знака препинания. Синтезированный ответ передается обратно в дайлер, который отправляет его в телефонную сеть.
Заключение
Таким образом, генеративный голосовой робот представляет собой сложную систему, где каждый компонент играет важную роль в обеспечении эффективного и быстрого взаимодействия с пользователем. Понимание структуры этой системы помогает лучше оценить возможности автоматизации и повышения качества обслуживания клиентов.