インテントの解決に Dispatch (非推奨) を使用する
適用対象: SDK v4
ボットが複数の LUIS モデルと QnA Maker ナレッジ ベース (ナレッジ ベース) を使用している場合は、ディスパッチ ツールを使用して、ユーザー入力に最も一致する LUIS モデルまたは QnA Maker サポート情報判断できます。 ディスパッチ ツールでは、これを行うために、ユーザー入力を正しいモデルにルーティングする 1 つの LUIS アプリが作成されます。 CLI コマンドを含むディスパッチの詳細については、 ディスパッチ README を参照してください。
重要
ディスパッチは非推奨になり、 Bot Framework Orchestrator に置き換えられるパスにあります。 ボットを LUIS Dispatch から Orchestrator に移行する方法については、「 LUIS Dispatch から Orchestrator への移行の例」を参照してください。
前提条件
- LUIS アプリを発行するための luis.ai アカウント。
- QnA ナレッジ ベースを発行するための QnA Maker アカウント。
- ボットの基本、LUIS、および QnA Maker に関する知識。
- コマンド ライン ディスパッチ ツール
注意
- 14.nlp-with-orchestrator サンプル (C# または JavaScript) は、ディスパッチに Orchestrator を使用する方法を示しています。 LUIS ディスパッチを使用するプロセスも同様です。
- 14.nlp-with-dispatch サンプル (Java または Python) は、LUIS Dispatch の使用方法を示しています。
サンプルについて
サンプルは、 コグニティブ モデル サブフォルダー内のファイルに基づいて、LUIS アプリと QnA Maker アプリの定義済みのセットに基づいています。
QnAMaker.tsv- ボットに関する FAQ の質問。Weather.json-天気クエリ。homeAutomation.json-家庭用照明コマンド。
このシナリオでは、メッセージ アクティビティ ハンドラーは、組み合わされた言語モデルを使用して、ユーザーのメッセージに最も一致するアプリを決定します。 その後、ボットはコントロールを適切なハンドラーに転送します。
ユーザー入力を受け取るたびに、OnMessageActivityAsync が呼び出されます。 このモジュールでは、最上位のスコアリング ユーザー意図を検索し、その結果を DispatchToTopIntentAsync渡して、適切なアプリ ハンドラーを呼び出します。
ハンドラーによって LUIS または QnA Maker サービスが呼び出され、生成された結果がユーザーに返されます。
LUIS アプリと QnA ナレッジ ベースを作成する
ディスパッチ モデルを作成するには、ご自身の LUIS アプリと QnA ナレッジ ベースを作成し、発行しておく必要があります。 この記事では、\CognitiveModels フォルダーの "ディスパッチによる NLP" サンプルに含まれる次のモデルを公開します。
| 名前 | 説明 |
|---|---|
| HomeAutomation | 関連付けられているエンティティ データによってホーム オートメーションの意図を認識する LUIS アプリ。 |
| Weather | 場所データによって天気関連の意図を認識する LUIS アプリ。 |
| QnA Maker | ボットに関するシンプルな質問への回答を提供する QnA Maker ナレッジ ベース。 |
LUIS アプリの作成
- サンプルのコグニティブ モデル ディレクトリ内のホーム オートメーション JSON ファイルから LUIS アプリを作成します。
- 運用環境にアプリをトレーニングして発行します。
- アプリケーション ID、表示名、オーサリング キー、場所を記録します。
- 天気 JSON ファイルに対して次の手順を繰り返します。
詳細については、 LUIS ポータルで LUIS アプリを作成 し、LUIS アプリ に接続するための値を取得する 方法を参照してください。 ボットに自然言語の理解を追加する 方法と、運用環境にアプリを トレーニング して 発行 する方法に関する LUIS ドキュメントを参照してください。
QnA Maker サポート情報を作成する
QnA Maker ナレッジ ベースを設定する最初の手順は、Azure で QnA Maker サービスを設定することです。 これを行うには、 qnamaker サービスのセットアップ に関する記事を見つけた詳細な手順に従います。
Azure で QnA Maker サービスを作成したら、QnA Maker サービス用に提供される Cognitive Services の "キー 1" を記録しておく必要があります。 これは、ディスパッチ アプリケーションに QnA Maker アプリを追加するときに、azure-qna-service-key1> として<使用されます。
QnA Maker で使用される 2 つの異なる種類のキーの詳細については、こちらを参照してください。
以降の手順では、このキーが提供されます。

ご利用の Azure portal 内で、QnA Maker cognitive service を選択します。

左側のメニューで、 [Resource Management] セクションの下にあるキー アイコンを選択します。

"キー 1" の値をクリップボードにコピーして、ローカルに保存します。 これは後で、ディスパッチ アプリケーションに QnA Maker アプリを追加するときに、(-k) キー値 <azure-qna-service-key1> に使用されます。
次に QnAMaker Web ポータルにサインインします。
手順 2 では、次のように選択します。
- Azure AD アカウント。
- Azure サブスクリプション名。
- QnA Maker サービス用に作成した名前 (最初の段階でこのプル ダウン リストに Azure QnA サービスが表示されない場合は、ページを更新してみてください)。

手順 3 では、QnA Maker ナレッジベースの名前を指定します。 この例では、名前 'sample-qna' を使用します。

手順 4 では、 [+ Add File] オプションを選択し、ご自身のサンプル コードの CognitiveModel フォルダーに移動して、"QnAMaker.tsv" ファイルを選択します。 ナレッジ ベースには Chit-chat の性格を追加する選択がもう 1 つありますが、この例にはこのオプションが含まれていません。

手順 5 では、 [Create your knowledge base]\(ナレッジ ベースの作成\) を選択します。
アップロードしたファイルからナレッジ ベースが作成されたら、 [Save and train]\(保存してトレーニング\) を選択し、完了したら、 [PUBLISH]\(公開\) タブを選択してアプリを公開します。
QnA Maker アプリが公開されたら、 [SETTINGS]\(設定\) タブを選択し、[Deployment details]\(デプロイの詳細\) まで下にスクロールします。 Postman サンプル HTTP 要求の次の値を書き留めます。
POST /knowledge bases/<knowledge-base-id>/generateAnswer Host: <your-hostname> // NOTE - this is a URL. Authorization: EndpointKey <qna-maker-resource-key>ホスト名の完全な URL 文字列は次のようになります
https://<host-id>.azure.net/qnamaker。 これらの値は、お使いのappsettings.jsonファイルまたは.envファイルで後で使用されます。
ディスパッチ アプリには既存のアプリへの読み取りアクセスが必要
LUIS アプリおよび QnA Maker アプリにディスパッチする新しい親 LUIS アプリを作成するために、ディスパッチ ツールには既存の LUIS アプリと QnA Maker アプリを読み取るための作成アクセスが必要です。 このアクセスには、アプリ ID と作成キーが提供されます。
サービス作成キー
作成キーは、モデルの作成と編集にのみ使用されます。 2 つの LUIS アプリのそれぞれ、および QnA Maker アプリに対して ID とキーが必要です。
- LUIS 用
- アプリ ID は、各アプリの LUIS ポータルにある [アプリケーションの管理>] 設定>設定
- オーサリング キーは LUIS ポータルの右上隅にあり、独自のユーザーを選択してから設定。
- Qna Maker 用
- アプリ ID は、アプリを発行した後、設定 ページの QnA Maker ポータルにあります。 これは、knowledgebase の後にくる POST コマンドの最初の部分にある ID です。 アプリ ID を検査する場所の例として、
POST /knowledgebases/<APP-ID>/generateAnswerが挙げられます。 - オーサリング キーは、QnA Maker リソースの Azure portal の [キー] にあります。 複数のキーのうち、必要なのは 1 つだけです。
- アプリ ID は、アプリを発行した後、設定 ページの QnA Maker ポータルにあります。 これは、knowledgebase の後にくる POST コマンドの最初の部分にある ID です。 アプリ ID を検査する場所の例として、
作成キーは、発行されたアプリケーションから予測スコアまたは信頼スコアを取得するためには使用されません。 この操作にはエンドポイント キーが必要です。 エンドポイント キー は、このチュートリアルで後ほど取り上げて使用します。
QnA Maker で使用される 2 つの異なる種類のキーの詳細については、こちらを参照してください。
ディスパッチ モデルを作成する
ディスパッチ ツールの CLI インターフェイスにより、適切な LUIS アプリまたは QnA Maker アプリにディスパッチするためのモデルが作成されます。
コマンド プロンプトまたはターミナル ウィンドウを開き、ディレクトリを CognitiveModels ディレクトリに変更します
最新バージョンの npm とディスパッチ ツールがインストールされていることを確認します。
npm i -g npm npm i -g botdispatchdispatch initを使用して初期化し、ご自身のディスパッチ モデル用に.dispatchファイルを作成します。 これは、あなたが見てわかるファイル名を使用して作成します。dispatch init -n <filename-to-create> --luisAuthoringKey "<your-luis-authoring-key>" --luisAuthoringRegion <your-region>dispatch addを使用して、ご自身の LUIS アプリと QnA Maker ナレッジ ベースを.dispatchファイルに追加します。dispatch add -t luis -i "<app-id-for-weather-app>" -n "<name-of-weather-app>" -v <app-version-number> -k "<your-luis-authoring-key>" --intentName l_Weather dispatch add -t luis -i "<app-id-for-home-automation-app>" -n "<name-of-home-automation-app>" -v <app-version-number> -k "<your-luis-authoring-key>" --intentName l_HomeAutomation dispatch add -t qna -i "<knowledge-base-id>" -n "<knowledge-base-name>" -k "<azure-qna-service-key1>" --intentName q_sample-qnadispatch createを使用して、.dispatchファイルからディスパッチ モデルを生成します。dispatch create先ほど作成したディスパッチ LUIS アプリを公開します。
ディスパッチ LUIS アプリを使用する
生成された LUIS アプリによって、子アプリおよびナレッジ ベースごとに意図が定義されます。発話に適合する意図がない場合は、none が定義されます。
l_HomeAutomationl_WeatherNoneq_sample-qna
ボットを適切に動作させるには、これらのサービスが正しい名前で公開されている必要があります。 公開されたサービスにボットがアクセスできるようにするには、アクセス対象サービスに関する情報がそのボットに必要です。
サービス エンドポイント キー
このボットには、3 つの LUIS アプリ (ディスパッチ、天気、およびホーム オートメーション) 用のクエリ予測エンドポイントと、単一の QnA Maker ナレッジ ベースが必要です。 LUIS ポータルと QnA Maker ポータルでエンドポイント キーを検索します。
- LUIS ポータルで各 LUIS アプリの [Manage] セクションで、 [Keys and Endpoint settings]\(キーとエンドポイントの設定\) を選択して、各アプリに関連付けられているキーを見つけます。 このチュートリアルを行う場合、エンドポイント キーは
<your-luis-authoring-key>と同じキーです。 作成キーでは、1000 回のエンドポイント ヒットが許可され、その後有効期限が切れます。 - QnA Maker ポータルのナレッジ ベースの [Manage] 設定で、Authorization ヘッダー用の [Postman]\(Postman\) 設定に表示されているキー値を、テキスト
EndpointKeyなしで使用します。
これらの値は、サンプルの構成ファイル ( appsettings.json (C#)、 .env (JavaScript)、または config.py (Python) で使用されます。
パッケージをインストールする
このアプリを初めて実行する前に、いくつかの NuGet パッケージがインストールされていることを確認します。
- Microsoft.Bot.Builder
- Microsoft.Bot.Builder.AI.Luis
- Microsoft.Bot.Builder.AI.QnA
お使いの appsettings.json ファイルを手動で更新する
すべてのサービス アプリが作成されたら、それぞれの情報を "appsettings.json" ファイルに追加する必要があります。
次に示すエンティティごとに、前の手順で記録した値を追加します。
appsettings.json
"QnAKnowledgebaseId": "<knowledge-base-id>",
"QnAEndpointKey": "<qna-maker-resource-key>",
"QnAEndpointHostName": "<your-hostname>",
"LuisAppId": "<app-id-for-dispatch-app>",
"LuisAPIKey": "<your-luis-endpoint-key>",
"LuisAPIHostName": "<your-dispatch-app-region>",
すべての変更が完了したら、このファイルを保存します。
ボットからサービスに接続する
Dispatch、LUIS、および QnA Maker サービスに接続するために、ボットは設定ファイルから情報をプルします。
BotServices.cs で、appsettings.json の情報を使用してディスパッチ ボットをアンド SampleQnA サービスにDispatch接続します。
コンストラクターの構成値を使用して、これらのサービスに接続します。
注意
既定では、 includeApiResults パラメーターは false に設定されています。つまり、認識エンジンはエンティティと意図に関する基本情報のみを返します。 LUIS からの完全な応答 (このチュートリアルで後ほど使用する ConnectedServiceResult など) が必要な場合は、このパラメーターを true に設定します。 これにより、LUIS サービスからの完全な応答が、RecognizerResult の Properties コレクションに追加されます。
ボットからのサービスを呼び出す
ボット ロジックは、ユーザーからの入力ごとに、結合されたディスパッチ モデルに対してユーザー入力をチェックし、返された上位の意図を検索し、その情報を使用して入力に対する適切なサービスを呼び出します。
DispatchBot.cs ファイルでは、OnMessageActivityAsync メソッドが呼び出されるたびに、受信ユーザー メッセージをディスパッチ モデルに対して確認します。 次に、ディスパッチ モデル topIntent を recognizerResult 正しいメソッドに渡して、サービスを呼び出し、結果を返します。
認識結果を操作する
モデルによって結果が生成されるとき、どのサービスが発話を最も適切に処理できるかが示されます。 このボットのコードでは、要求を対応するサービスにルーティングし、呼び出されたサービスからの応答を要約します。 Dispatch から返された "意図" によっては、このコードでは、返された意図を使用して、適切な LUIS モデルまたは QnA サービスへのルーティングが行われます。
メソッドProcessWeatherAsyncがProcessHomeAutomationAsync呼び出されると、luisResult.ConnectedServiceResult 内のディスパッチ モデルから結果が渡されます。 その後、指定されたメソッドによって、ユーザー フィードバックが提供されます。このフィードバックには、ディスパッチ モデルの最上位の意図と、検出された意図およびエンティティの一覧がランク付けされて示されています。
メソッドがq_sample-qna呼び出されると、ターン コンテキスト内に含まれるユーザー入力を使用して、サポート情報から回答を生成し、その結果をユーザーに表示します。
注意
これが運用環境のアプリケーションの場合は、ここで、選択した LUIS メソッドが、指定されたサービスに接続されたうえで、そのメソッドによってユーザー入力が渡され、返された LUIS の意図とエンティティ データが処理されます。
ボットをテストする
ご自身の開発環境を使用して、サンプル コードを開始します。 アプリによって開かれたブラウザー ウィンドウのアドレス バーに表示される localhost アドレスを書き留めます: "https://localhost:<Port_Number>"。
Bot Framework Emulatorを開き、次に選択します
Create a new bot configuration。.botファイルを使用すると、Emulatorのインスペクターを使用して、LUIS と QnA Maker から返された JSON を確認できます。[New bot configuration]\(新しいボット構成\) ダイアログ ボックスで、ご自身のボット名とエンドポイント URL (
http://localhost:3978/api/messagesなど) を入力します。 ご自身のボット サンプル コード プロジェクトのルートにファイルを保存します。ボット ファイルを開き、ご自身の LUIS アプリおよび QnA Maker アプリのセクションを追加します。 このサンプル ファイルを設定用のテンプレートとして使用します。 変更を保存します。
[My Bots] リストでボット名を選択して、実行中のボットにアクセスします。 参考のために、ご自身のボット用に作成されたサービスに含まれる質問とコマンドの一部を次に示します。
- QnA Maker
hi,good morningwhat are you,what do you do
- LUIS (ホーム オートメーション)
turn on bedroom lightturn off bedroom lightmake some coffee
- LUIS (天気)
whats the weather in redmond washingtonwhat's the forecast for londonshow me the forecast for nebraska
- QnA Maker
QnA Maker へのユーザー発話のためのディスパッチ
Bot Framework Emulatorでテキストを
hi入力し、発話を送信します。 ボットから、このクエリがディスパッチ LUIS アプリに送信されると、さらなる処理のためにどの子アプリがこの発話を取得する必要があるかを示す応答がボットに届きます。ログ内の行を
LUIS Trace選択すると、Emulatorで LUIS 応答を確認できます。 ディスパッチ LUIS アプリからの LUIS 結果がインスペクターに表示されます。{ "luisResponse": { "entities": [], "intents": [ { "intent": "q_sample-qna", "score": 0.9489713 }, { "intent": "l_HomeAutomation", "score": 0.0612499453 }, { "intent": "None", "score": 0.008567564 }, { "intent": "l_Weather", "score": 0.0025761195 } ], "query": "Hi", "topScoringIntent": { "intent": "q_sample-qna", "score": 0.9489713 } } }発話
hiは、ディスパッチ LUIS アプリの q_sample-qna 意図の一部であり、topScoringIntentとして選択されているため、ボットでは同じ発話を使用して今回は QnA Maker アプリに 2 番目の要求が行われます。QnAMaker TraceEmulator ログ内の行を選択します。 インスペクターに QnA Maker の結果が表示されます。
{
"questions": [
"hi",
"greetings",
"good morning",
"good evening"
],
"answer": "Hello!",
"score": 1,
"id": 96,
"source": "QnAMaker.tsv",
"metadata": [],
"context": {
"isContextOnly": false,
"prompts": []
}
}
ディスパッチによる誤っている最上位の意図の解決
ボットが起動したら、ディスパッチされたアプリ間での類似の発話または重複する発話を削除することで、ボットのパフォーマンスを向上することができます。 Dispatch コマンドライン ツールを使用して、ディスパッチ モデルをテストおよび評価することができます。
LUIS モデルを更新するか、新しく作成する
このサンプルは、事前構成済みの LUIS モデルが基になっています。 このモデルを更新したり、新しい LUIS モデルを作成したりするのに役立つ追加情報については、 LUIS 用の反復的なアプリ設計に関する記事を参照してください。
基になるモデル (QnA または LUIS) を更新した後、dispatch refresh を実行して Dispatch LUIS アプリを更新します。 dispatch refresh は基本的に dispatch create と同じコマンドですが、新しい LUIS アプリ ID は作成されません。
LUIS で直接追加された発話は、dispatch refresh の実行時に保持されないことに注意してください。 これらの追加の発話を Dispatch アプリで保持するには、テキスト ファイルでそれらの発話を (1 行に 1 発話ずつ) 追加し、次のコマンドを実行してファイルを Dispatch に追加します。
dispatch add -t file -f <file path> --intentName <target intent name, ie l_General>
追加の発話を含むファイルが Dispatch に追加されると、更新してもそれらの発話は残ります。
リソースを削除する
このサンプルでは、次の手順を使用して削除できるアプリケーションとリソースが多数作成されますが、"他のアプリやサービス" が依存しているリソースは削除しないでください。
LUIS リソースを削除するには:
- luis.ai ポータルにサインインします。
- [My Apps] ページに移動します。
- このサンプルによって作成されたアプリを選択します。
Home AutomationWeatherNLP-With-Dispatch-BotDispatch
- [Delete] をクリックし、 [OK] をクリックして確認します。
QnA Maker リソースを削除するには:
- qnamaker.ai ポータルにサインインします。
- [My knowledge bases]\(マイ ナレッジ ベース\) ページに移動します。
Sample QnAナレッジ ベースの削除ボタンをクリックし、 [Delete] をクリックして確認します。
ベスト プラクティス
このサンプルで使用されているサービスを向上させるには、LUIS および QnA Maker 向けのベスト プラクティスを参照してください。