2019年4月に Bot Framework v4 Template for QnA Maker が更新され、QnA Maker と Bot Service を使ったチャットボットをサクッと作れるようになりました。試してみます。
リリースされたばかりで多少の罠とか縄とかありますが、そのうち改善されるでしょう。
目次は以下です。
今回サクッとできるものは、Bot Service と QnA Maker を使ったチャットボットですが、イメージはこんな感じ。
簡単に 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 をクリックします。
Azure Portal で QnA Maker のインスタンスを作成
QnA Maker が GAしたあたり(2018/5くらい?)から、Azure 上で QnA Maker 自体のリソースをホストするインスタンスが必要になりましたので、"Create a QnA service" ボタンをクリックして Azure Portal へ進み、作成しましょう。
作成すると、Azure Search や Web Apps、それをホストする App Service Plan なども作られます。
注意点としては、Azure Searchの料金をFreeに設定しても、App Service Plan を新規で作った場合は、Pricing tier がS1(有料)で作られます。気になる方はFreeに変更しておきましょう。
Freeへの変更方法は、作成したリソースグループを開いて App Service Plan をクリックします。
Scale up(App Service plan) をクリックして、Dev / Test の中から F1 をクリックし、最後の下の方にある Apply(適用かな)ボタンをクリックしましょう。
QnA のポータルで QnA の knowledge base を作成を再開
QnA Maker のポータルで、先ほど開いていた「Create a knowledge base」画面に戻ったら、"STEP 2" の Connect your QnA service to your KB. で Refresh ボタンをクリックしましょう。先ほど作成した情報が選択できるようになります。
STEP3 では適当に名前を入力し、STEP4では作成したい knowledge のURLやファイルを設定します。
私がなんのKBかどうでもいいけど検証したいときは、Azure サポートに関する FAQのURL ( https://azure.microsoft.com/ja-jp/support/faq/ )を入力しています。必要な項目を入力して Create your KB をクリックしましょう。数分もあれば作成されます。
作成に関する不明点やその後の質問の回答のテストは公式ページに書いてある内容で充分だと思うので、リンクを貼っておきます。
QnA Maker での作成、発行、回答 - Azure Cognitive Services | Microsoft Docs
QnA Maker の発行
QnA Maker をさきほど作成した Azure の QnA Maker のインスタンスに発行します。画面上部のメニューにある PUBLISH をクリック > 画面中央の Publish ボタンをクリックしましょう。これで Azure に発行完了です。
Azure Bot Service と連携
前述で Publish ボタンをクリックすると以下の画面になります。Create Bot をクリックしましょう。Azure Portal へ遷移します。
余談: トラブルシューティング
Azure Portal へ遷移した際、こんな情報が表示されたらあかんやつです。
雑に意訳すると「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 の入力項目がある画面に進みます。
必要な項目はだいたいデフォルトで入力されていますが、注意点は以下くらいでしょうか。
- Pricing tier は F0 にしておくとよいでしょう。
- QnA Auth Key は、QnA Maker のポータルの "Create Bot " ボタンをクリックしたページに記載があります。以下図だと赤枠の部分ですが、EndopointKey より後ろの部分(塗りつぶしてる部分)の値を入力しましょう。
Create ボタンをクリックすると作成されます。デプロイまでは1-2分あれば完了するでしょう。
Bot Service から動作確認
Bot Service のデプロイが完了したら、Bot Serviceリソースに移動し、Test in Web Chat から適当にテストしてみましょう。先ほど QnA Maker のインスタンスをFreeプランにしたので、初回がコールドスタートして遅い(もしくはタイムアウトするかも)しれないですが、そこは無料なので大目にみましょう。
余談ですが、コールドスタートの解消はいくつか方法があります。そのひとつに、Web Appsには Always on という設定がありますのでこれを使える Pricing tier にして Always onを設定すればコールドスタートしません。
タイムアウトしたらもう一回くらいメッセージを送ると大丈夫だと思います。
終わりに
結局ノーコーディングでできてしまいました。タイトルにノーコーディングって入れようっと♪