【30分でできる】Azure Cognitive ServiceのQnA Makerを使ってFAQチャットボットを作ってみた

こんばんは。今日は、Microsoft Azureの提供するCognitive Serviceの1つ、QnA Makerを触ってみましたので、その過程を残しておこうと思います。

QnA Makerとは?

FAQに対応できるBotを数分で構築・デプロイできてしまうAzureのサービスです。

https://www.qnamaker.ai/

公式ドキュメントはこちらから。

https://docs.microsoft.com/ja-jp/azure/cognitive-services/qnamaker/overview/overview

QnA Maker は、データに自然な会話レイヤーを作成できるクラウドベースの自然言語処理 (NLP) サービスです。 任意の入力に対して、カスタム ナレッジ ベース (KB) の情報から最も適切な回答を見つける目的で使用されます。

公式Docより

特徴は以下とのこと。

公式Docより
公式Docより

QnA Makerのアーキテクチャ

公式Docのアーキテクチャ図を探したのですが、ちょうど良いのがなく、なぜか外部のブログにありました。下の図の通り、QnA Makerサービスの裏には、App Service (App Service Plan含む)と、Azure Search, Application Insightsが動いているようです。実際に、QnA Makerを作成すると、これらのリソースも自動的に作成されます。

https://www.ais.com/lessons-learned-azure-cognitive-service-qna-maker/

上記ブログより引用

公式Docで対応するページは以下でしょうか。構成図はないですが、上記と同じリソースについては言及されています。

https://docs.microsoft.com/ja-jp/azure/cognitive-services/qnamaker/reference-app-servic

また、実際にはこのQnA Makerサービスを呼び出すのはチャットボット、というシナリオが多いかと思います。この場合、チャットボットの部分はAzure Bot Serviceで実現することができます。

https://docs.microsoft.com/ja-jp/azure/cognitive-services/qnamaker/overview/overview#create-a-chat-bot-programmatically

公式Docより

QnA Makerの価格

以下の通り、QnA Makerの価格は、QnA Makerサービスの価格+App Serviceの価格+Azure Searchの価格+Application Insightsの価格で算出されます。(+Bot Serviceを使うのであればトータル費用としてはそこも)

https://azure.microsoft.com/ja-jp/pricing/details/cognitive-services/qna-maker/

QnA Maker Standardプランの価格、1154円とありますが、単位は・・?と思って価格計算ツールを見てみましたが、どうやら月額っぽい。QnA Maker (Cognitive Service)サービス自体はほとんどお金がかからなさそうなので、そのバックエンドとなっているApp ServiceとAzure Search、Application Insightsの価格が中心となりそうです。

https://azure.microsoft.com/ja-jp/pricing/calculator/

App ServiceをStandard SKU, SearchをS1 SKU, Application Insightsのログ取り込みが1日1GB、と超ざっくりみつもってみると月2万円ほど。

QnA Makerリソースを作成する

それでは、ここからQnA Makerを実際に触ってみたいと思います!ということでまずはQnA Makerリソースの作成から。

デプロイはさくさく、数分で完了しました。

Knowledge Baseの作成・テスト・公開

それでは、作成したQnA Makerを使ってボットの作成・リリースを進めていきます。このステップでは、以下のクイックスタートチュートリアルが参考にできるかと思います。

https://docs.microsoft.com/ja-jp/azure/cognitive-services/qnamaker/quickstarts/create-publish-knowledge-base

1:QnA Makerの概要ブレードにあるリンクから、QnA Makerポータルへアクセスします。

QnA Makerポータル上のステップ1(QnA Makerリソースの作成)は、既に完了しているのでスキップします。

2:STEP2で、先ほど作成したQnA Makerリソースを指定します。

3: Knowledge Base名を指定します。

4: Knowledge Baseのインプットを設定します。

今回は、日本語のFAQサイトサンプルとして、App ServiceのFAQ URLを入力します。(以下キャプチャに指定しているURLはFAQ形式がうまく認識されず学習できなかったので、試される方はApp Service FAQ URLを指定してみてください。)

https://docs.microsoft.com/ja-jp/azure/app-service/faq-configuration-and-management

必要な初期設定は終わったのでいざKnowledge Baseの作成!と思ったら以下のエラーが。

なるほど、Freeプランにしていたのでおしゃべりのデータが容量オーバーで取り込めなかった模様。いったん必須ではないので、おしゃべりのオプションを無効化してリトライ。

Knowledge Baseの作成は数分ほどで完成。

Knowledge Baseの中身をのぞいてみると・・・おお!さきほど指定したURLのFAQがちゃんとQとAに識別されてデータベースができてますね!スバラシイ・・!

この段階で、Knowledge Baseをテストすることができます。Knowledge Baseの「Test」へ進むと、チャットウィンドウが開きます。ここで、Knowledge Baseに登録されているQのキーワードを入力してみると・・・

ちゃんとAnswerが返ってきました!(回答はもう少しきれいに整形しておく必要はありそうですが)

これで、とりあえずKnowledge baseの作成は完了です!あと少しです!

続いてKnowledege Baseを公開します。

Publishはすぐに完了して、Knowledge Baseのエンドポイントが公開された状態になりました・・!お疲れ様です!

Botを作成する

Knowledge Baseの作成と公開が完了したら、次はそのKnowledge BaseにアクセスBotサービスを作っていきます。先ほどのPublish完了画面で「Create Bot」へ進むと、Azure Bot Serviceのリソース作成画面へ遷移します。なるほど、チャットボット形式でQ and Aを行えるようにするには、Bot ServiceとQnA Makerを連携させる必要があるわけですね。

必要情報を設定して作成を進めます。この操作におけるBot Serviceのデプロイ先も、App Serviceになるみたいですね。先ほどのQnA Makerとアプリは別になりますが、同一App Serviceプランへデプロイすることは可能ですので、同じプランを設定します(規定値)。

SDK言語ですが、上のキャプチャの通りNode.jsでデプロイすると、なぜか以下のエラーが出てでデプロイが成功しなかったのですが、C#にすると問題なくデプロイできました。

ので、実際にはC#でデプロイした前提で進めます。今回は深追いしなかったですが、なぜだろう・・

{“code”:”DeploymentFailed”,”message”:”At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details.”,”details”:[{“code”:”RequestConflict”,”message”:”Cannot modify resource with id ‘xxxx/providers/Microsoft.BotService/botServices/qnamaker013-bot3’ because the resource entity provisioning state is not terminal. Please wait for the provisioning state to become terminal and then retry the request.”}]}

デプロイが完了すると、先ほどのKnowledge Baseを参照するよう事前構成されたBotが利用可能になります。

プロパティ等をみても、Knowledge Baseのエンドポイント情報等はみつけられなかったのですが、ポータルには表れないところで構成されているのかな・・?

https://docs.microsoft.com/ja-jp/azure/cognitive-services/qnamaker/quickstarts/create-publish-knowledge-base#create-a-bot

できたBotをテストしてみます。確かに、先ほど設定したKnowledge Baseをもとにした回答が得られています!

以上で、クイックスタートに沿った実験は完了です!確かにこれはかなり簡単で良いですね・・!

今後の記事では、Teamsなどのチャットツール上でこのBotを使うための構成方法についても調べてみようと思います。

最後までご覧いただきありがとうございました!

(Next Step)追加の構成

ここでは、上で作った基本的なボットに追加で構成できることを順次ご紹介していきたいと思います。

複数ターンの会話

ユーザ認証

おしまい

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

コメントを残す

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

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