BEACHSIDE BLOG

Azure とか C# 好きなエンジニアの個人メモ ( ・ㅂ・)و ̑̑

ノーコーディング で QnA Maker のチャットボットを作る: 2019/04編 (Bot Framework v4 Template for QnA Maker)

2019年4月に Bot Framework v4 Template for QnA Maker が更新され、QnA Maker と Bot Service を使ったチャットボットをサクッと作れるようになりました。試してみます。

リリースされたばかりで多少の罠とか縄とかありますが、そのうち改善されるでしょう。

目次は以下です。

今回サクッとできるものは、Bot Service と QnA Maker を使ったチャットボットですが、イメージはこんな感じ。

f:id:beachside:20190419151840p:plain

簡単に QnA Maker と Bot Service について書いておくと、

  • QnA Maker はただのイケてる AI の検索エンジンです(こーゆーとこで AI って単語使うの嫌い派ですが)。検索の結果を返すだけの子です。
  • Bot Service はチャットボットの Web API です。チャットボット機能をつかさどっています。今回作るチャットボットだと、質問を QnA Maker に問い合わせて、回答をチャットしてきた相手に返します。


早速作ってみましょう。

QnA Maker の作成

QnA Maker のポータル( https://www.qnamaker.ai/ )で新しく QnA Maker を作ってみます。サインインした状態で、Create a knowledge base をクリックします。

f:id:beachside:20190419134128p:plain:w600


Azure Portal で QnA Maker のインスタンスを作成

QnA Maker が GAしたあたり(2018/5くらい?)から、Azure 上で QnA Maker 自体のリソースをホストするインスタンスが必要になりましたので、"Create a QnA service" ボタンをクリックして Azure Portal へ進み、作成しましょう。

f:id:beachside:20190419134445p:plain:w600

作成すると、Azure Search や Web Apps、それをホストする App Service Plan なども作られます。

注意点としては、Azure Searchの料金をFreeに設定しても、App Service Plan を新規で作った場合は、Pricing tier がS1(有料)で作られます。気になる方はFreeに変更しておきましょう。
Freeへの変更方法は、作成したリソースグループを開いて App Service Plan をクリックします。

f:id:beachside:20190419135304p:plain


Scale up(App Service plan) をクリックして、Dev / Test の中から F1 をクリックし、最後の下の方にある Apply(適用かな)ボタンをクリックしましょう。

f:id:beachside:20190419135118p:plain


QnA のポータルで QnA の knowledge base を作成を再開

QnA Maker のポータルで、先ほど開いていた「Create a knowledge base」画面に戻ったら、"STEP 2" の Connect your QnA service to your KB.Refresh ボタンをクリックしましょう。先ほど作成した情報が選択できるようになります。

f:id:beachside:20190419140003p:plain


STEP3 では適当に名前を入力し、STEP4では作成したい knowledge のURLやファイルを設定します。

私がなんのKBかどうでもいいけど検証したいときは、Azure サポートに関する FAQのURL ( https://azure.microsoft.com/ja-jp/support/faq/ )を入力しています。必要な項目を入力して Create your KB をクリックしましょう。数分もあれば作成されます。

f:id:beachside:20190419140009p:plain

作成に関する不明点やその後の質問の回答のテストは公式ページに書いてある内容で充分だと思うので、リンクを貼っておきます。

QnA Maker での作成、発行、回答 - Azure Cognitive Services | Microsoft Docs

QnA Maker の発行

QnA Maker をさきほど作成した Azure の QnA Maker のインスタンスに発行します。画面上部のメニューにある PUBLISH をクリック > 画面中央の Publish ボタンをクリックしましょう。これで Azure に発行完了です。

f:id:beachside:20190419142512p:plain


Azure Bot Service と連携

前述で Publish ボタンをクリックすると以下の画面になります。Create Bot をクリックしましょう。Azure Portal へ遷移します。

f:id:beachside:20190419185510p:plain:w600


余談: トラブルシューティング

Azure Portal へ遷移した際、こんな情報が表示されたらあかんやつです。

f:id:beachside:20190419161535p:plain

雑に意訳すると「QnAボット作ろーと思ったけど必須のパラメーター足りんわー」と言ってますね。

これは、App Service Plan の runtime が古いときに表示されます。Azure Search の Web Apps(App Service) を再起動すると更新されるとこちらに記載ありますが、私の場合、再起動してから約2時間後に更新されました...チーン。

ブラウザーのアドレスバーでURLを確認してみましょう。

https://portal.azure.com/?Microsoft_Azure_BotService_subscriptionId=undefined&Microsoft_Azure_BotService_qnaHostName=qna432-4-search.azurewebsites.net&Microsoft_Azure_BotService_qnaKbId=***********************&Microsoft_Azure_BotService_csResourceGroupName=undefined&Microsoft_Azure_BotService_csAccountName=qna432-4-search&botsvc.rp=true#create/Microsoft.BotServiceSdkGalleryPackage

あれま、Microsoft_Azure_BotService_subscriptionId と Microsoft_Azure_BotService_csResourceGroupName が undefined となっています。runtime が古いためこれが undefined になってしまい、このトラブルが起こったたようですね。

この症状になってQnA Maker の Web Apps(App Service) を再起動しても改善ない場合は、undefined となっている項目を以下のように手入力してURLを開きなおせば、無理やり改善できます。

  • Microsoft_Azure_BotService_subscriptionId:
    QnA Maker のインスタンスのサブスクリプションID。QnA Maker のインスタンスのリソースグループを開くと Overview(概要) に記載があります。
  • Microsoft_Azure_BotService_csResourceGroupName:
    QnA Maker のインスタンスがある Resource Group 名を入力

閑話休題

話を戻しましょう。
前述の修羅みを乗り越え正常に動作した場合は、以下のように QnA Auth Key の入力項目がある画面に進みます。

f:id:beachside:20190419154509p:plain:w300


必要な項目はだいたいデフォルトで入力されていますが、注意点は以下くらいでしょうか。

  • Pricing tier は F0 にしておくとよいでしょう。
  • QnA Auth Key は、QnA Maker のポータルの "Create Bot " ボタンをクリックしたページに記載があります。以下図だと赤枠の部分ですが、EndopointKey より後ろの部分(塗りつぶしてる部分)の値を入力しましょう。 f:id:beachside:20190419160508p:plain:w600


Create ボタンをクリックすると作成されます。デプロイまでは1-2分あれば完了するでしょう。

Bot Service から動作確認

Bot Service のデプロイが完了したら、Bot Serviceリソースに移動し、Test in Web Chat から適当にテストしてみましょう。先ほど QnA Maker のインスタンスをFreeプランにしたので、初回がコールドスタートして遅い(もしくはタイムアウトするかも)しれないですが、そこは無料なので大目にみましょう。

余談ですが、コールドスタートの解消はいくつか方法があります。そのひとつに、Web Appsには Always on という設定がありますのでこれを使える Pricing tier にして Always onを設定すればコールドスタートしません。

タイムアウトしたらもう一回くらいメッセージを送ると大丈夫だと思います。

f:id:beachside:20190419160817p:plain

終わりに

結局ノーコーディングでできてしまいました。タイトルにノーコーディングって入れようっと♪