5. Интеграция Службы Azure Bot5. Integrating Azure Bot Service

Из этого учебника вы узнаете, как использовать Службу Azure Bot в демонстрационном приложении HoloLens 2, чтобы добавить возможность распознавания речи (LUIS) и разрешить боту помогать пользователю во время поиска отслеживаемых объектов.In this tutorial, you will learn how to use Azure Bot Service in the HoloLens 2 demo application to add Language Understanding (LUIS) and letting the Bot assist the user when searching for Tracked Objects. Этот учебник состоит из двух частей. В первой части вы создадите бота с помощью приложения Bot Composer в качестве решения без кода и выполните краткий обзор Функции Azure, которая предоставляет боту необходимые данные.This is a two part tutorial where in the first part you create the Bot with the Bot Composer as a code free solution and take a quick look in the Azure Function that feeds the Bot with the needed data. Во второй части вы будете использовать компонент BotManager (script) (Диспетчер ботов — скрипт) в проекте Unity для использования размещенной Службы Bot.In the second part you use the BotManager (script) in the Unity project to consume the hosted Bot Service.

ЗадачиObjectives

Часть 1Part 1

  • Получите основные сведения о Службе Azure Bot.Learn the basics about Azure Bot Service
  • Узнайте, как создать бота с помощью приложения Bot Composer.Learn how to use the Bot Composer to create a Bot
  • Узнайте, как использовать функцию Azure для предоставления данных из службы хранилища Azure.Learn how to use an Azure Function to provide data from the Azure Storage

Часть 2Part 2

  • Узнайте, как настроить сцену для использования Службы Azure Bot в этом проекте.Learn how to setup the scene to use Azure Bot Service in this project
  • Узнайте, как настроить и найти объекты с помощью бота.Learn how to set and find objects via conversing with the Bot

Общие сведения о Службе Azure BotUnderstanding Azure Bot Service

Служба Azure Bot позволяет разработчикам создавать интеллектуальных ботов, которые могут поддерживать естественное общение с пользователями благодаря LUIS.The Azure Bot Service empowers developers to create intelligent bots that can maintain natural conversation with users thanks to LUIS. Чат-бот — это отличный способ расширить возможности взаимодействия пользователя с приложением.A conversational Bot is a great way to expand the ways a user can interact with your application. Бот можно использовать в качестве базы знаний с помощью QnA Maker для поддержания сложного разговора с использованием службы распознавания речи (LUIS).A Bot can act as a knowledge base with a QnA Maker to maintaining sophisticated conversation with the power of Language Understanding (LUIS).

Дополнительные сведения о Службе Azure BotLearn more about Azure Bot Service.

Часть 1. Создание ботаPart 1 - Creating the Bot

Прежде чем использовать бота в приложении Unity, его необходимо разработать, предоставить ему данные и разместить в Azure.Before you can use the bot in the Unity application, you need to develope it, provide it with data and host it on Azure. Цель бота — оценить количество отслеживаемых объектов, хранимых в базе данных, найти отслеживаемый объект по его имени и сообщить пользователю базовую информацию о нем.The goal of the bot is to have the abilities to tell how many Tracked Objects are stored in the database, find a Tracked Object by its name, and tell the user some basic information about it.

Краткий обзор функции отслеживаемых объектов в AzureA quick look into Tracked Objects Azure Function

Вы собираетесь приступить к созданию бота, но чтобы сделать его полезным, необходимо предоставить ресурс, из которого он может извлекать данные.You are about to start creating the Bot, but to make it useful you need to give it a resource from which it can pull data. Так как бот сможет подсчитать количество отслеживаемых объектов, найти конкретные объекты по имени и сообщить подробности, вы будете использовать простую Функцию Azure с доступом к хранилищу таблиц Azure.Since the Bot will be able to count the amount of Tracked Objects, find specific ones by name and tell details, you will use a simple Azure Function that has access to the Azure Table storage.

Скачайте проект функции Azure отслеживаемых объектов: AzureFunction_TrackedObjectsService.zip. Затем извлеките его на свой жесткий диск.Download the Tracked Objects Azure Function project: AzureFunction_TrackedObjectsService.zip and extract it to your hard drive.

Эта функция Azure может выполнять действия подсчета и поиска, которые можно вызвать с помощью базовых вызовов HTTP GET.This Azure Function has two actions, Count and Find which can be invoked via basic HTTP GET calls. Код можно проверить в Visual Studio.You can inspect the code in Visual Studio.

Дополнительные сведения о функциях Azure.Learn more about Azure Functions.

Функция Count запрашивает из хранилища таблиц все отслеживаемые объекты.The Count function queries from the Table storage all TrackedObjects from the table, very simple. С другой стороны, функция Find принимает параметр запроса имени из запроса GET и запрашивает хранилище таблиц для сопоставления отслеживаемых объектов и возвращает DTO в виде JSON.On the other hand the Find function takes a name query parameter from the GET request and queries the Table storage for a matching TrackedObject and returns a DTO as JSON.

Вы можете развернуть эту Функцию Azure непосредственно из Visual Studio.You can deploy this Azure Function directly from Visual Studio. Здесь вы найдете все сведения о развертывании Функции Azure.Find here all information regarding Azure Function deployment.

После завершения развертывания на портале Azure откройте соответствующий ресурс и выберите вкладку Конфигурация в разделе Параметры.Once you have completed the deployment, in the Azure Portal, open the corresponding resource and click on Configuration which is under the Settings section. На вкладке Параметры приложения необходимо предоставить строку подключения для хранилища Azure, где хранятся отслеживаемые объекты.There on Application Settings you need to provide the Connection string to the Azure Storage where the Tracked Objects are stored. Щелкните элемент Новый параметр приложения и в качестве имени введите: AzureStorageConnectionString, а в качестве значения предоставьте правильную строку подключения.Click on New Application setting and use for name: AzureStorageConnectionString and for value provide the correct Connection string. После этого нажмите на кнопку Сохранить, и Функция Azure будет готова к размещению бота на сервере, который вы создадите далее.After that click on Save and the Azure Function is ready to server the Bot which you will create next.

Создание чат-ботаCreating a conversation Bot

Существует несколько способов разработки чат-бота на основе платформы Bot Framework.There are several ways to develope a Bot Framework based conversational bot. На этом уроке вы будете использовать классическое приложение Bot Framework Composer, которое является визуальным конструктором и идеально подходит для быстрой разработки.In this lesson you will use the Bot Framework Composer desktop application which is a visual designer that is perfect for rapid development.

Последние выпуски можно скачать из репозитория GitHub.You can download the latest releases from the Github repository. Он доступен для Windows, Mac и Linux.It is available for Windows, Mac, and Linux.

После установки Bot Framework Composer запустите приложение, и вы увидите этот интерфейс:Once the Bot Framework Composer is installed, start the application and you should see this interface:

Bot Framework Composer — домашняя страница

Мы подготовили проект Bot Composer, который предоставляет необходимые диалоги и триггеры для работы с этим руководством.We have prepared a bot composer project which provides the needed dialogues and triggers for this tutorial. Скачайте проект Bot Framework Composer: BotComposerProject_TrackedObjectsBot.zip. Затем извлеките его на свой жесткий диск.Download the Bot Framework Composer project: BotComposerProject_TrackedObjectsBot.zip and extract it to your hard drive.

На верхней панели нажмите кнопку Open (Открыть) и выберите скачанный проект Bot Framework с именем TrackedObjectsBot.On the top bar click on Open and select the Bot Framework project you have downloaded which is named TrackedObjectsBot. После полной загрузки проекта вы увидите, что проект готов.After the project is fully loaded, you should see the project ready.

Bot Framework Composer с открытым проектом TrackedObjectsBot

Обратите внимание на панель диалогов в левой части страницы.Let's focus on the left side where you can see the Dialogs Panel. Здесь расположено диалоговое окно TrackedObjectsBot, в котором можно увидеть несколько триггеров.There you have one dialog named TrackedObjectsBot under which you can see several Triggers.

Дополнительные сведения об основных понятиях Bot Framework.Learn more about Bot Framework concepts.

Эти триггеры выполняют следующие действия:These triggers do the following:

ПриветствиеGreeting

Это точка входа чат-бота, когда какой-либо пользователь инициирует диалог.This is the entry point of the chat bot when ever a user initiates a conversation.

Диалоговое окно проекта TrackedObjectsBot с возможностью выбора триггера — приветствие

AskingForCountAskingForCount

Это диалоговое окно активируется, когда пользователь запрашивает подсчет всех отслеживаемых объектов.This dialog is triggered when the user asks for counting all Tracked Objects. Ниже приведены триггерные фразы:These are the trigger phrases:

  • count me all (подсчитать все);count me all
  • how many are stored (количество хранимых).how many are stored

Диалоговое окно проекта TrackedObjectsBot — AskForCount

Благодаря LUIS пользователю не нужно запрашивать фразы естественным для пользователя способом.Thanks to LUIS the user does not have to ask the phrases in that exact way which allows a natural conversation for the user.

В этом диалоговом окне бот также будет обращаться к Функции Azure Count. Дополнительные сведения об этом см. ниже.In this dialog the bot will also talk to the Count Azure Function, more about that later.

Неизвестная цельUnknown Intent

Это диалоговое окно запускается, если входные данные пользователя не соответствуют никаким другим условиям триггера, и просит пользователя повторно задать свой вопрос.This dialogue is triggered if the input from the user does not fit any other trigger condition and responses the user with trying his question again.

Диалоговое окно проекта TrackedObjectsBot с возможностью выбора триггера — неизвестное намерение

FindEntityFindEntity

Последнее диалоговое окно более сложное. Здесь приведены функции ветвления и хранения данных в памяти ботов.The last dialogue is more complex with branching and storing data in the bots memory. Оно запрашивает у пользователя имя отслеживаемого объекта, о котором необходимо узнать больше информации, выполняет запрос Функции Azure Find и использует ответ для продолжения разговора.It asks the user for the name of the Tracked Object it want's to know more information about, performs a query to the Find Azure Function, and uses the response to proceed with the conversation.

Диалоговое окно проекта TrackedObjectsBot с возможностью выбора триггера — FindEntity

Если отслеживаемый объект не найден, пользователь получает уведомление, а разговор завершается.If the Tracked Object is not found, the user is informed and the conversation ends. Когда рассматриваемый отслеживаемый объект будет найден, загрузчик проверит, какие свойства доступны, и сообщит о них.When the Tracked Object in question is found, the boot will check what properties are available and report on them.

Адаптация ботаAdapting the Bot

Триггерам AskingForCount и FindEntity необходимо взаимодействовать с серверной частью. Это означает, что необходимо добавить правильный URL-адрес Функции Azure, развернутой ранее.The AskingForCount and FindEntity trigger need to talk to the backend, this means you have to add the correct URL of the Azure Function you deployed previously.

На панели диалоговых окон щелкните AskingForCount и выберите действие Send an HTTP request (Отправить HTTP-запрос). Здесь можно увидеть поле URL, в которое необходимо ввести правильный URL-адрес конечной точки функции Count.On the dialog panel click on AskingForCount and locate the Send an HTTP request action, here you can see the field URL which you need to change the correct URL for the Count function endpoint.

Диалоговое окно AskingForCount проекта TrackedObjectsBot с возможностью выбора триггера — конфигурация конечной точки

Наконец, найдите триггер FindEntity и действие Send an HTTP request (Отправить HTTP-запрос). В поле URL замените URL-адрес конечной точкой функции Count.Finally, look for the FindEntity trigger and locate the Send an HTTP request action, in the URL field change the URL to the Find function endpoint.

Диалоговое окно FindEntity проекта TrackedObjectsBot с возможностью выбора триггера — конфигурация конечной точки

Теперь все готово к развертыванию бота.With everything set you are now ready to deploy the Bot. Так как у вас установлена программа Bot Framework Composer, его можно опубликовать непосредственно из нее.Since you have Bot Framework composer installed, you can publish it directly from there.

Дополнительные сведения о публикации бота с помощью программы Bot Composer.Learn more about Publish a bot from Bot Composer.

Совет

Вы можете поэкспериментировать с ботом, добавив дополнительные триггерные фразы, новые ответы или ветвление диалога.Feel free playing around with Bot by adding more trigger phrases, new responses or conversation branching.

Часть 2. Размещение всех элементов в UnityPart 2 - Putting everything together in Unity

Подготовка сценыPreparing the scene

В окне проекта перейдите к папке Assets > MRTK.Tutorials.AzureCloudServices > Prefabs > Manager.In the Project window, navigate to Assets > MRTK.Tutorials.AzureCloudServices > Prefabs > Manager folder.

Окно проекта Unity с выбранной заготовкой ChatBotManager

После этого переместите заготовку ChatBotManager в иерархию сцены.From there move the prefab ChatBotManager into the scene Hierarchy.

Добавив ChatBotManager в сцену, щелкните компонент Chat Bot Manager (Диспетчер чат-ботов).Once you add the ChatBotManager to the scene, click on the Chat Bot Manager component. В окне Inspector (Инспектор) вы увидите, что имеется пустое поле Direct Line Secret Key (Секретный ключ прямой линии), которое необходимо заполнить.In the Inspector you will see that there is an empty Direct Line Secret Key field which you need to fill out.

Совет

Вы можете получить секретный ключ на портале Azure, выполнив поиск ресурса типа регистрации каналов ботов, созданного в первой части этого учебника.You can retrieve the secret key from the Azure portal by looking for the resource of type Bot Channels Registration you have created in the first part of this tutorial.

Unity с добавленной заготовкой ChatBotManager

Теперь вы подключите объект ChatBotManager с компонентом ChatBotController, присоединенным к объекту ChatBotPanel.Now you will connect the ChatBotManager object with the ChatBotController component that is attached to the ChatBotPanel object. В окне Hierarchy (Иерархия) выберите ChatBotPanel, и вы увидите пустое поле Chat Bot Manager (Диспетчер чат-ботов). Перетащите объект ChatBotManager в пустое поле Chat Bot Manager (Диспетчер чат-ботов).In the Hierarchy select the ChatBotPanel and you will see an empty Chat Bot Manager field, drag from the Hierarchy the ChatBotManager object into the empty Chat Bot Manager field.

Unity с настроенным объектом ChatBotPanel

Далее необходимо открыть объект ChatBotPanel, чтобы пользователь мог взаимодействовать с ним.Next you need a way to open the ChatBotPanel so that the user can interact with it. В окне Scene (Сцена) вы могли заметить, что в объекте MainMenu есть кнопка Chat Bot (Чат-бот), которая будет использоваться для решения этой проблемы.From the Scene window you may have noticed that there is a Chat Bot side button on the MainMenu object, you will use it to solve this problem.

В окне Hierarchy (Иерархия) откройте папку RootMenu > MainMenu > SideButtonCollection > ButtonChatBot и найдите в окне Inspector (Инспектор) скрипт ButtonConfigHelper.In the Hierarchy locate RootMenu > MainMenu > SideButtonCollection > ButtonChatBot and locate in the Inspector the ButtonConfigHelper script. Там вы увидите пустой слот в функции обратного вызова события OnClick () .There you will see an empty slot on the OnClick() event callback. Перетащите ChatBotPanel в область событий, из раскрывающегося списка выберите GameObject, а затем в подменю выберите SetActive (bool) (SetActive (логическое)) и установите флажок.Drag and drop the ChatBotPanel to the event slot, from the dropdown list navigate GameObject, then select in the sub menu SetActive (bool) and enable the checkbox.

Unity с настроенным объектом ButtonChatBot

Теперь чат-бот можно запустить из главного меню, а сцена готова к использованию.Now the chat bot can be stared from the main menu and with that the scene is ready for use.

Тестирование чат-ботаPutting the bot to a test

Запрос количества отслеживаемых объектовAsking about the quantity of tracked objects

Сначала вы проверите, сколько отслеживаемых объектов хранится в базе данных.First you test asking the bot how many Tracked Objects are stored in the database.

Примечание

На этот раз необходимо запустить приложение из HoloLens 2, так как такие службы, как преобразование текста в речь, могут быть недоступны в вашей системе.This time you must run the application from the HoloLens 2 because services like text-to-speech may not be available on your system.

Запустите приложение в HoloLens 2 и нажмите кнопку Chat Bot (Чат-бот) рядом с главным меню.Run the application on your HoloLens 2 and click on the Chat Bot button next to the main menu. Чат-бот поприветствует вас. Спросите, сколько имеется объектов?The bot will be greeting you, now ask how many objects do we have? Он должен сообщить их количество и завершить диалог.It should tell you the quantity and end the conversation.

Запрос отслеживаемого объектаAsking about a tracked object

Теперь запустите приложение еще раз и попросите найти отслеживаемый объект. Чат-бот запросит название, на которое следует ответить, например введите "автомобиль", или имя другого отслеживаемого объекта, который есть в базе данных.Now run the application again and this time ask find me a tracked object, the bot will be asking you the name to which you should respond with the "car" or the name of an other Tracked Object you know exists in the database. Бот отобразит его описание и сведения о наличии пространственной привязки.The bot will tell you details like description and if it has a spatial anchor assigned.

Совет

Попробуйте запросить отслеживаемые объекты, которые не существуют в базе, и посмотрите на ответ бота.Try out asking for an Tracked Objects that does not exist and hear how the bot responds.

Поздравляем!Congratulations

Из этого учебника вы узнали, как можно использовать платформу Azure Bot Framework для взаимодействия с приложением с помощью естественного языка.In this tutorial you learned how Azure Bot Framework can be used to interact with the application via conversation with natural language. Вы узнали, как разрабатывать собственных ботов и как они работают.You learned how to develop your own bot and what all the moving pieces are to get it running,

ЗаключениеConclusion

В рамках этой серии учебников вы узнали, как облачные службы Azure применяют новые интересные функции к вашему приложению.Through the course of this tutorial series you experienced how Azure Cloud services brought new and exciting features to your application. Теперь вы можете хранить данные и изображения в облаке хранилища Azure, использовать Пользовательское визуальное распознавание Azure для связывания изображений и обучения модели, передавать объекты в локальный контекст с помощью Пространственных привязок Azure и реализовать Azure Bot Framework на платформе LUIS, чтобы добавить чат-бота в новый и естественный шаблон взаимодействия.You can now store data and images in the cloud with Azure Storage, use Azure Custom Vision to associate images and train a model, bring objects to a local context with Azure Spatial Anchors, and implement Azure Bot Framework powered by LUIS to add a conversational bot for a new and natural interaction pattern.