Глава 7: Создание голосовых агентов
Давайте обсудим голосовых ботов. Обычно, когда мы думаем о чат-ботах для голоса, мы представляем умных помощников, таких как Google Assistant, Alexa или Siri. Но на самом деле есть еще один известный бизнес-сценарий, где вы можете использовать виртуальных агентов — ботов в контакт-центрах и телефонных линиях.
Поскольку Google Assistant и Dialogflow являются продуктами Google, неудивительно, что развертывание голосовых ботов в Google Assistant так просто.
Функция Dialogflow Phone Gateway предоставляет телефонный интерфейс для вашего агента. Это отлично подходит для создания простых интерактивных голосовых ответов, привязанных к сервисному номеру, таких как системы бронирования по телефону или простые информационные линии.
Пользователи, звонящие по номеру телефона, будут подключены к голосовому агенту Dialogflow. Разговор может вестись очень естественно через Speech to Text (STT) и Text to Speech (TTS) с человекоподобными голосами.
У Google Cloud есть решение под названием Contact Center AI. Это готовое решение для телефонных контакт-центров для использования искусственного интеллекта для автоматизации разговоров и помощи живым ассистентам в режиме реального времени. Опыт машинного обучения не требуется, так как Contact Center AI будет поставляться и включаться через известных партнеров по телефонии, таких как Genesys, Avaya, Mitel, Twilio, Cisco, Five9 и других. Он использует популярные компоненты Google Cloud, включая Dialogflow, Speech-to-Text и Text-to-Speech.
Эта глава будет включать все это, включая то, как улучшить ваших голосовых ботов.
Создание голосового ИИ для виртуального помощника, такого как Google Assistant
Начнем с простого в создании решения Voice AI, создавая Voice AI для Google Assistant. Оба являются продуктами Google, и они интегрированы из коробки при использовании Dialogflow. Чтобы это заработало, нужно просто включить сервис и использовать одну и ту же учетную запись пользователя Google для обоих сервисов. Как только он будет включен, ваш агент Dialogflow будет доступен Google Assistant как действие (приложение Google Assistant). Конечные пользователи могут вызвать действие с помощью слова пробуждения: Эй, Google, поговори с <имя-действия>. Под капотом он откроет вашего агента Dialogflow, позволяя Google Assistant обрабатывать Speech to Text и Text to Speech. Dialogflow будет использоваться для понимания естественного языка, сопоставления намерений, распознавания сущностей и управления контентом. См. диаграмму на Рисунке 7-1.
Рисунок 7-1. Пользователь взаимодействует с Google Assistant, и через Actions on Google Google Assistant подключается к агенту Dialogflow. Все работает из коробки.
- Сначала щелкните Интеграции ➤ Google Assistant ➤ Настройки интеграции. Откроется всплывающее окно; см. Рисунок 7-2. Нажмите кнопку Тест. Это откроет консоль Actions on Google (https://console.actions.google.com/). Обратите внимание; вы вошли в Actions on Google с той же учетной записью Google, что и в Dialogflow. Если это вызывает у вас проблемы, часто из-за наличия нескольких учетных записей Google, выйдите из всех учетных записей и попробуйте войти снова.
Рисунок 7-2. Настройка интеграции с Google Assistant
- Когда вы новичок в Actions on Google, вам нужно будет заполнить форму, чтобы согласиться с условиями предоставления услуг (см. Рисунок 7-3).
Рисунок 7-3. Когда вы новичок в Actions on Google, вам нужно заполнить эту форму
- Теперь вы находитесь в симуляторе. Убедитесь, что симулятор настроен на английский (США), выберите устройство (например, телефон) и нажмите Поговорить с моим тестовым приложением.
Действие поприветствует вас базовым намерением Dialogflow по умолчанию. Это означает, что настройка интеграции с Actions on Google сработала! См. Рисунок 7-4.
Расширенные сообщения
При создании действий для Google Assistant вы можете захотеть использовать конкретные расширенные сообщения, которые предлагает Actions on Google. Как только вы настроите интеграцию с Google Assistant в Dialogflow, вы заметите, что в блоке ответов ваших намерений появилась новая вкладка (Рисунок 7-5).
Рисунок 7-5. Пользовательские ответы Google Assistant
Если ее там нет, вы можете легко добавить эту вкладку в блок ответов, нажав вкладку +.
На вкладке Google Assistant есть три основные настройки:
- Вы можете выбрать не переопределять вкладку DEFAULT. Например, если текстовый ответ по умолчанию совпадает с текстовым ответом Google Assistant, вы можете включить первый переключатель.
- Кнопка Добавить ответы для добавления расширенных сообщений (пользовательских полезных нагрузок) к вашему агенту.
- Переключатель для установки намерения в конце разговора. В Google Assistant это означает, что вы выходите из области действия вашего действия. Например, вы можете создать намерение Прощание и включить этот переключатель.
Когда вы нажимаете кнопку Добавить ответы (Рисунок 7-6), вы можете выбрать один из следующих ответов с пользовательской полезной нагрузкой:
- Простой ответ: Простые ответы принимают форму пузырька чата визуально и используют Text to Speech (TTS) или язык разметки синтеза речи (SSML) для звука.
- Базовая карточка: Используйте базовые карточки в основном для отображения. Они предназначены для краткости, представления ключевой (или сводной) информации пользователям и позволяют пользователям узнать больше, если они выберут (используя веб-ссылку).
- Список: Список с одним выбором представляет пользователю вертикальный список из нескольких элементов и выбирает один. Выбор элемента из списка генерирует пользовательский запрос (пузырек чата), содержащий заголовок элемента списка.
- Предлагаемые фишки: Используйте предлагаемые фишки для продолжения или изменения разговора; они выглядят как маленькие кнопки.
- Карусельная карточка и Карусельная карточка просмотра: Карусель — это расширенный ответ, который позволяет пользователям прокручивать вертикально и выбирать плитку в коллекции. Dialogflow имеет две разные конфигурации для каруселей: Карусель и Карусель просмотра.
- Предложение ссылки: Ссылка на внешний веб-сайт.
- Медиаконтент: Медиа-ответы позволяют вашим Действиям воспроизводить аудиоконтент с длительностью воспроизведения дольше 240-секундного лимита SSML.
- Табличная карточка: Табличные карточки позволяют отображать табличные данные в вашем ответе (например, спортивные турнирные таблицы, результаты выборов и авиарейсы). Вы можете определить столбцы и строки (до 3 каждого), которые Assistant должен показать в вашей табличной карточке. Вы также можете указать дополнительные столбцы и строки вместе с их приоритезацией. Таблицы отличаются от вертикальных списков, потому что таблицы отображают статические данные и не являются интерактивными, как элементы списка.
- Пользовательская полезная нагрузка: Вы можете написать свой JSON в формате, который ожидает Actions on Google, например, когда вы хотите больше кнопок или разделов в карточке.
Рисунок 7-6. Нажмите кнопку Добавить ответы, чтобы показать всплывающее окно для выбора между различными пользовательскими ответами Google Assistant
Выполнение и веб-перехватчики
Для разработчиков Actions on Google имеет собственную клиентскую библиотеку; она доступна в Node Package Manager (NPM) под именем actions-on-google-nodejs.
Эта клиентская библиотека упрощает создание Действий для Google Assistant и поддерживает выполнение Dialogflow, Actions SDK и Smart Home. Вы можете развернуть код на своем собственном сервере или использовать встроенный редактор Dialogflow. Для получения дополнительной информации о выполнениях и веб-перехватчиках см. Главу 10. Листинг 7-1 показывает пример веб-перехватчика Actions on Google:
Листинг 7-1. Пример веб-перехватчика Actions on Google
const {
dialogflow,
Image
} = require('actions-on-google')
// Создать экземпляр приложения
const app = dialogflow();
// Зарегистрировать обработчики для намерений Dialogflow
app.intent('Default Welcome Intent', conv => {
conv.ask('Hi, how is it going?')
conv.ask(`Here's a picture of a cat`)
conv.ask(new Image({
url: 'https://developers.google.com/web/fundamentals/accessibility/semantics-builtin/imgs/160204193356-01-cat-500.jpg',
alt: 'A cat',
}));
});
// Намерение в Dialogflow под названием `Goodbye`, которое закрывает действие
app.intent('Goodbye', conv => {
conv.close('See you later!')
});
В этом примере кода вы видите, что Dialogflow будет загружен из библиотеки actions-on-google. Как только у вас есть экземпляр приложения Dialogflow, вы можете зарегистрировать обработчики, которые слушают намерения, вызванные в Dialogflow.
С помощью объекта conv() вы можете возвращать контент. Это может быть текст, который будет синтезирован в речь, но он также может содержать расширенные ответы пользовательского интерфейса, такие как Изображения, Базовые карточки, Списки и так далее.
Библиотека actions-on-google содержит гораздо больше функций и вспомогательных классов, например, для запроса местоположения, информации о пользователе, входа в учетную запись, обнаружения экрана и так далее.
Вызов вашего действия в Google Assistant с явным и неявным вызовом
Явный вызов происходит, когда пользователь говорит Google Assistant использовать ваше Действие по имени, например, Эй, Google, поговори с (фраза-триггер) → <мое-имя-действия> (имя вызова, указанное разработчиком) → сделать x y z (фраза вызова, указанная разработчиком). См. Рисунок 7-7. При желании пользователь может включить фразу вызова в конце своего вызова, которая напрямую приведет его к запрашиваемой функции.
Рисунок 7-7. Явные вызовы Google Assistant
Также возможно выбрать одно или несколько намерений неявного вызова. Таким образом пользователи могут вызвать ваше приложение, не указывая его имени. Например, если ваше приложение может находить концерты поблизости, пользователи могут сказать: «Окей, Google, я хочу найти концерты рядом со мной». Google Assistant пытается сопоставить запрос пользователя с подходящим выполнением, таким как Действие, результат поиска или мобильное приложение, а затем представляет рекомендации пользователю. Чтобы найти совпадающие Действия, Google использует сигналы, такие как пользователи, говорящие Assistant сделать что-то похожее на фразу вызова одного из ваших настроенных намерений, или когда пользователь находится в контексте, где ваше Действие было бы уместно.
Это взаимодействие происходит следующим образом:
- Пользователь просит Assistant выполнить задачу.
- Алгоритм рекомендации определяет, что ваше Действие может выполнить задачу пользователя.
- Assistant рекомендует ваше Действие пользователю.
Чтобы настроить явные и неявные намерения, щелкните Dialogflow на ссылке Интеграции ➤ Google Assistant ➤ Настройки интеграции (Рисунок 7-8). И выберите намерения в обоих выпадающих списках обнаружения.
Рисунок 7-8. Настройка вызовов в Dialogflow
Отправка действия через Actions on Google
У Google есть фреймворк, который включает в себя набор инструментов пользовательского интерфейса, SDK, симулятор и инструменты для развертывания ваших действий в Google Assistant. Он называется Actions on Google.
Вы можете открыть консоль Actions с помощью https://console.actions.google.com/.
Когда вы вошли в систему с той же учетной записью Gmail/Google в Dialogflow, Actions on Google и на вашем устройстве Google Assistant, тогда возможно протестировать ваше приложение на физическом устройстве из коробки.
Перед отправкой вашего Действия на утверждение мы рекомендуем вам пройти предстартовый контрольный список. Использование контрольного списка выявляет многие проблемы, которые мы видим в процессе утверждения, и улучшает шансы вашего проекта на утверждение. Каждый последующий раз, когда вы обновляете пакет Действия после отправки, он должен пройти еще один цикл утверждения.
Совет: С Dialogflow ES возможно создавать разные версии вашего агента, чтобы создать неизменяемую версию вашего агента Dialogflow перед отправкой Действия. Этот подход дает вам возможность создавать несколько версий вашего агента Dialogflow, публиковать их в отдельные среды и откатываться к предыдущим версиям при необходимости.
Вы можете развернуть свое действие из вкладки Развертывание консоли Actions on Google.
Создание действия с помощью Actions SDK
Девяносто процентов всех действий, доступных в Google Assistant, на самом деле созданы с помощью Dialogflow. Причина этого проста; оба являются продуктами Google, и публикация действия через вкладку интеграции Dialogflow так проста. Зачем вам выбирать другой способ?
Есть еще один способ развернуть ваши действия, и это через Actions SDK. Это намного сложнее, так как вам нужно будет создать интеграцию самостоятельно, но есть некоторые преимущества в этом. Вместо того чтобы позволить Actions on Google разговаривать с Dialogflow из коробки, вы можете захотеть, чтобы Actions on Google подключался к вашему собственному бэкэнд-слою, где бэкэнд-слой подключается к Dialogflow; см. Рисунок 7-9.
Рисунок 7-9. Actions on Google подключается к вашей кодовой базе, а ваша кодовая база подключается к агенту Dialogflow для обнаружения намерений
Предприятия, создающие большие платформы клиентского опыта, которые поддерживают множество платформ в качестве каналов, могут захотеть использовать Dialogflow в качестве слоя обнаружения намерений NLU, который будет написан и поддерживаться в одном месте; все каналы, включая Actions on Google, будут промежуточным ПО. Единственная цель этого промежуточного ПО — захватить ввод пользователя (введенный текст или устную речь, преобразованную в текст), отправить текст или аудио ответа и представить его в правильном формате. Например, ваш синтезированный голос не должен содержать гиперссылок, и, возможно, вы также захотите поддерживать виджеты пользовательского интерфейса Google Assistant, такие как карточки. Архитектура будет выглядеть как на Рисунке 7-10.
Рисунок 7-10. Actions on Google подключается к вашей кодовой базе, которая имеет слой промежуточного ПО для обработки Actions SDK и возврата SSML или представлений Assistant, и у нее есть скрипт, который подключается к агенту Dialogflow для сопоставления намерений. Другие каналы могут повторно использовать эту последнюю часть
Совет: Если вы используете Dialogflow CX вместо Dialogflow Essentials, решение Actions SDK, на момент написания этой статьи, является единственным способом перенести ваши разговоры в Google Assistant.
Используя Actions SDK, вам нужно будет предоставить собственное обнаружение NLU/намерений. Когда вы выбираете Dialogflow (Essentials или CX), вы выигрываете от быстрого соединения Google backbone, так как и Actions on Google, и Dialogflow являются продуктами Google, использующими сети Google, и, конечно же, отличного NLU Google, который также поддерживает Google Assistant.
Использование решения Actions SDK
Чтобы создать эту интеграцию, вам нужно будет использовать библиотеку Actions SDK npm и API Dialogflow. Листинг 7-2 покажет вам пример того, как это можно построить.
Листинг 7-2. Реализация кода
// 1)
const { actionssdk } = require('actions-on-google');
const dialogflow = require('@google-cloud/dialogflow');
const uuid = require('uuid');
// 2)
const app = actionssdk();
// 3)
app.intent('actions.intent.MAIN', async (conv) => {
// 4)
var queryInput = {
event: {
name: 'WELCOME',
languageCode: 'en'
}
};
var response = await dialogflowDetection(queryInput);
// 5)
conv.ask(response.response.queryResult.fulfillmentText);
})
app.intent('actions.intent.TEXT', (conv, input) => {
// 6)
var queryInput = {
text: {
text: input,
languageCode: 'en'
}
};
var response = await dialogflowDetection(queryInput);
conv.ask(response.queryResult.fulfillmentText);
});
async function dialogflowDetection(qInput){ // Pass qInput here
// 7)
const sessionId = uuid.v4();
const sessionClient = new dialogflow.SessionsClient();
const sessionPath = sessionClient.projectAgentSessionPath(projectId, sessionId); // Use projectId from scope
// 8)
const request = {
session: sessionPath, // Use sessionPath defined above
queryInput: qInput, // Use the passed qInput
queryParams: null
};
// 9)
const [response] = await sessionClient.detectIntent(request); // Use sessionClient defined above
return response;
}
- Импортируйте библиотеки.
- Создайте экземпляр приложения Google Assistant.
- Зарегистрируйте обработчики для намерений Actions SDK.
- actions.intent.MAIN будет вызвано при запуске Действия. Мы получим намерение приветствия по умолчанию, передав имя события «WELCOME».
- Пусть Google Assistant произнесет fulfillmentText.
- Мы будем использовать actions.intent.TEXT как универсальный обработчик для передачи каждого входящего пользовательского ввода (устного текста, преобразованного Google Assistant Speech to Text, или письменного текста) как текстового обнаружения намерения в Dialogflow.
- Чтобы создать клиент сеанса Dialogflow и путь сеанса, нам понадобится уникальный идентификатор и идентификатор проекта Dialogflow. Шаги 7–9, использование SDK Dialogflow, будут дополнительно объяснены в Главах 10, 11 и 12.
- Это запрос, который будет сформирован либо с текстовым объектом, либо с объектом события.
- Теперь мы вызываем метод detectIntent из sessionClient и передаем запрос. Он вернет обещание; как только обещание будет выполнено, он вернет ответ (текст выполнения).
Actions SDK требует файл пакета действий (action.json), который является своего рода файлом манифеста JSON, описывающим намерения для «прослушивания» и сообщающим Google Assistant, что делать, как только такое намерение будет вызвано. См. Листинг 7-3.
Листинг 7-3. Файл action.json сопоставляет намерения с выполнением
{
"actions": [
{
"description": "Default Welcome Intent",
"name": "MAIN",
"fulfillment": {
"conversationName": "welcome"
},
"intent": {
"name": "actions.intent.MAIN",
"trigger": {
"queryPatterns":["talk to CCAIDemo"]
}
}
},
{
"description": "Dialogflow Intents",
"name": "TEXT",
"fulfillment": {
"conversationName": "dialogflow_intent"
},
"intent": {
"name": "actions.intent.TEXT"
}
}
],
"conversations": {
"welcome": {
"name": "welcome",
"url": "https://www.leeboonstra.dev/webhook/"
},
"dialogflow_intent": {
"name": "dialogflow_intent",
"url": "https://www.leeboonstra.dev/webhook/"
}
},
"locale": "en"
}
Каждый проект Actions должен иметь намерение приветствия, которое действует как точка входа для пользователей для начала разговоров. Намерение приветствия вызывается, когда пользователи явно вызывают Действие, произнося его имя (например, «Привет, Google, поговори с агентом видеоигр»). Это намерение приветствия идентифицируется именем намерения actions.intent.MAIN.
Вы можете создать дополнительные записи в вашем пакете Действия с намерениями, которые вы определяете сами. Однако для проектов Dialogflow вам понадобится намерение actions.intent.TEXT, которое будет работать как универсальный обработчик. Все устные или введенные вводы отправляются как намерения actions.intent.TEXT. Обратите внимание на пункт 6 в Листинге 7-2 и блок actions.intent.TEXT в Листинге 7-3. Вы можете просто взять необработанный текст и переслать его на свой сервер выполнения. Оттуда вы можете обработать текст с помощью Dialogflow и создать ответ для отправки обратно в Actions on Google.
Вы можете практически игнорировать все остальное в Actions SDK. Однако есть и другие приятные функции, такие как триггеры. Это позволяет пользователям вызывать определенную функциональность, произнося имя Действия вместе с намерением (например, «Привет, Google, поговори с ExampleAction, чтобы найти туфли»).
В следующем листинге, Листинг 7-4, обратите внимание на блок триггера. queryPatterns работает как список адаптации речи с подсказками для смещения модели Speech to Text, чтобы убедиться, что правильные параметры, отмеченные в блоке параметров, отправляются на ваш слой обнаружения NLU. Без этих подсказок модель STT могла бы услышать что-то вроде «купить синие потные туфли» вместо «купить синие замшевые туфли». Ваш слой NLU не поймет «потные туфли».
Листинг 7-4. Смещение модели STT в файле action.json
{
"description": "Direct access",
"name": "BUY",
"fulfillment": {
"conversationName": "ExampleAction"
},
"intent": {
"name": "com.example.ExampleAction.BUY",
"parameters": [
{
"name": "color",
"type": "org.schema.type.Color"
}
],
"trigger": {
"queryPatterns": [
"find some $org.schema.type.Color:color sneakers",
"buy some blue suede shoes",
"get running shoes"
]
}
}
}
Блок разговоров работает как маршрутизатор; ему потребуется доступ к общедоступным URL-адресам HTTPS для получения выполнений. Ваше бэкэнд-выполнение получает запросы от Assistant, обрабатывает запрос и отвечает. Вы можете разместить этот бэкэнд-код где угодно — локально или в Google Cloud. Глава 10 обсудит различные вычислительные решения, если вы слушаете POST-запросы.
Если вы создаете бэкэнд-сервер с express, ваш маршрут POST будет выглядеть так:
var assistant = actionssdk();
expressApp.post('/webhook/', assistant);
Если вы хотите запустить его локально, вам понадобится инструмент, такой как ngrok, для создания безопасного туннеля. Это потому, что Google Assistant работает в облаке, как и Dialogflow. Ваше выполнение должно быть доступно через нелокальный URL по HTTPS. Глава 10 подробнее обсуждает ngrok.
Actions on Google также предлагает инструмент командной строки под названием gactions. С помощью команды gactions init вы можете сгенерировать шаблонный код, аналогичный Листингу 7-3.
Развертывание вашего действия
Чтобы загрузить ваш пакет Действия, вам понадобится инструмент командной строки gactions и запустить следующую команду, заменив PACKAGE_FILE и PROJECT_ID соответствующими значениями для вашего проекта:
gactions update --action_package PACKAGE_FILE --project PROJECT_ID
Создание колл-бота с помощью телефонного шлюза
Телефонный шлюз Dialogflow ES — это простой способ настроить входящего голосового агента для телефонии. Вы получите бесплатный номер; когда вы позвоните по этому номеру, агент Dialogflow поговорит с вами. Сценарий использования больше подходит для простых телефонных ботов (например, системы бронирования) или для целей тестирования. Если вы хотите интегрировать роботов в свой IVR/контакт-центр или уже имеете существующий контакт-центр (партнер по телефонии), включение Dialogflow через Contact Center AI (как описано в следующем разделе) будет лучшим решением для вас.
При использовании пробной версии Dialogflow у вас не будет доступа к бесплатному номеру. И у вас будут ограниченные квоты, такие как 3 общие минуты телефонных разговоров в минуту, 30 минут телефонных разговоров в день, 500 минут телефонных разговоров в месяц, а номер телефона будет зарезервирован только на 30 дней. Корпоративные уровни будут включать 100 минут звонков в минуту. Другими словами, пробная версия Dialogflow отлично подходит для тестирования телефонного шлюза, но вы хотели бы перейти на платный корпоративный уровень, чтобы он работал в производственной среде. Когда вы получаете сигнал занятости или обрыв звонка во время телефонных звонков, это будет означать, что вы превысили свою квоту.
Давайте включим телефонный шлюз.
- На момент написания эта функция находится в бета-версии. Если вы не можете найти вкладку речи на панели настроек, вам нужно будет сначала включить бета-функции (см. Рисунок 7-11). Это можно найти на вкладке Настройки ➤ Общие.
Рисунок 7-11. Включить бета-функции и API на панели настроек
- Щелкните Интеграции.
- Щелкните Телефонный шлюз телефонии (Рисунок 7-12).
Рисунок 7-12. Включить телефонный шлюз Dialogflow
- Появится всплывающее окно; здесь вы можете настроить телефонный шлюз (см. Рисунок 7-13).
- Возможно выбрать язык и код страны.
Примечание: Хотя эта функция все еще находится в бета-версии, единственными языками и телефонными номерами, которые в настоящее время поддерживаются для интеграции телефонного шлюза, являются английский США/испанский США, +1 США.
- При желании вы можете указать американский код города, например, 516, код города Нью-Йорка. Как только вы начнете печатать, появится поле выбора, позволяющее выбрать коды городов. Вы также можете запросить номер телефона с кодом города 833, который является бесплатным номером. Обратите внимание, что бесплатные номера имеют более высокую цену.
- Нажмите Далее.
- Отсюда вы можете выбрать из некоторых предварительно выбранных телефонных номеров.
- В настоящее время вы можете выбрать телефонный номер, размещенный Google. В будущем вы также сможете перенести существующий телефонный номер.
- Нажмите Создать (Рисунок 7-14).
Теперь телефонный номер подключен к вашему голосовому боту. Кроме того, вы можете выбрать среду. Теперь вы можете позвонить по номеру и следовать голосовым подсказкам, предоставляемым вашими намерениями Dialogflow. После этого вы также увидите историю звонков и аналитику на вкладках История и Аналитика.
Сообщения ответа для телефонного шлюза
В консоли Dialogflow вы можете настроить голосовые ответы для использования расширенных (аудио) сообщений ответа через блок ответов в каждом намерении. Вы можете нажать кнопку +, чтобы включить телефонный шлюз Dialogflow. (См. Рисунок 7-15.)
По умолчанию он использует ответы с вкладки По умолчанию.
Когда вы нажимаете кнопку Добавить ответы, есть выбор из трех различных расширенных сообщений. Обратите внимание на Рисунок 7-16.
Рисунок 7-16. Пользовательские ответы телефонного шлюза Dialogflow
- Воспроизвести аудио: Возможно воспроизвести предоставленный аудиофайл. Этот аудиофайл должен быть размещен в Google Cloud Storage. Вы можете ввести URI Google Cloud Storage в этом поле, например, gs://bucket/object. Объект должен содержать один канал (моно) линейного аудио PCM (2 байта/сэмпл) с частотой 8 кГц.
- Синтезировать речь: Вместо использования текста с вкладки По умолчанию вы можете ввести текст на вкладке Синтезировать речь. Таким образом, вы можете вернуть другой устный голос, чем письменный текст. Иногда ваши устные диалоги могут отличаться от письменного текста. Вы также можете использовать этот блок для написания SSML (языка разметки синтеза речи) в ваших ответах. Вы прочитаете больше в этой главе об этой функции для настройки голосов TTS, чтобы они звучали более естественно.
- Перевести звонок: Возможно перевести звонок на другой (во время бета-тестирования, американский) номер телефона, например, чтобы передать его человеку. Когда этот ответ будет заполнен, он переведет звонок, как только намерение будет обнаружено.
Рисунок 7-17 показывает, как это будет выглядеть, как только вы включите их все.
Рисунок 7-17. Примеры пользовательских ответов телефонного шлюза Dialogflow
В блоке телефонного шлюза Dialogflow также есть переключатель для установки намерения в конце разговора. Как только намерение будет обнаружено, оно может завершить звонок.
Создание ботов для контакт-центров с помощью Contact Center AI
Различные исследования показали, что чат-боты могут сократить бизнес-издержки на миллиарды в год. Контакт-центры — это огромная статья расходов, поэтому в этой области можно многое выиграть.
Когда опыт звонка клиентов приятен, клиенты готовы платить премиальную цену, оставаться лояльными к вашему сервису и делиться хорошим опытом. Клиенты ожидают отличного, гибкого и личного опыта. 60% клиентов хотят более легкого доступа к решениям самообслуживания, 64% желают получать помощь в режиме реального времени, а 75% предпочитают личные взаимодействия, не обязательно с людьми, чтобы разговор мог быть с ботом.*
*Источник: Zendesk, Statista, Strategy Analytics, HBR, Ovum, CISCO VNI
Однако реальность такова, что часто, когда вы звоните по сервисному номеру, вы столкнетесь с долгим временем ожидания, временем удержания, неограниченными переводами звонков, сложными для навигации IVR, доступностью и неадекватной информацией. Автоматизируя эти разговоры, можно быть доступным 24/7, не иметь больше ожидания или времени удержания и предоставлять однородные ответы.
Google Cloud Contact Center AI использует искусственный интеллект, чтобы сделать опыт звонка по сервисному номеру лучше. Это лучше для клиента и лучше для агента. С помощью Contact Center AI (CCAI) боты могут понимать и отвечать на ваши вопросы (Виртуальный агент) и могут слушать и давать советы на экране живому агенту (Agent Assist). Живые агенты всегда предоставят правильный ответ на вопрос, и он может автоматически предварительно заполнять формы. Бизнесы могут получать аналитику по этим разговорам через компонент Insights. Рисунок 7-18 показывает архитектуру.
Рисунок 7-18. Архитектура Contact Center AI
Обратите внимание на Рисунок 7-19 и посмотрите, как это работает:
- Contact Center AI интегрируется с вашей текущей телефонной системой IVR. Пользователи могут позвонить по сервисному номеру. Партнеры по телефонии, такие как Avaya, Genesys, Cisco, Mitel и Twilio, реализовали компоненты Google Cloud для Speech-to-Text, Text-to-Speech и Dialogflow поверх своей собственной инфраструктуры для обработки звонка. Он использует специальные функции IVR, такие как вмешательство (barge-in) (прерывание потока чат-бота), обнаружение тишины (как долго мы ждем, пока не поймем, что ничего не было сказано), распознавание тона DTMF (разбор тонов в числовые сущности) и асинхронное выполнение (позволяет выполнять длительные операции на бэкэнде клиента для продления 5-секундного времени ответа выполнения).
- Робот поднимет трубку; он может понять вашу речь, даже на телефонном качестве (8 кГц моно), с фоновыми шумами и прерываниями друг от друга.
- Он обнаружит намерения в Dialogflow, запросит информацию из базы знаний или извлечет данные из систем через (асинхронные) веб-перехватчики выполнения.
- Ответы будут произнесены через Text-to-Speech. Он использует модели WaveNet, чтобы голоса звучали по-человечески.
- Когда бот не знает правильного ответа, он может передать разговор живому агенту-человеку. Бот все равно будет слушать, чтобы предоставлять предложения на экране. Эта функция называется Agent Assist; она поможет агентам сократить время звонка и ожидания.
- Это решение покажет транскрипции, моделирование агента и аналитику, чтобы бизнесы могли получать инсайты и учиться на прошлых разговорах.
Рисунок 7-19. Объяснение архитектуры Contact Center AI
Если это звучит интересно для вас, либо свяжитесь с вашим текущим поставщиком телефонии, либо используйте интеграции телефонии одним щелчком мыши из Dialogflow. Даже если это планы на будущее, уже сейчас стоит начать. Вы можете создавать многоканальных чат-ботов, которые включают все путешествия клиентов (входящие и исходящие), телефонные звонки, гибридные чаты, социальные сети или умную помощь.
Включение Contact Center AI
Предприятия с существующим оборудованием телефонии/IVR могут связаться с поставщиками телефонии, чтобы включить Contact Center AI. Возможно передать идентификатор проекта Dialogflow для использования текущего агента Dialogflow в их контакт-центре.
Предприятия или компании, новые в этой технологии, могут либо связаться с выбранным поставщиком IVR, либо использовать интеграции телефонии одним щелчком мыши (Рисунок 7-20), доступные на странице интеграций Dialogflow. Это позволяет вам следовать различным мастерам Avaya, SignalWire, Voximplant, AudioCodes, Genesys Cloud или Twilio.
Google Cloud предоставляет документацию по использованию API Agent Assistant и Insights, если вы хотите интегрировать эти части в свои собственные приложения для сотрудников.
Рисунок 7-20. Различные интеграции телефонии на выбор
Улучшение качества Speech to Text
Когда мы говорим о моделях машинного обучения речи, модели Speech to Text обучаются на больших наборах данных. На основе аудиопримеров, которые он слышал раньше, он пытается сопоставить текстовые фразы. Сказав это, неправильное распознавание речи сложно не только для людей; это может быть сложно и для машин. Однако мы можем сместить модель машинного обучения, предоставляя подсказки. В Dialogflow при создании голосовых агентов это на самом деле легко; вам просто нужно включить переключатель автоматической адаптации речи, который можно найти на вкладке Настройки ➤ Речь (Рисунок 7-21). Намерения и (помеченные) сущности будут использоваться в качестве подсказок.
Рисунок 7-21. Настройки речи
На момент написания эта функция находится в бета-версии. Если вы не можете найти вкладку речи на панели настроек, вам нужно будет сначала включить бета-функции. Это можно найти на вкладке Настройки ➤ Общие.
Как только вы включите автоматическую адаптацию речи, вы можете создавать своих голосовых агентов Dialogflow таким образом, чтобы использовать ее преимущества. Вы можете протестировать это в симуляторе, используя свой микрофон. Если вы разработчик, я бы предложил использовать мой пример распознавания речи Dialogflow, потому что он даст вам доступ к дополнительной отладочной информации.
Для достижения наилучших результатов вам также потребуется включить расширенные модели: https://cloud.google.com/dialogflow/docs/data-logging.
Примечание: Автоматическая адаптация речи не работает для Actions on Google (Google Assistant). С фреймворком AoG распознавание речи выполняется Actions on Google перед отправкой данных в Dialogflow.
Следующие примеры показывают, как можно улучшить распознавание речи с помощью определенных изменений в вашем агенте.
Подсказки пользовательских сущностей
Если вы определяете сущности для названий продуктов или услуг, предлагаемых вашей компанией, и конечный пользователь упоминает эти термины в высказывании, они с большей вероятностью будут распознаны. Например, без включенной адаптации речи и без наличия пользовательской сущности для редкой игровой консоли Ouya, он бы понял «О да» вместо Ouya.
Подсказки системных сущностей
Предыдущий пример использует пользовательские сущности. Но он будет работать аналогично с системными сущностями, такими как @sys.number. Подумайте о речевых выражениях пользователя, когда пользователь говорит «два»; это может быть распознано как «to», «too», «2» или «two». А «от 4 до 5» может быть понято как «425», «четыре четыре два пять» и так далее. Когда включена функция адаптации речи, системные сущности будут использоваться в качестве подсказок.
Подсказки намерений
Если вы определяете обучающие фразы с фразой типа «Мы едем на Ибицу», похожее по звучанию высказывание пользователя надежно распознается как «Мы едем на Ибицу», а не «Мы собираемся съесть пиццу».
Переопределение речевых подсказок в вашем коде
Вы также можете настроить адаптацию речи в своем коде. Это удобно, когда вы реализуете интеграции через API. Предоставление явных speech_contexts в inputAudioConfig переопределит неявные подсказки контекста речи, сгенерированные автоматической адаптацией речи для конфигурации входного аудио (речь-в-текст) в консоли Dialogflow. speechContexts принимает объект с массивом фраз[], содержащих слова и фразы, которые распознаватель речи должен распознавать с большей вероятностью.
Объект speechContexts также может принимать необязательное свойство boost (float). Усиление для этого контекста по сравнению с другими контекстами:
- Если усиление положительное, Dialogflow увеличит вероятность того, что фразы в этом контексте будут распознаны по сравнению с похоже звучащими фразами.
- Если усиление не указано или неположительное, Dialogflow не будет применять никакого усиления.
Dialogflow рекомендует использовать усиления в диапазоне (0, 20) и найти значение, которое подходит для вашего сценария использования, с помощью бинарного поиска.
Вот пример. Рассмотрим следующий поток чата:
«Когда я получу уведомление, когда PlayStation 5 появится в вашем магазине?»
> Я могу отправить его вам по электронной почте или текстовым сообщением.
«Почта»
Чтобы убедиться, что агент понимает «Mail», а не «Male» или «Nail», я предоставил speechContexts в коде Листинга 7-5.
Листинг 7-5. Смещение речевой модели с помощью speechContexts
const uuid = require('uuid');
const df = require('dialogflow').v2beta1;
const sessionId = uuid.v4();
const sessionClient = new df.SessionsClient();
const sessionPath = sessionClient.sessionPath(projectId, sessionId); // Assume projectId is defined
let request = {
session: sessionPath,
queryInput: {
audioConfig: {
sampleRateHertz: 16000,
encoding: 'AUDIO_ENCODING_LINEAR_16',
languageCode: 'en-US',
speechContexts: [
{
phrases: [
'mail',
'email'
],
boost: 20.0
}
]
},
// Assuming singleUtterance is defined elsewhere, e.g., true or false
// singleUtterance: singleUtterance
}
}
// Assuming 'audio' contains the audio buffer
// request.inputAudio = audio;
// const responses = await sessionClient.detectIntent(request);
Совет: На что смещать? Вы можете отдать предпочтение модели речи Dialogflow для сильного контекста или слабых примеров контекста.
Сценарии использования сильного контекста — это, например, когда голос используется в системе IVR/телефонии, чтобы убедиться, что определенные ожидаемые «потоки» или общие команды будут работать.
История пользователя или важные именованные сущности также могут быть подходящими сценариями использования. Например, когда поток запрашивает номер телефона, убедитесь, что ваш уклон для чисел.
Сценарии использования слабого контекста — это использование для опечаток. Вы можете захотеть исправить нечастые, но важные именованные сущности, которые часто неправильно понимаются моделью STT.
Адаптация речи будет работать для всех языков Dialogflow, которые поддерживают голос.
Точная настройка вывода Text to Speech голосовых ботов с помощью SSML
Вывод Text to Speech (TTS) голосовых ботов, голосовых помощников и колл-ботов (ботов в контакт-центрах) можно настроить так, чтобы он звучал более естественно. Мы можем использовать для этого SSML, что означает Speech Synthesis Markup Language (язык разметки синтеза речи). Это язык разметки, такой же, как HTML (HyperText Markup Language) для веб-сайтов. В HTML вы бы поместили все теги разметки в тег HTML-документа; с SSML вы поместите все специфичные теги SSML для создания пауз или ударений в тег
SSML — это язык разметки на основе XML для приложений синтеза речи. Это рекомендация рабочей группы W3C по голосовым браузерам.
Когда у вас включен Автоматический Text to Speech в настройках Dialogflow, вы можете начать писать теги SSML на вкладках ответов вашего намерения.
На Рисунке 7-22 вы можете видеть, как вкладка По умолчанию возвращает SSML в качестве ответа.
Рисунок 7-22. Написание кода SSML на вкладке DEFAULT
Некоторые интеграции, такие как телефонный шлюз Dialogflow или Google Assistant, предоставляют свои собственные поля ответа для ввода текстовых и SSML версий ответов. Вы можете видеть, как это работает для Google Assistant на Рисунке 7-23.
Рисунок 7-23. Написание кода SSML на вкладке Google Assistant путем настройки аудиовыхода
Внимание: Будьте осторожны при написании кода SSML на вкладке Ответы по умолчанию. Хотя это отлично работает для одноканальных интеграций, это может быть неидеально для кросс-канальных агентов, где вам придется поддерживать как текст, так и голос в качестве решений. Тогда текстовая версия будет включать теги SSML, что будет несколько странно.
Лучший подход — использовать вкладки Ответа интеграции, такие как вкладки Google Assistant или Телефонного шлюза Dialogflow, чтобы предоставить устную версию вашего ответа, когда ваша реализация недоступна как готовая интеграция. Например, вы интегрируете голос в веб-сайт. Вы также можете различать SSML и текстовую версию через код выполнения.
Дизайн UX для голосовых диалогов имеет значение!
Прежде чем я продолжу, позвольте мне рассказать вам забавную историю не по теме. Каждый год мы с друзьями организуем турнир по боулингу. Вы можете привести других друзей, так что у нас собирается большая компания. Это социальное мероприятие, но вы можете выиграть призы. Однажды кто-то привел своего друга, который явился в полном боулинговом снаряжении. На нем была профессиональная рубашка для боулинга, перчатки, и он даже принес свой собственный счастливый шар для боулинга. Мы все смотрели на него снизу вверх; «вау, он, должно быть, профессиональный игрок в боулинг!» Однако, как только все игры закончились и мы объявили победителя, он не был в топ-3. Фактически, он занимал одно из последних мест.
Так что мораль моей истории: Мы можем использовать первоклассные инструменты Google для автоматизации разговоров, но если мы не напишем отличный диалог, который лучше всего подходит для соответствующего голосового канала, вы не предоставите своим пользователям хороший пользовательский опыт. К сожалению, когда пользовательский опыт недостаточно хорош, ваши пользователи не вернутся.
Я начинаю этот раздел с этой темы, потому что я видел слишком много реализаций голосового чата, где чат-боты, изначально созданные для веба (текстовый интерфейс), напрямую передаются в вывод Text to Speech Google без переписывания диалога для его канала. При таком подходе вот некоторые примеры того, что может произойти:
- Длинные истории, когда говорит бот: На экране текст может быть длинным и содержать несколько абзацев. Вы можете пропустить части, которые вас не интересуют. Но слушать бота, говорящего слишком долго, не сделает ваших пользователей счастливыми.
- Отсутствие уточняющих вопросов: Замечательно включать вопросы из базы знаний FAQ в ваши голосовые чаты. Обычно на веб-интерфейсах это заканчивается предоставлением ответа на вопрос. По телефону вы привыкли задавать вопросы и обмениваться репликами. «Чем еще я могу вам помочь?» Было бы странно, если бы человек на другом конце внезапно замолчал.
- Гиперссылки, таблицы, изображения, аббревиатуры и так далее: На экране вы можете сослаться на изображение или щелкнуть ссылку. Вы не можете сделать это на устройстве без экрана.
- Коды ошибок: Слышать Ошибку 404 — это не лучший опыт и не имеет смысла. В разговорах нет ошибок. Ваши пользователи повысят голос и повторят тот же ответ, который не сработает.
Итак, имея это в виду, давайте посмотрим на лучшие практики для голоса:
- Пишите компактные диалоги, которые легко понять вашей аудитории.
- Всегда заканчивайте вопросом, чтобы направить разговор и заставить его продолжаться.
- Не используйте гиперссылки, таблицы, изображения, аббревиатуры. Вы могли бы сослаться на веб-сайт, когда данные табличные, вернуть лучшее совпадение и спросить, хочет ли пользователь услышать альтернативные варианты.
- Не сокращайте слова, а упоминайте полное название.
- Когда что-то идет не так, лучше предоставить резервный диалог, который все поймут. Помогите пользователям быть успешными; направьте их, чтобы они точно сказали то, что вы хотели бы услышать в качестве ответа. Например, если вы предоставляете варианты, не спрашивайте «Хотите A или B?» — потому что тогда пользователь может ответить «да».
- Вместо этого спросите: «У меня есть A и B. Какой вы предпочитаете?»
- Начните с приветственного сообщения, объясните, что вы виртуальный агент, и объясните, на какие типы вопросов виртуальный агент будет отвечать. Например, «Привет, я виртуальный агент video games dot com. Я могу рассказать вам, какие релизы игр скоро появятся, и вы можете приобрести видеоигры. Чем я могу помочь?» А не: «Доброе утро, я Ли. Что бы вы хотели узнать?» С последним примером вы рискуете тем, что ваши пользователи задают вопросы, на которые виртуальный агент не был обучен. Пользователь мог бы спросить: «В каких городах рядом со мной есть аркадные залы?» Ваш чат-бот вернет резервный ответ. Пользователь мог бы задать вопрос по-другому, но он все равно не будет знать ответа. Это создаст впечатление, что ваш чат-бот ничего не знает. Он знает; у него просто нет этого конкретного потока.
- Это также означает, что вы хотели бы собирать аналитику о том, что спрашивают ваши пользователи, чтобы реализовать эти потоки, предоставляя эти обучающие данные. Ваш чат-бот со временем станет умнее. Это также означает, что вы можете выйти в производство со своим виртуальным агентом как можно скорее и продолжать улучшать опыт, учась до тех пор, пока вы устанавливаете свои границы.
- Создайте персону для вашего виртуального агента. Это лицо, с которым разговаривают ваши клиенты. Так что вы можете подумать о стиле, поле, как будет звучать голос, тоне голоса, какие слова и фразы вы используете и так далее. Вы можете представить, что виртуальный агент видеоигр может быть нацелен на молодежь и молодых взрослых. Для пожилых людей у вас может быть другой выбор слов или стиль.
- Используйте SSML для изменения интонации ваших предложений, чтобы ваши голоса звучали более естественно.
Голоса Text to Speech
Dialogflow и Google Assistant используют голоса WaveNet, чтобы голоса звучали по-человечески и менее роботизированно.
При создании виртуальных агентов для IoT, веб-страниц или контакт-центров доступен широкий выбор пользовательских голосов для выбора в Dialogflow. При создании агентов для Google Assistant он будет использовать синтезатор Text to Speech из Google Assistant, и поэтому вам придется выбирать голоса из Actions on Google.
Все голоса различаются по языку, полу и акценту (для некоторых языков). Некоторые языки имеют несколько голосов на выбор. В Dialogflow вы можете настроить голос, установив язык агента, выбор голоса, скорость речи, высоту тона и усиление громкости на вкладке Настройки ➤ Речь. (См. Рисунок 7-24).
Рисунок 7-24. Настройки голоса
Также возможно изменить профиль аудиоэффектов, как показано на Рисунке 7-25. Когда вы развертываете свой голос на наушниках или среднем динамике, вы можете захотеть иметь лучшее качество голоса. На портативном устройстве вы можете снизить качество. Это уменьшает размер аудиопотока, и он будет меньше, и, следовательно, будет воспроизводиться быстрее.
Рисунок 7-25. Изменение аудиопрофилей
Внизу вкладки Настройки ➤ Речь есть текстовое поле SSML (Рисунок 7-26), которое позволяет вам протестировать ваше написание SSML, чтобы вы могли поиграть с тегами и посмотреть, оптимален ли звук.
Рисунок 7-26. Проба SSML в редакторе речи
Управление интонацией
С помощью SSML вы можете придать больше структуры или интонации вашим предложениям.
Определение интонации — это то, как высота вашего голоса повышается и понижается, когда вы говорите или произносите что-то, напевая. Примером интонации является то, как ваш голос повышается в конце вопроса. С помощью интонации вы можете придавать предложениям разные значения и эмоции.
Вы будете писать все свои теги SSML в родительском теге
Вы можете группировать абзацы и предложения с помощью тегов
"p" и "s". Группируя эти предложения, вы можете встроить больше пауз. Группируя предложения с абзацем, пауза будет немного длиннее, чем между предложениямиОпределенные знаки препинания также изменят интонацию. Например, запятая создаст небольшую паузу и повысит интонацию. Вопросительный знак обеспечит, что предложение будет звучать больше как вопрос, потому что он увеличивает интонацию в конце.
С помощью тега "break" вы можете управлять временем паузы в секундах (s) или миллисекундах (ms) вручную
Элемент
Вот пример, произнесенный как «Двенадцать тысяч триста сорок пять» (для американского английского) или «Двенадцать тысяч триста и сорок пять» (для британского английского):
указывает, что текст в значении атрибута alias заменяет содержащийся текст для произношения. Это удобно для аббревиатур, но вы также можете использовать его для «настройки» произношения, если чувствуете, что синтезатор TTS неправильно произносит ваше слово на определенном языке.
W3C
Также есть теги для воспроизведения аудиофайлов или управления медиа с помощью элементов
Резюме
Эта глава предоставила много информации о создании голосовых ботов для умных помощников, таких как Google Assistant, и создании голосовых ботов для телефонных систем. Последние разделы этой главы включали способы улучшения Speech to Text и Text to Speech голосовых ботов:
- Вы хотите создать разговор для Google Assistant.
- Вы хотите создать простой разговор для телефона с помощью телефонного шлюза, чтобы создать входящий бесплатный номер.
- Вы хотите иметь ИИ в своих контакт-центрах для предоставления продвинутых автоматизированных разговоров с Contact Center AI.
- Вы хотите улучшить качество Speech to Text для голоса и колл-ботов.
- Вы хотите, чтобы вывод Text to Speech ваших голосовых разговоров звучал более естественно.
Дополнительные материалы
- Документация Actions on Google
https://developers.google.com/assistant/conversational/overview - Консоль Actions on Google
https://console.actions.google.com - Документация Actions on Google по типам ответов с расширенными сообщениями
https://developers.google.com/assistant/conversational/rich-responses - Документация Actions on Google по отправке действия
https://developers.google.com/assistant/conversational/submit-project - Контрольный список для отправки вашего действия
https://developers.google.com/assistant/conversational/checklist - Документация Dialogflow по интеграции Actions on Google
https://cloud.google.com/dialogflow/es/docs/integrations/aog - Документация Dialogflow по управлению версиями
https://cloud.google.com/dialogflow/es/docs/agents-versions - Клиентская библиотека Actions on Google Node.js
https://github.com/actions-on-google/actions-on-google-nodejs - Инструмент Conversational Actions
https://developers.google.com/assistant/conversational/overview - Определение действий с помощью Actions SDK
https://developers.google.com/assistant/conversational/df-asdk/actions-sdk/define-actions - Инструмент командной строки gactions
https://developers.google.com/assistant/conversational/df-asdk/actions-sdk/gactions-cli - ngrok
https://ngrok.com/ - actions-sdk на npm
https://www.npmjs.com/package/actions-on-google - Документация Dialogflow по интеграции телефонного шлюза
https://cloud.google.com/dialogflow/es/docs/integrations/phone-gateway - Цены Dialogflow на использование телефонного шлюза
https://cloud.google.com/dialogflow/pricing - Документация Contact Center AI
https://cloud.google.com/solutions/contact-center - Как Contact Center AI работает с Genesys
https://www.youtube.com/watch?v=3PWd520W6ns - Документация Dialogflow по адаптации речи
https://cloud.google.com/dialogflow/es/docs/speech-adaptation - Адаптация речи в SDK
https://cloud.google.com/dialogflow/es/docs/reference/rpc/google.cloud.dialogflow.v2beta1#google.cloud.dialogflow.v2beta1.SpeechContext - Руководство Google Assistant по лучшим практикам для голосовых диалогов
https://designguidelines.withgoogle.com/conversation/conversation-design/ - Документация Google Assistant по SSML
https://developers.google.com/assistant/actions/reference/ssml
Другие статьи по этой теме:
- Практическое руководство по созданию агентов ИИ
- Выявление и масштабирование сценариев использования ИИ
- Агенты ИИ