チャットBotをヒト化させるポイントとは
最後に、今回のチャットBotの内部的な構造が紹介された。ちなみに、デモンストレーションでは、LINEとGoogle Homeを使っていたが、それぞれ別のチャットBotを作っているわけではなく、どちらにも対応できるシングルインスタンスでまかなっているのだという。そのアーキテクチャーの全体像を表したのが下図だ。
ユーザーが接するインターフェイスは3つあるが、実際にデータベースとアクセスしているのはWebだけだ。LINEとスマートスピーカーはBotの同じインスタンスにつながっていて、それがすべてのリクエストを処理してレスポンスを返している。とはいえ、当然ながらLINEとスマートスピーカーはメーカーが異なるため、APIの仕様やレスポンスの仕様も異なる。通常は別々のコードを書く必要があるのだが、今回はBotの本体を作るため「bot-express」(Node.jsのフレームワーク)で抽象化を実現している。そのため、中嶋氏がLINEのフォーマットで書いただけで、自動的にGoogle Homeでも動くようになっているのだ。
そしてBotで重要な自然言語解析については、Googleの「Dialogflow」と「Natural Language」が用途によって使い分けられている。食品データベースは「日本食品標準成分表」と「EDAMAN」をハイブリッドで使用することで、精度を上げているという。また、先述した通り顧客情報はすべてSalesforce上に入っている。
上図がBotの内部構造だ。Botで重要なNLU(Natural Language Understanding)を効果的に使えるようにしていることと、Skillという単位でモジュール化することで開発者が集中して作業できるようになっているのが特徴だという。
Skillの中身を見てみよう。Skillは大きく分けるとパラメーターとアクションに分かれている。Skillを完遂するのに必要なパラメーターは、「message_to_confirm」「parser」「reaction」の3つ。「message_to_confirm」はパラメーターが不足しているときに、どんなメッセージで確認するかを指定し、「parser」でバラエティ豊かなユーザーの答えの中にエンティティが含まれるのかどうかを突き止める。それによって「reaction」で反応を設定していく。
「『parser』と『reaction』をいかに作り込んでいくかによって、弾力性のある作りになっていきます。ユーザーが脱線するのを、どうカバーするかがSkill開発の難しいところだと思います」
チャットBotを作る上で「ひとつだけ注意すべきことがある」と中嶋氏は強調した。それは「Webが得意なところをBotでやらない」ということだ。よくありがちなのが何かを検索するBotである。検索はWebの得意エリアなので、「Botでやっても劣化版ができるだけ」と指摘。「Webではなく電話やヒトの方が得意なことをBotに置き換えるというのが正しいユースケースなのではないか」と説いた。
今回紹介された開発フレームワークやBotのサンプルコードはGitHubに上げられている。
サンプルコード
最後に中嶋氏は「自分でもBotを作ってみたい方は、私たちの勉強会にお越しください。Slackのワークスペースの中でもコミュニケーションしているので、こちらにもご参加いただければ」と語り、講演を締めくくった。
お問い合わせ
LINE株式会社