Orchestrator で複数の LUIS モデルと QnA モデルを使用する
適用対象: SDK v4
注意
Azure AI QnA Maker は、2025 年 3 月 31 日に廃止される予定です。 2022 年 10 月 1 日から、新しい QnA Maker リソースやナレッジ ベースを作成することはできません。 新しいバージョンの質問と回答機能が、Azure AI 言語の一部として利用できるようになりました。
Azure AI 言語の機能であるカスタム質問応答は、QnA Maker サービスの更新バージョンです。 Bot Framework SDK での質問と回答のサポートの詳細については、「 自然言語理解」を参照してください。
注意
Language Understanding (LUIS) は、2025 年 10 月 1 日に廃止される予定です。 2023 年 4 月 1 日から、新しい LUIS リソースを作成することはできません。 新しいバージョンの言語理解が Azure AI 言語の一部として利用できるようになりました。
Azure AI Language の機能である会話言語理解 (CLU) は、LUIS の更新バージョンです。 Bot Framework SDK での言語理解のサポートの詳細については、「 自然言語理解」を参照してください。
ボットで複数のLanguage Understanding (LUIS) モデルと QnA Maker ナレッジ ベースが使用されている場合は、Bot Framework Orchestrator を使用して、ユーザー入力に最も適した LUIS モデルまたは QnA Maker サポート情報判断できます。 CLI コマンドをbf orchestrator
使用して Orchestrator スナップショット ファイルを作成し、スナップショット ファイルを使用して、実行時にユーザー入力を正しいモデルにルーティングできます。
この記事では、Orchestrator で既存の QnA Maker サポート情報を使用する方法について説明します。
- 新しいボットの場合は、Azure AI 言語の 質問応答 と オーケストレーション ワークフロー 機能の使用を検討してください。
- Orchestrator の詳細については、「 Composer での Orchestrator を使用した意図認識」を参照してください。
- コマンドの
bf orchestrator
詳細については、 Bot Framework CLI README に関するページを参照してください。
前提条件
- LUIS アプリを作成するための luis.ai アカウント。
- QnA Maker アカウントと既存の QnA Maker サポート情報。
- C# (アーカイブ済み) またはJavaScript (アーカイブ済み) の Orchestrator サンプルを含む NLP のコピー。
- ボットの基本、LUIS、および QnA Maker に関する知識。
- コマンド ライン BF CLI をインストールします。
このサンプルについて
このサンプルは、LUIS および QnA Maker プロジェクトの定義済みのセットに基づいています。 ただし、ボットで QnA Maker を使用するには、QnA Maker ポータルに既存のサポート情報が必要です。 これで、ボットからナレッジ ベースを使用してユーザーの質問に回答できるようになります。
新しいボット開発の場合は、 Power Virtual Agents の使用を検討してください。 Bot Framework SDK ボットの新しいサポート情報を作成する必要がある場合は、次の Azure AI サービスに関する記事を参照してください。
ユーザー入力を受け取るたびに、OnMessageActivityAsync
が呼び出されます。 このモジュールでは、最上位スコアのユーザーの意図を検索し、その結果を DispatchToTopIntentAsync
に渡します。 DispatchToTopIntentAsync は、適切なアプリ ハンドラーを呼び出します。
ProcessSampleQnAAsync
- ボットに関する FAQ の質問。ProcessWeatherAsync
-天気クエリ。ProcessHomeAutomationAsync
-家庭用照明コマンド。
ハンドラーによって LUIS または QnA Maker サービスが呼び出され、生成された結果がユーザーに返されます。
LUIS アプリを作成する
Orchestrator スナップショット ファイルを作成する前に、LUIS アプリと QnA ナレッジ ベースを作成して発行する必要があります。 この記事で参照されているサンプル ボットでは、 フォルダー内の NLP With Orchestrator サンプルに含まれる次のモデルを \CognitiveModels
使用します。
名前 | 説明 |
---|---|
HomeAutomation | 関連付けられているエンティティ データによってホーム オートメーションの意図を認識する LUIS アプリ。 |
Weather | 場所データによって天気関連の意図を認識する LUIS アプリ。 |
QnA Maker | ボットに関するシンプルな質問への回答を提供する QnA Maker ナレッジ ベース。 |
LUIS アプリの作成
サンプルの cognitive models ディレクトリにある HomeAutomation ファイルと Weather .lu ファイルから LUIS アプリを作成します。
次のコマンドを実行して、アプリのインポート、トレーニング、および運用環境への発行を行います。
bf luis:build --in CognitiveModels --authoringKey <YOUR-KEY> --botName <YOUR-BOT-NAME>
アプリケーション ID、表示名、オーサリング キー、場所を記録します。
詳細については、 LUIS ポータルで LUIS アプリを作成 する方法と、LUIS アプリに接続するための値を取得する 方法に関するページの 「ボットに自然言語理解を追加する 」と、アプリを トレーニング して運用環境に 発行 する方法に関する LUIS ドキュメントを参照してください。
ボットをナレッジ ベースに接続するための値を取得する
注意
Azure AI QnA Maker は、2025 年 3 月 31 日に廃止される予定です。 2022 年 10 月 1 日から、新しい QnA Maker リソースやナレッジ ベースを作成することはできません。 新しいバージョンの質問と回答機能が、Azure AI 言語の一部として利用できるようになりました。
Azure AI 言語の機能であるカスタム質問応答は、QnA Maker サービスの更新バージョンです。 Bot Framework SDK での質問と回答のサポートの詳細については、「 自然言語理解」を参照してください。
既存のサポート情報と QnA Maker のホスト名とエンドポイント キーが必要です。
ヒント
QnA Maker のドキュメントには、サポート情報を作成、トレーニング、発行する方法に関する手順が記載されています。
Orchestrator スナップショット ファイルを作成する
Orchestrator ツールの CLI インターフェイスは、実行時に正しい LUIS または QnA Maker アプリにルーティングするための Orchestrator スナップショット ファイルを作成します。
サポートされている最新バージョンの Visual C++ 再頒布可能パッケージ パッケージをインストールする
コマンド プロンプトまたはターミナル ウィンドウを開き、ディレクトリをサンプル ディレクトリに変更します
npm と Bot Framework CLI の現在のバージョンがあることを確認します。
npm i -g npm npm i -g @microsoft/botframework-cli
Orchestrator 基本モデル ファイルのダウンロード
mkdir model bf orchestrator:basemodel:get --out ./model
Orchestrator スナップショット ファイルを作成する
mkdir generated bf orchestrator:create --hierarchical --in ./CognitiveModels --out ./generated --model ./model
パッケージのインストール
このアプリを初めて実行する前に、いくつかの NuGet パッケージがインストールされていることを確認します。
- Microsoft.Bot.Builder
- Microsoft.Bot.Builder.AI.Luis
- Microsoft.Bot.Builder.AI.QnA
- Microsoft.Bot.Builder.AI.Orchestrator
お使いの appsettings.json ファイルを手動で更新する
すべてのサービス アプリが作成されたら、それぞれの情報を "appsettings.json" ファイルに追加する必要があります。 C# (アーカイブ済み) コードの最初のサンプルには、空の appsettings.json ファイルが含まれています。
appsettings.json
次に示すエンティティごとに、前の手順で記録した値を追加します。
"QnAKnowledgebaseId": "<knowledge-base-id>",
"QnAEndpointKey": "<qna-maker-resource-key>",
"QnAEndpointHostName": "<your-hostname>",
"LuisHomeAutomationAppId": "<app-id-for-home-automation-app>",
"LuisWeatherAppId": "<app-id-for-weather-app>",
"LuisAPIKey": "<your-luis-endpoint-key>",
"LuisAPIHostName": "<your-dispatch-app-region>",
すべての変更が完了したら、このファイルを保存します。
ボットからサービスに接続する
LUIS および QnA Maker サービスに接続するために、ボットは設定ファイルから情報を取得します。
BotServices.cs では、構成ファイル appsettings.json に含まれる情報を使用して、Orchestrator ボットを 、Weather
、および SampleQnA
サービスにHomeAutomation
接続します。 コンストラクターでは、ご自身で指定した値が、これらのサービスへの接続に使用されます。
BotServices.cs
ボットからのサービスを呼び出す
ユーザーからの入力ごとに、ボット ロジックはユーザー入力を Orchestrator Recognizer に渡し、返された上位の意図を検索し、その情報を使用して入力に適したサービスを呼び出します。
メソッドが呼び出されるたびに OnMessageActivityAsync
DispatchBot.cs ファイルで、受信ユーザー メッセージをチェックし、Orchestrator Recognizer から最上位の意図を取得します。 次に、 と recognizerResult
を正しいメソッドに渡topIntent
してサービスを呼び出し、結果を返します。
bots\DispatchBot.cs
認識結果を操作する
Orchestrator 認識エンジンによって結果が生成されると、発話を最も適切に処理できるサービスが示されます。 このボットのコードでは、要求を対応するサービスにルーティングし、呼び出されたサービスからの応答を要約します。 Orchestrator から返される 意図 に応じて、このコードでは、返された意図を使用して正しい LUIS モデルまたは QnA サービスにルーティングします。
bots\DispatchBot.cs
メソッドと ProcessWeatherAsync
メソッドはProcessHomeAutomationAsync
、ターン コンテキスト内に含まれるユーザー入力を使用して、正しい LUIS モデルから最上位の意図とエンティティを取得します。
メソッドはProcessSampleQnAAsync
、ターン コンテキスト内に含まれるユーザー入力を使用して、サポート情報から回答を生成し、その結果をユーザーに表示します。
注意
これが運用環境のアプリケーションの場合は、ここで、選択した LUIS メソッドが、指定されたサービスに接続されたうえで、そのメソッドによってユーザー入力が渡され、返された LUIS の意図とエンティティ データが処理されます。
ボットをテストする
ご自身の開発環境を使用して、サンプル コードを開始します。 アプリによって開かれたブラウザー ウィンドウのアドレス バーに表示される localhost アドレスをメモします。
https://localhost:<Port_Number>
Bot Framework Emulator開き、[ボットを開く] ボタンをクリックします。
[ ボットを開く ] ダイアログ ボックスで、ボット エンドポイントの URL (など
http://localhost:3978/api/messages
) を入力します。 [Connect] をクリックします。参考のために、ご自身のボット用に作成されたサービスに含まれる質問とコマンドの一部を次に示します。
- QnA Maker
hi
,good morning
what are you
,what do you do
- LUIS (ホーム オートメーション)
turn on bedroom light
turn off bedroom light
make some coffee
- LUIS (天気)
whats the weather in redmond washington
what's the forecast for london
show me the forecast for nebraska
- QnA Maker
ユーザー発話を QnA Maker にルーティングする
エミュレーターでテキストを
hi
入力し、発話を送信します。 ボットはこのクエリを Orchestrator に送信し、さらに処理するためにこの発話を取得する必要がある子アプリを示す応答を返します。ログ内の
Orchestrator Recognition Trace
行を選択すると、エミュレーターで JSON 応答を確認できます。 オーケストレーターの結果がインスペクターに表示されます。{ "type": "trace", "timestamp": "2021-05-01T06:26:04.067Z", "serviceUrl": "http://localhost:58895", "channelId": "emulator", "from": { "id": "36b2a460-aa43-11eb-920f-7da472b36492", "name": "Bot", "role": "bot" }, "conversation": { "id": "17ef3f40-aa46-11eb-920f-7da472b36492|livechat" }, "recipient": { "id": "5f8c6123-2596-45df-928c-566d44426556", "role": "user" }, "locale": "en-US", "replyToId": "1a3f70d0-aa46-11eb-8b97-2b2a779de581", "label": "Orchestrator Recognition", "valueType": "OrchestratorRecognizer", "value": { "text": "hi", "alteredText": null, "intents": { "QnAMaker": { "score": 0.9987310956576168 }, "HomeAutomation": { "score": 0.3402091165577196 }, "Weather": { "score": 0.24092200496795158 } }, "entities": {}, "result": [ { "Label": { "Type": 1, "Name": "QnAMaker", "Span": { "Offset": 0, "Length": 2 } }, "Score": 0.9987310956576168, "ClosestText": "hi" }, { "Label": { "Type": 1, "Name": "HomeAutomation", "Span": { "Offset": 0, "Length": 2 } }, "Score": 0.3402091165577196, "ClosestText": "make some coffee" }, { "Label": { "Type": 1, "Name": "Weather", "Span": { "Offset": 0, "Length": 2 } }, "Score": 0.24092200496795158, "ClosestText": "soliciting today's weather" } ] }, "name": "OrchestratorRecognizerResult", "id": "1ae65f30-aa46-11eb-8b97-2b2a779de581", "localTimestamp": "2021-04-30T23:26:04-07:00" }
発話
hi
( ) は Orchestrator の QnAMaker 意図の一部であり、 としてtopScoringIntent
選択されているため、ボットは、今度は同じ発話を使用して QnA Maker アプリに対して 2 番目の要求を行います。QnAMaker Trace
エミュレーター ログの行を選択します。 インスペクターに QnA Maker の結果が表示されます。{ "questions": [ "hi", "greetings", "good morning", "good evening" ], "answer": "Hello!", "score": 1, "id": 96, "source": "QnAMaker.tsv", "metadata": [], "context": { "isContextOnly": false, "prompts": [] } }
[Python (アーカイブ済み)]: (https://github.com/microsoft/BotBuilder-Samples/tree/main/archive/samples/python/14.nlp-with-orchestrator