QnA Maker/Language + Azure Bot Serviceで作成したボットをBot Emulatorでローカルデバッグする

こんばんは。今日はAzure Bot Serviceのデバッグに関する話です。

Azure Cognitive ServiceのQnA MakerまたはLanguageとAzure Bot Serviceを連携させて作成したボットをBot Emulatorでデバッグできるようにするまでの手順をまとめておこうと思います。

事前準備

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にまだ対応していないとのこと・・?(ほんと・・?)

https://stackoverflow.com/questions/70261208/bot-framework-sdk-nodejs-and-custom-question-answering-failed-to-generate-answe

どうにもエラーを解決できないので、Languageのパターンはあきらめました・・解決方法みつけたらまた更新しようと思います。

以上、QnA MakerまたはLanguage + Azure Bot Serviceで作成したボットをBot Emulatorでローカルデバッグする方法の解説でした!同じことで奮闘している方のお役に立ちましたら幸いです。

おしまい

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。

ABOUT US
Yuu113
初めまして。ゆうたろうと申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。 日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。