こんばんは。今日はAzure Bot Serviceのデバッグに関する話です。
Azure Cognitive ServiceのQnA MakerまたはLanguageとAzure Bot Serviceを連携させて作成したボットをBot Emulatorでデバッグできるようにするまでの手順をまとめておこうと思います。
Contents
事前準備
QnA MakerまたはLanguageと、Bot Serviceリソースを使ったボットがAzure上にデプロイされていること。まだの方はこちらを参照ください。
Language
QnA Maker
加えて、ローカル環境上に以下が準備されていること。
- Bot Framework Emulator
- ソースコードエディタ(VSCode)
- ランタイム(Node.jsまたは.NET Core)
その上で、Azure Bot ServiceからBotのソースコードをダウンロードして、VSCodeで開けるようにしておきます。
QnA Maker – C#の場合
まずはQnA Makerのパターンです。こちらはC#です。
最初にプロジェクトルートに規定で作成されているappsettings.jsonにBotが利用する環境変数を設定しておきます。
## appsettings.json
{
"MicrosoftAppId": "xxxxxx",
"MicrosoftAppPassword": "xxxxxx",
"QnAKnowledgebaseId": "xxxxxx",
"QnAEndpointKey": "xxxxxx",
"QnAEndpointHostName": "xxxxxx"
}
なお、この環境変数の値はBot ServiceのコードがデプロイされているAzure App Serviceのアプリケーション設定から確認できます。
この設定ができたら、以下コマンドを実行してローカルでアプリを起動します。
dotnet run --project QnABot.csproj
この状態でBot Emulatorに接続します。
Open a botを選択して、Bot URLと、Bot ServiceのアプリID/Passwordを入力して、「Connect」を押します。
なお、Bot ServiceのアプリIDは以下から確認できます。パスワードは、以下画面でMicrosoft App ID横の管理へ進み、新しいシークレットを作成すれば取得できます。
すると、Emulator上でボットが実行できるようになりました・・!
ちなみに、環境変数を設定し忘れると、Emulator接続時に以下のHTTP500エラーがでるので注意です。
fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
An unhandled exception has occurred while executing the request.
System.ArgumentException: KnowledgeBaseId
・・・・
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished in 7.9086ms 500 text/plain
Language – Node.js
続いて、LanguageのQuestion and Answeringで作成したボットについてもEmulatorでデバッグできるか試してみました。なお、こちらはNode.jsで試してみております。
結論、うまくいきませんでした・・
一応、試したことを以下に書いておきます。
はじめに、Botが内部的に読み込んでいる環境変数が、ローカルだと定義されていないので、.envファイルをプロジェクトルート直下に作成して以下の設定を追加しておきます。
##.envファイル
MicrosoftAppId="XXXXXX"
MicrosoftAppPassword="XXXXXX"
QnAKnowledgebaseId="XXXXXX"
QnAAuthKey="XXXXXX"
QnAEndpointHostName="https://XXXXXXX.cognitiveservices.azure.com/"
QnAServiceType="language"
なお、QnA Makerの場合と同様必要な環境変数設定についてはAzure上BotがデプロイされているApp Serviceのアプリケーション設定から確認できます。
その上で、VSCodeターミナルから以下コマンドを実行していきます。
cd プロジェクトフォルダ
npm install
npm start
これでアプリがローカルで起動するようになります。この状態でBot Emulatorを起動して、QnA Makerのときと同じようにアプリのメッセージングエンドポイントに接続します。
すると、接続はうまくできたのですが、チャットを打ってみると、以下のエラーが発生しました。
"DialogContextError: Failed to generate answers: [object Object]
このエラーメッセージで検索してみると、以下のStack Overflowにぶつかりました。どうやらBot FrameworkではLanguageのCustom Question and Answeringにまだ対応していないとのこと・・?(ほんと・・?)
どうにもエラーを解決できないので、Languageのパターンはあきらめました・・解決方法みつけたらまた更新しようと思います。
以上、QnA MakerまたはLanguage + Azure Bot Serviceで作成したボットをBot Emulatorでローカルデバッグする方法の解説でした!同じことで奮闘している方のお役に立ちましたら幸いです。
おしまい
コメントを残す