Microsoft Azureでチャットボットを作るときに調べたこと7つ

# 概要

## やりたいこと
私が就職活動をしていたころ、人事担当の方に電話で質問をしたり、面接試験のときに本当に聞きたいことを聞いたりするのはとても勇気のいることでした。結局、本当に聞きたいことは聞かずじまいで内定をもらい入社式を迎えた記憶があります。
業務内容が考えていたものと違うとか、給与が安いとか、プログラミングが嫌いとか、ネガティブな意見で会社を辞めていってしまう人もいて、それは会社にとっても社員にとってもお互いに良くないことだと思いました。せめてこれから就職活動を行う学生さんには、質問や不明な点を気軽に質問を行えるようにして、就職の不安を少しでも解消してもらえればいいなと思いチャットボットを作成することにしました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/2379bfb2-821a-10a5-686c-ffb81b4a9ee3.png)

## サービス構成
Microsoft AzureにQnA Makerというものがあります。本来はホームページなどのQ&Aのサイトを読み込ませておき、任意の質問に対してその回答をできるというものです。それとチャットツールであるLINEとを組み合わせることにより、就職活動を行う学生が気軽に利用できるようにしました。
利用するサービス、および最低構成で設定した場合では100request/日で69円/月ほどであることがわかりました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/fddbfa53-0a86-868a-c1a9-dd4f698f65e5.png)

#①作り方
https://qiita.com/howmori/items/138b085d4166960262f3
https://qiita.com/howmori/items/f0bfb9fba093ae83eda0
この2つのQiita記事を参考にしました。
とても丁寧に書かれており、すぐに期待するサービス構成のチャットボットを作成することができました。

#②サービスの金額設定
- Configure Services
- Search services
- App Service
- Application Insights

4つのサービスの金額とできることをまとめています。
これらは[Microsoft Azureのポータル](https://portal.azure.com/)から確認できます。
Application Insightsだけは確認できませんでしたので、[サイト](https://azure.microsoft.com/ja-jp/pricing/details/monitor/)の情報を確認しています。
## Configure Services
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/82a46998-1074-e354-3e46-1e40e538ffa6.png)
## Search services
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/037d8ed3-94fd-c8f6-ede1-c14619eceac4.png)
## App Service
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/b93b4a15-e76e-e395-9343-bc2dd44cb107.png)
## Application Insights
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/623fd443-6738-4da0-9ab2-f3e18d7ec24d.png)

#③App serviceは作成するときはFreeを選べず、作成後にFreeに変更が必要
> 「The App service plan currently defaults to standard(S1) tier. It can be modified by visiting the app service plan resource page once the resource has been created.」

QnA Makerを作成するときにきちんと書いているにもかかわらず、英語なので読み飛ばしてしまいがちです。
その結果、このように請求されるまで気づかずに10,000円/月以上になることも・・・。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/588c2685-0b0d-54e0-4e2a-917eeeda5ba1.png)

#④ヒットしないメッセージを日本語に変える
検索にヒットしないような質問をしたときには定型文`No good match found in KB`が返却されます。
これでは日本で利用するシステムとしては不適当（英語圏でも不適当なメッセージ）ですので、適切なメッセージに変更します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/eec682e1-27bb-a90e-029e-207ab02b05e3.png)

[ドキュメントのページ](https://docs.microsoft.com/ja-jp/azure/cognitive-services/qnamaker/concepts/confidence-score#no-match-found)を確認して、DefaultAnswerを設定しました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/b48caef1-d895-384b-a574-0bb39bce54ba.png)

そうすると、指定したメッセージを返答するようになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/be411513-a3eb-d146-5563-9af33f16880b.png)

#⑤信頼度スコアに一定の閾値を設ける
[ドキュメントのページ](https://docs.microsoft.com/ja-jp/azure/cognitive-services/qnamaker/concepts/confidence-score)にあるように検索結果には信頼度スコアが設定されています。
初期状態のQnA Makerではどれだけ信頼度スコアが低くても最大のスコアを取るものを返しており、上記ページに見られるような50以上を閾値として設定するような項目は見られませんでした。もし設定項目がありましたら教えてください。:bow_tone3:

そこで、Logic Apps側で返却された信頼度スコアが50より大きい場合は検索結果のメッセージを返し、以下の場合は定型文を返すようにします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/8cd9d1b5-cb67-7359-e0fe-bed240c8546f.png)
この「条件」の比較では数値の比較ができずに文字列の比較となってしまうため、scoreの値と50のminを取ってそれが50と等しいかどうかで判定するようにしました。
True（scoreの方が小さい）の場合は変数Messageはそのまま変えません。False（scoreの方が大きい）の場合は変数Messageにanswerの値を設定するようにします。
条件で使っているのは`min(body('HTTP')['answers'][0]['score'],50)`で、
変数設定で使っているのは`body('HTTP')['answers'][0]['answer']`です。

変数Messageは最初の方で初期化してあります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/50bebcee-ad98-765f-1a10-0c1d448b9385.png)

また、LINEに返却するときに変数Messageの値を返すように修正してあります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/61357d1b-76a6-feeb-55f6-d4ae8e393070.png)

これで、信頼度スコアの閾値を50に設定することができました。

#⑥ログ確認
Application Insightsのログ確認方法は[ドキュメントのページ](https://docs.microsoft.com/en-us/azure/cognitive-services/QnAMaker/how-to/get-analytics-knowledge-base)に説明があります。これで、どの質問に対してどの回答をしたのかがわかりますので、Q&Aを精査することができます。

#⑦サービスごとの金額設定の確認方法
- Configure Services
- Search services
- App Service
- Application Insights

最後にサービスごとの金額設定の確認方法をまとめます。作成した後は、一通り確認しなおすことをおススメします。
## Configure Services
Configure ServicesはPricing tierから確認・変更ができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/cad7eec5-e558-2ecd-fb7b-7893436ed516.png)
## Search services
Search servicesはOverviewから確認のみできます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/e683bb61-825a-e627-04d2-12f7f1ca04d7.png)
## App Service
App Serviceはスケールアップから確認・変更ができます。作成時はS1になっているので気をつけてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/b1bbc4b8-c6a1-3cef-0c3c-d459548c4d93.png)
## Application Insights
Application Insightsは使用とコストの見積もりから確認のみできます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/360667/744fda62-54fd-e5ca-0062-cf9fa80bd8f3.png)

#おわりに
できるだけお金をかけないように設定・確認を行いながら作業をしました。
実際に運用するときにはサービスごとにどの設定にするのか、それによりいくらかかるのかに悩むことになりそうです。