院内SEへの問い合わせをAIで!FAQ-botの作り方

院内ヘルプデスクAI, bot, Dialogflow

前回の記事の中で病院が移転したことにより、建物が大きくなり部署も増え、職員も増えたので問い合わせの量も増えました。しかしシステム課の人員は移転前と同じままです。明らかに業務量が目に見えて増えるようになりました。人員はすぐには増やせないのでこの人数で対応を行わなければなりません。

そんな中移転作業の振り返りで、AIで業務負担を軽減できないかなぁと話が挙がりました。AIは最近のニュースで何度も話題なっていて興味はあったのですが、大企業とか大規模なデータを持っている会社しかできないだろうと思っていました。

しかし、同じ沖縄の情シスの方がDialogFlowというサービスを使ったAIを構築していると伺いました。調べてみると、そのDialogFlowを応用して、AIを使ったチャットボットシステムが意外と簡単にしかも無料で作れました。

(2023年6月29日追記)
※連携サービスの有料化により、紹介している内容では無料ではなくなりました。ご注意ください!!
代替手段はあると思いますので、ご参考程度にご覧ください。

今回はそのAI-FAQ-botの概要と、その作成方法についてご紹介いたします。

(2021/09/21)追記:現在このfaq-botは職場でテスト運用していますが、本格的な運用が出来ておりません。運用していくうえで、いくつか課題が見えてきました。

  • 管理者へのエスカレーションが常時行われる
    • 管理者へのエスカレーションに制限がないため、業務時間外にも問い合わせが来る可能性があります。
  • 問い合わせ内容が共有できない
    • 管理者が答えた回答が共有されないため、間違った回答をしてしまう恐れがあります。
  • 複数の管理者への対応が不完全
    • 管理者が複数人いる場合に現在はランダムで回答者を決めているのですが、答えられる人が答えるようにしていきたいです。
  • 応答メッセージ数の定期確認
    • 無料枠で運用を行っているので、その無料枠を超えないようにLINEの応答メッセージ数を定期的に確認していきたいと感じました。

上記の問題について、解決できる方法が見つかれば実装して追記いたしますので、興味がある方は記事の購入をご検討ください。

FAQ-botの概要

まず今回のbotはLINE株式会社の社員さんが紹介している記事を参考にして作成しました。この記事で私が構築したい内容がほぼ決まり、また構築方法もほとんど載っていたので大変参考になりました。

作成したbotはどんどん賢くなるチャットボットをテーマとして作成しました。ユーザーからの質問に答え、分からないことは管理者である院内SEに回答を伺い、その回答内容を学習して賢くなっていくbotになります。

具体的には

  1. ユーザーからの質問で用意されているものなら自動で返答する
  2. 用意されていない質問だと、管理者(院内SE)に回答を促す
  3. 管理者(院内SE)が回答を行うと、回答内容をユーザーに返答する
  4. 管理者(院内SE)が回答した内容をbotが学習し、次回以降の同じ質問は自動で返答する

このような流れで動いています。

動作図

ユーザーと管理者が同じ画面なので分かりにくいですが、「テスト」、「よろしく」というユーザーからのメッセージに対してはbotが自動的に答えています。しかし「ありがとう」というユーザーからのメッセージには管理者に回答を促し、管理者の回答内容をユーザーに返すといった動作になっています。

システム図

今回構築したシステムは以下のサービスを組み合わせています。

  • LINE
  • DialogFlow
  • Heroku

ユーザーはLINEを通してシステム課への問い合わせを行います。問い合わせの内容はクラウド上にあるサーバー(Heroku)のチャットボットプログラムに送られます。

その後、DialogFlowという自然言語処理サービスにより、問い合わせの意図を分析します。その分析した結果により回答できる場合は自動的に返答し、回答できない場合は管理者のLINEアカウントへ回答を促すシステムとなっています。

動作フロー

システムの動きの流れとしては以下のようになっています。左が自動応答で右が管理者からの回答が必要な場合の動きです。

まず自動応答の場合ですが、ユーザーが質問を送るとチャットボットPGはDialogFlowに質問意図の解析を依頼します。意図を特定出来たら対応するスキルで処理を行い、その結果をユーザーに返すことで自動応答を実現しています。

管理者から回答を行う場合、ユーザーからの質問をDialogFlowで意図解析するまでは同じですが、DialogFlowで意図が分からなかった場合、チャットボットPGは管理者へエスカレーションして管理者(院内SE)に問い合わせます。管理者が回答を行うとその回答内容をユーザーにそのまま転送を行います。さらにその回答内容をDialogFlowに学習させることで次回以降の同じ質問は自動で答えられるようにしていく仕組みになっています。

各種システムについて

今回は無料で構築するためにそれぞれ無料の範囲内で動かしていますが、制限があるので、その制約事項とともに各システムについてご説明します。

LINE

まずはLINEです。もうこれはメジャーなんで説明不要なくらい普及しているので、職員に使ってもらえると思い採用しました。しかしスマホで通常使っているLINEではなく、LINE公式アカウントというのを作成して使用しています。

LINE公式アカウントとはLINEで使っている機能を使え、LINEユーザーに情報発信や販促などを行いやすいものとなっています。そして今回の目的であるbotとして使うために必須のものとなっています。

そんなLINE公式アカウントですが、プランが3種類あり以下のように月額料金が変わります。

無料で使っているとメッセージ数が1,000通に制限されてしまいます。カウントされるメッセージは、botから返答されるメッセージも基本的にカウントされますし、LINE公式アカウントから配信できるメッセージもカウントされるので上限に達しないように注意が必要です。

DialogFlow

次にDialogFlowですが、このサービスはGoogleが提供している言語解析エンジンで様々なサービス連携することが可能です。LINEはもちろん、SlackやWeb、Androidスマホなどの「OK,Google」でも連携することが可能です。

こちらもいくつかのプランがあり、今回は無料で使っていますが、無料プランでも今回導入しようと検討している範囲では問題なく使えそうなくらい制約事項があまりないです。

例えば、botが1分当たりに反応する回数が180回までだったり、反応する例文数が2,000までだったりと広めに範囲が取られているので、とりあえずは安心して使っていくことができそうです。

Heroku

次にHerokuです。HerokuはPaaS(Platform as a Service)と呼ばれるサービスの一種で、サーバー、OS、データベース、プログラム実行環境を稼働させることができます。私も以前個人開発で作ったWebサービスをHerokuで動かしていたので始めやすかったです。個人開発のようなスモールサービスで使うこともできるのでお勧めです。

そんなHerokuにもいくつかのプランがあり、無料プランでは制限があり使用限度時間が1か月あたり550時間になります。クレジットカードを登録すると1000時間までになるので1日24時間×31日=744時間で常時起動が可能となります。しかしもう一つ制限があり、30分間アクセスがなければ自動的にスリープに入り、次の応答までに時間がかかってしまいます。私の環境だとスリープ後にLINEメッセージを送ると返信まで20秒前後かかりました。こちらはherokuのアドオンや外部サービスで定期的にアクセスするジョブなどを実行すれば回避できます。

チャットボット

肝心なプログラムですが、こちらはLINE株式会社の社員さんが公開している記事を参考にして作りました。

環境構築についてもqiitaでいくつかの記事を公開しているので、それを参考にして構築することができました。GitHubで公開されているソースコードに少し修正を入れて自分の環境で使えるようにしていますので、ご興味がある方はご覧ください。GitHub

動作フローのところで説明したスキルですが、具体的にこのボットは以下の3つのスキルで構成されています。

  • robot-response
    意図が特定できた問い合わせに対して、用意されている回答を自動的にユーザーに返すスキル意図が特定できた問い合わせに対して、用意されている回答を自動的にユーザーに返すスキル
  • escalation
    意図が特定できなかった問い合わせに対し、管理者に回答してもらうように促す。
  • human-response
    エスカレーションされてきた問い合わせ内容に対し、管理者からの回答内容をユーザーに返信し、botに学習させる。

導入手順

ここまででボットの概要を説明してきましたが、いかがでしたでしょうか?院内SEだけではなくそのほかの部署、事務部や総務、経理などよく問い合わせを受ける部署で役に立つと思います。またこのシステムは最近話題になってきているノンコーディングで構築できています。プログラムコードはありますが、公開しているコードを使用しているのでほぼ手を加えていません。そして運用行う上で例文や回答の追加はプログラムを修正する必要がなく、Web上のGUI画面で追加することができるのでプログラムを知らない方でも運用ができます。

ここからは具体的に構築手順について説明していくのですが、申し訳ありません!ここから先は有料とさせていただきます。なるべくキャプチャなどを使って分かりやすく説明していますのでご興味がある方は是非ご購入を検討してください。

お試し価格数量限定400円で販売いたします。好評であれば追加しますので早めのご検討をお勧めいたします。

作業環境はWindows 10 Home 64bitで行っています。

作成方法

まず最初に各種アカウントの作成から行い、その後にサービスの設定を行っていきます。アカウントの作成してそのまま設定でもいいんですが、他のサービスと連携させるためにそれぞれのサービスの設定値を取ってくる必要があるため先にアカウントから作成しています。

アカウント作成

Dialogflow

Googleアカウントを取得し、ログインした状態でDialogfowのページ行きます。

「CREATE AGENT」のボタンをクリックして、AGENTを作成します。ちなみにAGENTはいくつか作ることができますが、ボットに連携できるのは一つだけです。

下記の画面がCREATE AGENTの画面です。赤枠内にAGENT名を入力してCREATEボタンを押すことで作成完了です。

作成が完了すると下記の画面になります。下記の画面になったらDialogFlowのアカウント作成は完了です。

LINE 公式アカウント

次はLINE公式アカウントの作成です。LINE公式アカウントの作成にはLINEへのログインが必要です。普段使用しているLINEを使う場合は問題ないのですが、病院や法人でLINEアカウントを作成して作りたいという場合はLINE BUSINESS IDというのを作成すると便利です。通常のLINEは電話番号が必要なので少々面倒ですが、LINE BUSSINESS IDなら電話番号は必要ではありませんでした。こちらのページからアカウントを作成できます。リンク先のページに書かれていますが、「認証済アカウント」と「未認証アカウント」があります。どちらでも問題ないと思いますが、とりあえず作るだけなら「未認証アカウント」で良いと思います。あとから「認証済アカウント」に変更することもできるそうです。

アカウントが用意出来たなら、LINE 公式アカウントでググって下記のページでログインします。

ログインすると、下記のようにLINE 公式アカウントの情報入力になるので入力していきます。

アカウント作成後LINE Official Account Managerのページに飛ぶと下記のように表示されます。

ここまで来たらLINE 公式アカウントの作成は完了です。

Heroku

最後にHerokuのアカウント作成です。

こちらのページからSign Upをクリックしてメールアドレスなどの情報を入力するとアカウント作成できます。

上記のようなページが表示されればOKです。

各サービスの設定

各アカウントを作成できれば、今度はそれらの設定を行う必要があります。設定と言っても各サービスからパラメータを取得してそれをHerokuにセットするだけです。しかし各サービス色々なパラメータがあったり設定しないと出てこないパラメータだったりするので手順や取得する箇所に注意が必要です。

Dialogflow & Google Cloud Platform

DialogflowのサービスはGoogle Cloud Platformというところ紐づいているので両方を見ていく必要があります。ここで取得すべきパラメータは3つあります。

  • GOOGLE_PROJECT_ID
  • GOOGLE_CLIENT_EMAIL
  • GOOGLE_API_KEY

最初にGOOGLE_PROJECT_IDですが、こちらはDialogFlowの画面を開き下図の赤枠の歯車マークを押した先の画面の青枠内[GOOGLE PROJECT]の欄に表示されています。まずはこちらをメモしておきましょう。

次に、このProject IDの文字列がリンクになっているのでクリックするとGoogleCloudPratformの画面に移ります。GoogleCloudPratformの画面左側ナビゲーションメニューから[IAMと管理]をクリックします。

IAMと管理の画面からまた左側のメニューから「サービスアカウント」をクリックした後、「サービスアカウントを作成」をクリックしてサービスアカウントの作成をします。作成する際にロールを「Dialoflow API管理者」を選びましょう。

作成が完了したら、下記画面の「メール」の欄に、メールアドレスのようなパラメータが表示されます。これがGOOGLE_CLIENT_EMAILです。

そして最後のGOOGLE_API_KEYは同画面の「操作」欄から「鍵を作成」をクリックします。すると秘密鍵の作成画面になるので「JSON」タイプを選んで作成します。するとファイルの保存ダイアログ画面が出るのでファイルを保存します。(ここでブラウザがChromeでなければなぜか空ファイルになってしまったのでGoogle Chromeを使用することを推奨します。)

保存したJSONファイルをテキストエディタなどで開くと文字列が色々書かれていますが、private_keyと書かれているものがGOOGLE_API_KEYです。"(ダブルクォーテーション)で囲まれている文字列がすべてGOOGLE_API_KEYなので注意が必要です。 ちなみに保存したJSONファイルにはこれまでで取得したGOOGLE_PROJECT_IDやGOOGLE_CLIENT_EMAILも書かれているので、時間がない方はとりあえず秘密鍵の作成まで行って最後にまとめてパラメータを取得することもできます。

LINE公式アカウント & LINE Depelopers

LINE公式アカウントでは取得すべき項目が同じく3項目あります。そのうち「LINE_ADMIN_USER_ID」はユーザーからの質問を答える人数分取得する必要があります。

  • LINE_ACCESS_TOKEN
  • LINE_ADMIN_USER_ID
  • LINE_CHANNEL_SECRET

それでは順番に説明していきます。

まず最初にbotを作成します。LINE Developersのサイトにアクセスして、取得してLINE公式アカウントのIDでログインします。

上記のように情報登録の画面になるので入力を行います。 次に新規プロバイダー作成の画面になるのでプロバイダー名を入力して作成をクリックします。

プロバイダーを作成すると、どのような開発の種類を行うかの画面になります。

ここでは「Messaging API」を選択します。

これで基本的なbotのひな型は出来たのですが、少しbotの設定を変更します。 まずチャンネル基本設定から、 LINE Official Account Manager に移動します。ちなみにこのページでbotのアイコンや背景画像などを変更できます。

左メニューの「応答設定」をクリックし、「基本設定」の応答モードが「bot」、「詳細設定」の応答メッセージがオフ、Webhookを「オン」に設定します。

一旦ここまで出来たら設定は完了です。パラメータを集めていきましょう!まずはLINE Developerトップページのチャネル基本設定のチャネルID

上記図の赤枠内の数値です。LINE_CHANNEL_SECRETは同じページ内の下の方のチャネルシークレットです。

表示されてない方は発行ボタンがあると思うのでボタンを押して発行してください。最後のLINE_ADMIN_USER_IDは回答を行う管理者にメールで招待を行う必要があります。上記のページから「権限設定」をクリックして、メールで招待という欄から管理者となる方にメールを送ります。

この時、メールを送られた管理者がLINE Developersに登録していなければ、LINE Developersへの登録が必要になります。登録後、招待されたbotのチャネルにアクセスすると、[チャネル基本設定]の下部に[あなたのユーザーID]という項目があります。これがLINE_ADMIN_USER_IDです。

これを管理者として登録したい人数分行えばパラメータの取得は完了です!

Heroku & チャットボット

最後にHerokuにチャットボットプログラムをアップロードしていきます。本来サーバーで動かす場合はgitなどのコマンドを使えるように環境構築していくつかのSTEPを進めなければならないのですが、今回は1 click deployというものがあるのでこれをやってみます。私のGitHubのページの下部にDeploy to Herokuというボタンが用意されています。Herokuにログインした状態でこのボタンを押せば自動的にHerokuにプログラムがアップロードされ、実行できる環境まで構築してくれます!

ではボタンを押してみましょう。ボタンを押すとCreate New Appというページが表示されると思います。

ここでApp Nameを好きな名前に設定して、Config Varsの欄にこれまで取得した各種パラメータを設定していきます。少し気を付けるのはGOOGLE_PRIVATE_KEYは「—–BEGIN PRIVATE KEY—–~~~」から「\n」まで入力してください。そして、LINE_ADMIN_USER_IDを複数設定する場合は,(カンマ)で区切って入力を行います。

全ての項目を埋めたらDeploy Appボタンを押してデプロイしましょう!しばらく黒い画面でコマンドが流れますが恐らく成功するはずです。Appが出来たら右上のOpen Appをクリックします。すると「Cannot GET /」と出ると思いますが、表示されたページのURLの最後に「/webhook」を付けてもう一度実行してみてください。そうすると今度は「Forbidden」と出るかと思います。この表示が出ればもう一息です。

LINE Developersのページからbotを開き、「Messaging API設定」を開きます。そのページの中段当たりにWebhook設定の項目があるので、Herokuで「Fobidden」が表示されたURLを入力します。

編集ボタンを押してURLを入力して更新を押してエラーメッセージが出ずに入力欄が閉じられれば設定完了です。(エラーメッセージが出た場合は取得するパラメータに間違いあるかと思います。)

長かったですが、これで設定完了です。最後に動作テストと私が行っている運用方法の例をご紹介します。

動作テスト・運用方法

動作テストをする前に一つだけ設定がありました。DialogFlowを開いてIntentsの項目からDefault Fallback Intent以外の項目を開きます。Action and parametersの欄に「robot-response」と入力します。これを手動で作成したDefault Fallback Intent以外のIntensの項目に全て設定します。

そしてDefault Fallback IntentのAction and parametersには「escalation」と入力してください。

LINE Developersから作成したbotを開き、Messaging APIの欄にQRコードがあるのでそこで友達登録をしてください。友達登録後、早速botに質問してみましょう。

以上のgif動画のように用意されている質問なら答え、用意されていない質問には管理者(今回は私自身)に回答を促し、管理者からの回答内容をそのままユーザーに返すと同時に回答内容の学習を行います。学習後の結果をキャプチャするのを忘れたのですが、「ありがとう」と投げたら「どういたしまして」と返してくれました。ちなみに学習によって追加された内容は自動的にdialogflowに登録されますが、そこにはAction and parametersの欄に「robot-response」と入力する必要はありません。

運用方法ですが、以前のRedmineはシステム課向けのシステムで人数も限られていたので、使い方を説明してすぐに使ってくれましたが、今回は職員向けなので周知が難しく、まだまだ普及していません。

しかし、何人かテスターを募って使い勝手や問題面などがないか確認しています。また、管理者となるシステム課の職員に向けて使っている技術や構築方法、そして運用方法の提案を行い、システム課なら誰でも運用できるように手回しをし、正式な運用が始まったとしても問題ないように作業しています。 テスト運用として1か月ほど経ちましたが、テスターがまだ10数名で本格的な普及にはなっていませんが、いくつか質問も集まり、システム的な不具合がないかなども確認出来てきています。

直近の課題として、回答を行う管理者が複数の場合、botから回答を求められる順番が現在はランダムになっているのでそれでいいのかという疑問と、業務時間外に回答を求められないようにする方法はないかなど課題もいくつか残っています。

AI時代に向けて

AIが人間の職を奪うと言われてきていますが、その兆しはまだ分かりにくいですが、今回作成したシステムのようにbotと人間が協力して作業することができれば、人間の負担も少しは軽減できると思います。私の部署も人手不足に悩んでおりますので今回作成したbotが人間の負担を少しでも減らすことができるように願って、日々教育できればいいなと思います。