ここでは、Azure Bot Service を作成し、前回作成した QnA Maker と連携してみます。
Bot Service を QnA のテンプレートで作成した際、回答の精度を示すスコアが特定の 閾値 より低い場合、回答を返さない(正確には「No good match in FAQ.」と返します)仕組みが SDK で実装されています。
その 閾値 の変更方法についても触れます。
Overview
1. QnA Maker の作成(前回)
2. QnA Maker に REST でアクセス(前回)
3. Bot Service の作成(今回)
4. QnA の回答の閾値の変更(今回)
3. Bot Service の作成
今回は、Azure Bot Service の Functions Bot で進めます。Web App Bot の方は、諸事情(現時点では、build.cmd
を動かすためのNodeのファイルが空で動かない...ですよね?) により動かないと思ってます。
ということで、 Azure Portal(https://portal.azure.com/) から 新規
> AI + Cognitive Services
> すべて表示
を開きます(検索で「Functions Bot」って入力すれば一発で手出来ますが...)。
Functions Bot をクリックします。
で、作成
をクリックします。
入力項目を埋めていきます。ボット名やリソースグループ名、場所は適当(自分なりに適切)に入れましょう(場所、私はだいたい West US 2を使ってますが特に理由はありません)。
価格レベルは、F0 にしました。もちろん自己責任ですが私の場合、ちょっとやそっと使うくらいならほとんど課金がかかりません。
ボットテンプレートは、Question and Answer (C#) にします。ホスティングプランはもちろん 従量課金 、でストレージを作るのと、Application Insights は今回はどうでもいいです。
作成
をクリックすると、だいたい1-2分で作成されます。
できたら、そのリソースグループ(私は「func-bot-qna」としました)に移動してみましょう。種類が Functions Bot のやつをクリックします。
Functions Bot を開いたら、アプリケーション設定 というメニューをクリックします(下の方にあります)。で、開いたブレードの下の方に QnAKnowledgebaseId と QnASubscriptionKey の値が空になっているところが見えますね。ここに QnA Maker から取得できる値を入力します。
QnA Maker のポータルから値を取得
前回操作した QnA Makerのポータル(https://qnamaker.ai/) の My services を開き、作ったサービス(私のは demo15 )の View Code
をクリックします。
そして、 QnAKnowledgebaseId と QnASubscriptionKey の値を取得しましょう(どれ?って場合は、前回のパブリッシュのあたりをご覧ください)。
Azure ポータルに戻り....
取得した値を入力し、忘れず保存しましょう。
テスト in Web Chat
Fuction Bot のブレードで、Test in Web Chat をクリックすると、 Web Chat でテストができます。QnAで試した時と同じ回答が得れるはずです。
前回作成した QnA Maker と同じものを作っているのであれば、一例として、「EA契約を買いたい」と入力してみましょう。QnA Maker のポータルでは回答が得れるのに、Azure Bot Service では回答が得れず、「No good match in FAQ.」となってしまいます。
これは、テンプレートで作成されたプログラムが、閾値0.5(0~1のうちの0.5 = 50点/100点満点中)以下の場合に「No good match in FAQ.」と返すようにしているからです。
4. QnA の回答の閾値の変更
この閾値を変更する方法です。Azure ポータルで、先ほど作成したリソースグループ(私の場合「func-bot-qna」というリソースグループ)のブレードに戻りましょう。
ここで、Function App のリソースをクリックします。
Function App のブレードが開いたら、プラットフォーム機能
> App Service エディター
を開きましょう。
EXPLORE
で、 WWWROOT > messages
の中に BasicQnAMakerDialog.csx
というファイルがあります。開きましょう。
この56行目を右の方にスクロールすると、閾値として設定されている値が表示されます。この値を適当に設定することで対応ができます。
前回POSTMANで確認をすることでスコアをみることができるのを紹介しましたが、「EAを買いたい」という質問のスコアは17点くらい( = 0.17....)です。つまりは 0.1くらいに設定すれば表示されるわけですなと。
この値を0.1にしてみましょう。エディタの機能で自動で保存されます(画面右上の方の表示が「SAVED」になると保存完了です)。
ちなみに、ここらへんで使われている QnAMakerService
や BasicQnAMakerDialog
の実装は、GitHub で確認できますのでいいですね♪
テスト in Web Chat 再び
試してみましょう。
無事に表示されました。と言っても、閾値を下げれば精度もさがるので、バランスをとってよい チャットボットを作れるよう調整が必要ですね。
終わりに
QnA Maker & Bot Service はある程度ノンコーディングでやれますので、最初の一歩としてはとっつきやすい方ではないでしょうか。
Cannel との連携について、簡単な内容ですが書いてみました。
念のため書いておきますが、もう使わない場合、リソースグループを消してリソースをすっきりさせましょう♪