5.Azure Bot Service の統合5. Integrating Azure Bot Service

このチュートリアルでは、HoloLens 2 デモ アプリケーションの Azure Bot Service を使用して Language Understanding (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. これは 2 部構成のチュートリアルです。第 1 部では 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. 第 2 部では、Unity プロジェクトの BotManager (スクリプト) を使用して、ホストされた Bot Service を使用します。In the second part you use the BotManager (script) in the Unity project to consume the hosted Bot Service.

目標Objectives

第 1 部Part 1

  • Azure Bot Service の基本について学習する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

第 2 部Part 2

  • このプロジェクトで Azure Bot Service を使用するシーンをセットアップする方法を学習する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 Bot Service についてUnderstanding Azure Bot Service

Azure Bot Service によって開発者は、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. ボットは、Language Understanding (LUIS) の優れた機能によって高度な会話を維持する、QnA Maker を使用したナレッジ ベースとして機能することができます。A Bot can act as a knowledge base with a QnA Maker to maintaining sophisticated conversation with the power of Language Understanding (LUIS).

Azure Bot Service の詳細情報を参照してください。Learn 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.

追跡対象オブジェクトの Azure 関数の概要A 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 関数には、CountFind という 2 つのアクションがあり、基本的な 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 Functions の詳細情報を参照してください。Learn more about Azure Functions.

Count 関数では、非常にシンプルに、テーブルにあるすべての TrackedObjects のクエリを Table Storage に実行します。The Count function queries from the Table storage all TrackedObjects from the table, very simple. 一方、Find 関数では、GET 要求から name クエリ パラメーターを受け取り、一致する TrackedObject のクエリを テーブル ストレージ に対して実行し、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 Portal で開き、 [設定] セクションの下にある [構成] をクリックします。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 ホーム

このチュートリアルに必要なダイアログとトリガーが提供されるボット コンポーザー プロジェクトを準備してあります。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.

上部のバーで [開く] をクリックし、ダウンロードした 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.

TrackedObjectsBot プロジェクトが開かれている Bot Framework Composer

左側にフォーカスを移動して、ダイアログ パネル を確認してみましょう。Let's focus on the left side where you can see the Dialogs Panel. TrackedObjectsBot という名前のダイアログが 1 つあります。その下に、いくつかの トリガー を確認できます。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:

GreetingGreeting

これは、"ユーザー" が会話を開始したときの、チャット "ボット" のエントリ ポイントです。This is the entry point of the chat bot when ever a user initiates a conversation.

TrackedObjectsBot プロジェクト ダイアログのトリガー Greeting

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 IntentUnknown 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 プロジェクト ダイアログのトリガー Unknown Intent

FindEntityFindEntity

最後のダイアログは、データを分岐して "ボット" メモリに格納することで、より複雑になります。The last dialogue is more complex with branching and storing data in the bots memory. 詳細情報を知る必要がある 追跡対象オブジェクトname をユーザーにたずね、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 トリガーからバックエンドへの会話が必要です。これは、さきほどデプロイした Azure 関数 の正しい URL を追加する必要があることを意味します。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] をクリックし、 [HTTP 要求を送信します] というアクションを見つけます。ここに [URL] というフィールドがあるのがわかります。それを Count 関数のエンドポイントの正しい URL に変更する必要があります。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.

TrackedObjectsBot プロジェクト AskingForCount ダイアログのトリガー エンドポイント構成

最後に、FindEntity トリガーを探し、 [HTTP 要求を送信します] アクションを見つけて、 [URL] フィールドの URL を Find 関数のエンドポイントに変更します。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.

TrackedObjectsBot プロジェクト FindEntity ダイアログのトリガー エンドポイント構成

これですべてを設定したので、ボットをデプロイする準備ができました。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 部 - すべてを Unity にまとめるPart 2 - Putting everything together in Unity

シーンの準備Preparing the scene

[Project](プロジェクト) ウィンドウで、 [Assets](アセット) > MRTK.Tutorials.AzureCloudServices > [Prefabs](プレハブ) > Manager フォルダーの順に移動します。In the Project window, navigate to Assets > MRTK.Tutorials.AzureCloudServices > Prefabs > Manager folder.

ChatBotManager プレハブが選択されている Unity プロジェクト ウィンドウ

そこから、プレハブ 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. インスペクターには、入力する必要がある空の [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 portal から "シークレット キー" を取得できます。そのためには、このチュートリアルの最初の部分で作成した、種類が [ボット チャンネル登録] のリソースを検索します。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.

新しく追加された ChatBotManager プレハブがまだ選択されている Unity

次に、ChatBotManager オブジェクトを、ChatBotPanel オブジェクトにアタッチされた ChatBotController コンポーネントと接続します。Now you will connect the ChatBotManager object with the ChatBotController component that is attached to the ChatBotPanel object. [Hierarchy](階層) で ChatBotPanel を選択すると、空の [Chat Bot Manager] フィールドが表示されます。[Hierarchy](階層) から 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.

ChatBotPanel が構成された Unity

次に、ユーザーが操作できるように 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 に移動し、インスペクターで 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) を選択して、チェックボックスをオンにします。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.

ButtonChatBot が構成された Unity

これで、メイン メニューからチャット ボットを開始できるようになり、それによって、シーンが使用できる状態になりました。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. ボットからあいさつがあったら、"how many objects do we have? " (オブジェクトは何個ありますか?) と質問します。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

ここで、アプリケーションをもう一度実行します。今度は、"find me a tracked object" (追跡対象オブジェクトを検索) と依頼します。ボットから名前をたずねられるので、"car" (車) と答えるか、データベース内に存在することがわかっている他の "追跡対象オブジェクト" の名前を答えます。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 Cloud Services を使用してご自身のアプリケーションに新しい優れた機能を取り入れる方法を経験しました。Through the course of this tutorial series you experienced how Azure Cloud services brought new and exciting features to your application. Azure Storage を使用してクラウドにデータと画像を格納すること、Azure Custom Vision を使用して画像を関連付け、モデルをトレーニングすること、Azure Spatial Anchors を使用してローカル コンテキストにオブジェクトを配置すること、LUIS を搭載した Azure Bot Framework を実装し、新しい自然な対話のパターンに対応した会話ボットを追加することができるようになりました。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.