無料で手早く作る:Teams で動く FAQ bot 開発 [前編] (QnA Maker, Azure Bot Services, C#)

公開:2021/02/19
更新:2021/03/03
14 min読了の目安(約13000字TECH技術記事

Teams で動く FAQ bot 開発

『無料で手早く作る:Teams で動く FAQ bot 開発』について書きました!

ただ、これは(ハンズオン資料としても使って欲しいので)スクショを大量に入れたら
めちゃくちゃ長くなってしまったので
前編 と 後編 に分けました!

https://twitter.com/chomado/status/1362601287926259713

登場人物

  1. QnA Maker でナレッジベースを作り
  2. Visual Studio でクライアント (bot) を開発し
  3. それを Microsoft Azure (クラウド) でホストし
  4. Microsoft Teams で動かす

アーキテクチャ図

項目
Azure Bot Services bot の開発からどこに公開(LINE や Teams などに接続)などまで行えるマネージドサービス。今回はこの中の「Web アプリ ボット」のリソースを作る
Azure App Services (Web Apps) web アプリの動く PaaS。bot アプリや Web API も動いてる
Microsoft Bot Framework ボット作成のための開発フレームワーク (SDK)。C#、JavaScript、Python に対応。今回は bot をこのフレームワークを使って書いた。GitHub でオープンソースで開発されている。レポジトリはこちら
QnA Maker 質問と回答のペアからナレッジベースを作ってくれる。自然言語処理と質問クエリなどしてくれる

参考資料

目次

  1. 事前準備
  2. Azure で bot ホスト先を用意
  3. QnA Maker でナレッジベースを作る
  4. bot クライアント開発 (ここから 後半記事 )
  5. Teams と繋げる

0: 事前準備

0-1: Bot Framework Emulator のダウンロードとインストール

Bot Framework Emulator のダウンロードとインストールをしましょう。

0-1-1: Bot Framework Emulator とは?

(*゚▽゚* っ)ЗBot Framework Emulator って?」

その名の通り、エミュレータです。
Bot Framework (マイクロソフトの bot 作成フレームワーク) 製の bot を手元で開発するときに便利です。

公式ドキュメントを見てみましょう:『エミュレーターを使用したデバッグ

Bot Framework Emulator は、bot 開発者がローカルまたはリモートでボットをテストおよびデバッグできるデスクトップアプリケーションです。 エミュレーターを使用すると、bot とチャットして、bot から送受信されるメッセージを検査できます。

↓ どんな json が返ってくるとか見ながら動かせるのでめちゃ便利です

Bot Framework Emulator

0-1-2: Bot Framework Emulator のインストール

こちらのリリース一覧のページ から最新のリリース版をダウンロードしましょう。(2021 年 2 月 11 日現在、v.4.11.0 が最新)

たとえば私の環境は Windows なので、このリストの BotFramework-Emulator-4.11.0-windows-setup.exe をクリックしてインストーラーをダウンロードしました。

Bot Framework Emulator を起動すると、このような画面になります

0-2: Visual Studio のアップデート

Visual Studio Installer を開いて、Visual Studio 2019 を最新にしておきましょう

0-3: Azure のアカウント

Azure のアカウントをお持ちでない方は、こちらの 無料トライアルアカウント作成ページからぜひ!


https://azure.microsoft.com/ja-jp/free/search/

1. Azure で bot ホスト先を用意

1-1: リソースグループを作る

Microsoft Azure のポータル画面 portal.azure.com を開きます。

そこでこの bot 用の リソースグループ (リソース (インスタンス) をまとめるフォルダのようなもの) を新規に作りましょう。
名前は何でもいいですが、たとえば私は 210215_TeamsFAQBot という名前にしました。

1-2: Web App Bot を作る

そこの左上の + 新規 をクリック

検索窓に Web App Bot と入力

作成 を押しましょう。

bot のリソース名など適当に付けていきます。
(ただし URL の一部になるので一意になる名前にしておきましょう)

また、本番環境ではなくて あくまで「お試し」の場合、
料金レベルを「F0」(無料プラン) にしておきましょう。

デフォルトでは S1 プラン (Standard) になっていますが、ここでは「F0 (Free)」無料プランにしておきます。(本番環境で動かすときは F0 は大変厳しいです)

ボットテンプレートはデフォルトの「Echo Bot (C#)」のままでいいです(どうせ後から上書きするので)

今回は Application Insights は オフにしておきましょう。

(Application Insights はアプリのユーザの使用状況などを見れる便利な分析ツールなのですが、今回はとくに触れないのでとりあえずオフで。)

また、App Service プラン は新規作成しましょう。(既存のものがあってそれを使いたい場合は別)

この「App Service プラン」とは、アプリの載る物理サーバ的なやつです。メモリ何 GB の環境で動かす?みたいな。
料金の高めのものを選ぶとスペック高めのマシン上で bot を動かすことができます。
例えば CPU のコア数が増えたり、RAM も増えたり、「俺専用 VM」を立てられたりします。

(最初は S1 プランで作成されますが、無料プランに変更することができます。次のセクションでやり方を書きます)

同じく Japan East リージョンに立てました。

という、諸々を設定したら、画面下の「作成」を押しましょう。

するとポータル画面のトップに戻るので、
しばらく待つと通知欄にデプロイ完了が出るので、そこから「リソースに移動」を押しましょう。

Web App Bot (「Web アプリボット」) の管理画面が表示されました。

ここが、これから手元で作る Teams FAQ bot のホスト先となります。

1-3: App Service Plan を無料プランに変更

先ほど Web App Bot を作るときに一緒に新規作成した App Service Plan
(私は「210215TeamsFaqBotPlan」という名前で作ったやつです)

bot の載る物理サーバみたいなものですが、
デフォルトだと S1 (Standard) プランで作成されています。

今回、全て無料でやりたいのであれば F1 Free plan (無料プラン) を選択しておきましょう。
(スペック高くない上に雑居サーバになるのでレスポンスはあまり早くないのですが、お試しで動かすのであればこれで大丈夫だと思います。本番運用には向いていません(マジで))

ポータル画面のトップからリソースグループに移動し、
リソース一覧をチェックします。

リソース 3 つ生えてますね。

該当の App Service Plan に移動します。

右上の方に

App Service プラン
210215TeamsFaqBotPlan (S1: 1)

と書いてありますね。
料金プランが S1 (Standard) になっています。

(*゚▽゚* っ)З 「あれ? さっき無料 F0 にしなかったっけ?」

F0 にしたのは Web App Bot で、この App Service Plan についてはまだです。今からします。(何度も言うけど本番環境には F1 はお勧めしないよ)

(*゚▽゚* っ)З 「どう違うの?」

たとえば S1 だとカスタムドメインや自動スケールに対応してたり、運用環境とテスト環境のスワッピング機能や毎日 10 回アプリのバックアップ保存してくれたり、そもそも環境がスペック違う (たとえばディスク領域は F1 は 1GB で S1 は 50GB) し (F1 プランは雑居サーバーですが) S1 は俺専用 VM 立ててくれていたりします。

F1 プランだと、上記の全てが含まれていません。
また、致命的な制限として、F1 は 60 CPU 分/日 という制限があり、要するに CPU を 1 日あたり 60 分使ったら動かなくなります。
(参照:『App Service の価格』)

でも少なくとも bot は動くのでテスト用に今回は無料プランを使おうと思います。

左側のメニューから「スケールアップ」
→「開発/テスト」
→「F1」
→「適用」

概要ページに戻ると、ちゃんと Free プランに変更されているのが確認できます

2: QnA Maker でナレッジベースを作る

2-0: QnA Maker とは?

自然言語での FAQ 検索を行うための API を発行してくれるサービスです。

FAQ bot や ”一問一答” の問い合わせの bot を作るのに大変便利です。

いくつか「質問」「その答え」を入力(ファイルで一括で入れる or URL を渡すと既存の FAQ web ページから自動スクレイピングしてくれる) すると、
学習してナレッジベースを作ってくれて、
「それっぽい」問い合わせから「この人これが聞きたいんだな」と予測し、その回答を (json で) 渡してくれます。

API を発行してくれるので、アプリ側から叩いて使う形になります。

2-1: QnA Maker のリソースを Azure 上に立てる

https://www.qnamaker.ai/ に Azure のサブスクリプションに紐づいたアカウントでログインします。

Create a knowledge base ボタンを押しましょう

ステップが書いてあります。

  • Step 1: Create a QnA service in Microsoft Azure.
    • Azure 上に QnA サービスのリソースを作成しましょう
  • Step 2: Connect your QnA service to your KB.
    • QnA サービスを KB (Knowledge Base) に繋げましょう
  • Step 3: Name your KB.
    • KB (Knowledge Base) に名前を付けましょう
  • Step 4: Populate your KB.
    • KB の中身を増やしましょう

まずは Step 1 の「Create a QnA Service」ボタンをクリックしましょう。

すると Azure のポータル画面 (の QnA Maker のリソースを立てる画面) に遷移します。

今回作った bot 用のリソースグループを選択とかリージョンは日本を選ぶなど、ポチポチ設定を選んでいきます。
(今回は開発用なので無料プランを選びます)

良かったら下の「確認及び作成」をクリックして QnA Maker のリソースを作ります。

リソースグループのリソース一覧を見ると、
以下のようにリソースが増えていますね。

QnA Maker つくると以下のリソースも自動的に生えます:

  • Azure Search(ここで質問から回答探してる)
  • App Service (Web App) (ここで質問投げ込んだら回答返す API のアプリがデプロイされる)
  • App Service Plan (上の App Service が動く土台)

また、この (QnA Maker 用に) 新規に生えた App Service Plan の料金プランも
デフォルトだと S1 になっているので、
先ほどと同じ手順で無料にしておきます。

2-2: ナレッジベースと Azure の接続

QnA Maker のページ (qnamaker.ai/Create) に戻り、
Step 2 のセクションの「Refresh」ボタンを押してリフレッシュします。

そして作った QnA Maker のリソースをドロップダウンから選択しましょう。

Language は Japanese を選択します。(FAQ の中身は日本語ですよね?)

2-3: ナレッジベースの名前を付ける

ナレッジベースの名前を適当に付けてください

2-4: ナレッジベースの中身を作る

作成するナレッジベースのなかにデータを生やしましょう。
既存の FAQ の web ページがある場合はその URL を、無い場合はファイルを入れます。(対応するファイル形式は .tsv, .pdf, .doc, .docx, .xlsx です)

今回は例でこのページを取り込んでみたいと思います。

https://www.microsoft.com/ja-jp/software-download/faq

この URL を先ほどの URL 欄に入れます

2-4-1: おしゃべり機能 (Chit-chat) について

(*゚▽゚* っ)З 「この下に Chit-chat ってセクションがあるけど、これは何?」

お喋り機能です。

性格を選べます。

* ただし、App Service Plan に無料プランを選んでいる場合は、このお喋り回答一覧データのデータサイズが大きすぎてエラーが出て使えません。

参考)公式ドキュメント『ナレッジ ベースにおしゃべりを追加する

ボットにおしゃべりを追加すると、ボットがより会話的で魅力的なものになります。 QnA Maker のおしゃべり機能を使用すると、定義済みのおしゃべりのセットを、ナレッジ ベース (KB) に簡単に追加することができます。 これを使ってボットのパーソナリティの作成を始めることができ、それにより最初から作成するよりもコストと時間が節約されます。
このデータセットには、複数のペルソナ (Professional、Friendly、Witty など) の音声の約 100 のシナリオのおしゃべりが含まれています。

(*゚▽゚* っ)З 「それぞれの性格はどんな感じなんだろう」

例えば When is your birthday? (誕生日はいつ?) と聞かれると、パーソナリティ (性格) ごとに定型の応答が用意されています。

パーソナリティ 返答例
Professional "Age doesn't really apply to me." (年齢は、私にはまったく当てはまりません。)
Friendly "I don't really have an age." (私には、年齢なんて本当にありません。)
Witty (機知に富んでいる) "I'm age-free." (私は、年齢にとらわれない存在です。)
Caring (温かい) "I don't have an age." (私には、年齢はありません。)
Enthusiastic (熱心) "I'm a bot, so I don't have an age." (私はボットですから、年齢はありません。)

大変魅力的な機能ですが、
今回は無しでいきました。

(無料プランを選んでいると、このおしゃべりデータ一覧が大きすぎて入らないため)

none を選んで次に進みます

2-5: ナレッジベースの作成

最後に一番下の Step 5「Create your KB (knowledge base)」ボタンを押します

ここで「ダメでした」ってエラー画面が出てきても
実は裏でちゃんと動いているという罠があることもあったので、
ダメでしたってなっても QnA Maker の My knowledge base から一覧画面を見てみましょう。ちゃっかり生えてるかも

2-6: 管理画面でテスト

Save and train ボタンでトレーニングしてから、
テストチャットができます

2-7: KB デプロイ

PUBLISH タブに移動して Publish ボタンを押すと Azure の QnA Maker を作ったときに一緒に作られた App Service とかにデプロイされる

この画面にある情報は後で使うので閉じないこと!
API キーとかが書いてありますのでコピペして控えておいてください。

つづく

次の記事(後編) では
クライアントのコードをガリガリ書いていきます!