Окей, Google, спросите Q42, как создать голосовое приложение

Хорошо. Получим Q42.

Привет! Это Христиан из Q42. Q42 - стратегическое технологическое агентство из Нидерландов, и недавно мы сделали несколько голосовых приложений. Мы многому научились в процессе, и я могу помочь вам с вашими техническими вопросами. Что бы вы хотели узнать?

Что вам нужно для создания голосового приложения?

Мы используем Действия в Google с Dialogflow и Облачные функции для Firebase для выполнения веб-хуков.

Что на самом деле делает Dialogflow?

Dialogflow обрабатывает естественный язык. Когда пользователь спрашивает: "Какая погода в Амстердаме?" Действия в Google переводят это в строку, а затем передают в Dialogflow. Затем Dialogflow анализирует эту строку и распознает, что пользователю нужна информация о погоде и что Амстердам - ​​это город. Затем он обращается к API погоды, чтобы выяснить, какая погода на самом деле.

Расскажите еще, Я ХОЧУ БЛИНЫ!

Простите, я не понимаю.

Угу, дети разговаривают. Не могли бы вы рассказать мне больше о выполнении?

Ах, да, когда Dialogflow получает запрос и ему необходимо выполнить вызов API к внешней службе для поиска дополнительной информации, он использует веб-перехватчик выполнения. В нашем случае он вызывает нашу облачную функцию Google, которая общается с нашими серверными системами, а затем возвращает информацию в Dialogflow. Облачные функции работают на Node.js, и мы используем Typescript для их написания.

Машинопись? Почему?

Потому что это делает написание Javascript намного приятнее. Действия в клиентской библиотеке Google (версия 2) также написаны на самом TypeScript, так что интеграция действительно хороша. Когда вы работаете в Visual Studio Code, вы можете просто ввести new LinkOutSuggestion(, и автозаполнение сообщит вам, что вам нужны параметры name и url. Кроме того, поскольку облачные функции по-прежнему работают на Node 6, вы обычно не можете использовать приятные функции, такие как async / await, но с Typescript вы можете, и он просто скомпилирует его до старого кода Node.

Как вы настраивали свой проект?

Поскольку мы работаем с несколькими разработчиками над одним и тем же проектом, это становится немного сложнее. Пользовательский интерфейс Dialogflow не очень хорошо справляется с редактированием нескольких пользователей в одном проекте, поэтому мы создали отдельный проект для каждого разработчика. У нас также есть промежуточный проект, в котором мы выполняем развертывание, когда у нас что-то работает. У нас также есть производственный проект, который запускает стабильный код.
Каждый проект имеет свой собственный диалог, действия в Google и проект Firebase.

Как перенести контент из одного проекта Dialogflow в другой?

После того, как один разработчик изменил некоторые намерения и контент в Dialogflow, мы используем наш собственный dftool, чтобы экспортировать его на наш локальный диск. Затем мы можем передать его в Git. Другой разработчик может затем объединить его со своими собственными изменениями и снова использовать dftool, чтобы импортировать его в промежуточную или производственную среду. Этот рабочий процесс также позволяет нам вернуться к предыдущим версиям нашего содержимого Dialogflow, если мы случайно что-то сломаем.

Вы также используете это для местных разработок?

Да, во время разработки мы открываем нашу локальную функцию через ngrok и говорим Dialogflow использовать ее для выполнения. Например:

npm run dftool import my-project ../dialogflow https://6d5a5etc.ngrok.io/my-project/us-central1/MyFunction

С этого момента все вызовы выполнения в my-project будут использовать этот локальный сервер. Это делает разработку намного быстрее, чем если бы вам приходилось развертывать свою функцию каждый раз, когда вы вносили небольшие изменения.

Я слышал кое-что о Dialogflow Enterprise Edition. Мне это нужно?

Если вы ожидаете более 1000 запросов в день, вам понадобится Enterprise Edition. Сложность заключается в том, что вы не можете переключить свой проект со Standard на Enterprise, поэтому, если вы ожидаете, что в какой-то момент вы можете достичь этого предела, вам нужно с самого начала начать с Enterprise Edition.

В нашем случае мы создали корпоративный проект для производства и стандартные проекты для наших проектов тестирования и разработки.

Есть ли у вас еще какие-нибудь мудрости?

Конечно! Я могу рассказать вам о NVM, аутентификации, SSML и машинном обучении. Что бы вы хотели узнать?

NVM

Если вы работаете над современными проектами Node.js, вероятно, у вас установлен Node 8 или 9. Для Google Cloud Functions вам все еще понадобится Node 6, поэтому мы используем Диспетчер версий узлов, чтобы переключать версии узлов на все, что нам нужно. Это также упростило недавнее обновление с Node 6.11.5 до 6.14.0.

А как насчет аутентификации?

Вы можете использовать Связывание учетных записей для аутентификации пользователей, чтобы вы могли возвращать персонализированные результаты. Однако в симуляторе это не работает. Симулятор отлично подходит для отладки, так как вы можете видеть все запросы, ответы и сообщения об ошибках. Мы заметили, что если вы сначала входите в систему на своем телефоне, accessToken вашей учетной записи автоматически передается симулятору, который затем может использовать его для выполнения аутентифицированных вызовов.

Еще один полезный трюк: если вы хотите выйти из системы, вам следует нажать «Отключить тестирование на устройстве», а затем снова включить его.

Что вы узнали о SSML?

SSML позволяет вам определять, как произносится ваш текст. Например:

Вы должны понимать, что все это должен быть действительный XML. Это не сработает, например:

Причина в том, что «&» - это специальный символ в XML, поэтому вам нужно избегать его:

Это избавит вас от головной боли, если вы правильно уйдете с самого начала своего проекта.

Я слышал, что машинное обучение популярно! Что вы об этом знаете?

Dialogflow автоматически использует машинное обучение для сопоставления естественного языка с известными намерениями. В большинстве случаев это действительно хорошо работает, поскольку пользователи могут спрашивать: "Какая погода?" или "Как погода?" и оба будут сопоставлены с намерением Weather. Однако иногда это совпадает с чем-то совершенно неожиданным. На экране обучения Dialogflow вы можете увидеть, как он интерпретирует то, что говорят люди, и если он делает ошибки, вы можете исправить Dialogflow вручную. Пока мы не выяснили, почему некоторые вещи не соответствуют друг другу, и решение, похоже, в основном заключается в пробах, ошибках и большом количестве тестов. Мы ожидаем, что в будущем ситуация улучшится.

Что еще за веб-сайт созданного вами инструмента Dialogflow?

Веб-сайт:
https://github.com/Q42/dftool
Могу ли я еще что-нибудь для вас сделать?

Можете ли вы обновить заголовок этой статьи?

Простите, я не понимаю.

Укажите в заголовке действительное число

Не могли бы вы это перефразировать?

Обновить заголовок

Боюсь, я не смогу вам с этим помочь.

Q42 покинул беседу

Хотите узнать больше о нашей работе с Google Ассистентом? Оставьте комментарий ниже.