SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2017】セッションレポート(AD)

“オラクルの社食で働くLINE Bot”はなぜ賢い返事ができるのか? 秘訣は「スキル」と「フロー」にあり【デブサミ2017】

【16-B-2】【実演&全員参加型】我が社のカフェで働いているLINE Botを皆で体験し、Botを大いに学ぼう。

  • X ポスト
  • このエントリーをはてなブックマークに追加

柔軟にBotの機能を拡張できるように5つのフローを定義

 続いて中嶋氏は、Bot本体の開発メソッドについて解説。「Bot開発は発展途上で、まだまだ改善の余地がある」としながらも、現時点で中嶋氏が特に重視している要素として「スキル」と「フロー」の2つを挙げた。

 スキルとは「Botが対応できる仕事」のことだ。今回のBotの場合、「メニューを回答」「カロリーを回答」「照明色を変更」「FAQに回答」という4つのスキルがある。中嶋氏によれば、どれくらいBotが楽しいものになるかは、このスキルの多様さや精度の高さで決まり、これをいかに簡単に追加できるようにするかがBot開発の鍵だという。そこで重要となるのがフローだ。

 フローとは「文脈に応じてどういう順番で何を実行するかのパターン」を意味する。中嶋氏は「これがきれいにフレームワーク化できれば、Botのスキル追加が圧倒的にやりやすくなる」と考え、今回のBot開発において5種類のフローを定義した。

  • Start Conversation Flow
  • Reply Flow
  • Change Intent Flow
  • Change Parameter Flow
  • No Way Flow

 Botがメッセージを受け取ると、メッセージ(イベント)に対して5つのフローのうちいずれかが適用され、返信までの処理が行われる。大まかな処理の流れは各フロー共通で、メッセージから意図を解釈してスキルを特定し、必要なパラメータを収集、情報がそろったら最終的にユーザーへ返答……となる。必要なパラメータとしては、例えばメニューなら「年月日」、カロリーなら「年月日」「プレートの種類」が挙げられる。

ユーザーからのメッセージに対して適用するフローを5種類定義し、よりスムーズで適切な返答が行えるようになっている
ユーザーからのメッセージに対して適用するフローを5種類定義し、よりスムーズで適切な返答が行えるようになっている

 5つのフローの内容は次のとおりだ。

Start Conversation Flow

 会話の始まりを意味するフローで、Botがユーザーとの会話を記憶していない場合に適用される。このBotでは60秒間記憶を保持する設定で、LINEのIDごとに記憶を管理している(Botが文脈を把握して回答できるのは、この会話を記憶する仕組みがあるため)。メッセージを受け取るとIDをたどり、該当する記憶がなければBotは「新しい会話」と判断する。

Reply Flow

 ユーザーからのメッセージが「今日のメニューを教えて」ならすぐに返答できるが、「メニューを教えて」だけの場合は年月日のパラメータを収集しなければならない。具体的には、ユーザーに「いつのメニューですか?」などと質問し、「今日」のような返答を得る必要がある。このように、Botが該当ユーザーとの会話を記憶しており、ユーザーに確認中の質問がある場合にはこのフローが適用される。

Change Intent Flow

 Botが該当ユーザーとの会話を記憶しているが確認中の質問はなく、メッセージから意図が解釈できた場合に適用される。例えば「今日のメニューを教えて」→「(Botがメニューを回答)」→「カロリーも教えてくれる?」といったように、ユーザーが会話の途中で意図を変えた場合、このフローではそれまでに収集したパラメータ(年月日=今日)を継承するので、あらためて「いつの~?」と聞き返すことはない。

Change Parameter Flow

 Botが該当ユーザーとの会話を記憶しているが確認中の質問はなく、さらにメッセージから意図は解釈できないがパラメーターが抽出できた場合に適用される。「今日のメニューを教えて」→「(Botがメニューを回答)」→「明日は?」のようなケースでは「明日は?」から意図は解釈できないが、パラメータは抽出できる。この場合、それまでの会話から意図は同じと判断し、パラメータのみ変更して「明日のメニュー」を返答する。

No Way Flow

 「今日のメニューを教えて」→「(Botがメニューを回答)」→「関係ないけど、個室ってどうすれば利用できるんだっけ?」のように、ユーザーがまったく関係ないことを聞いてきた際に適用されるフローで、最終手段として設定されたアクションを実行する。このBotでは、FAQのデータベースから該当するものを検索して答える設定(見つからなければ「わかりません」と返答)となっている。

 現状は、この5つのフローを回すことによって、スムーズにBotのスキルを追加できるようになっているそうだ。

 なお、中嶋氏はセッションで紹介したBotのソースコードをGitHubで公開している。また、有志によるBot開発の勉強会を主催し、チュートリアルなどもQiitaに寄稿。勉強会は今後も定期的に開催していく予定だという。

 「Bot開発を考えている方に参考情報として活用いただきたい。皆様のアイデアや成果物も見てみたいので、勉強会にもぜひご参加を!」と呼びかけ、中嶋氏はセッションを締めくくった。

お問い合わせ

 日本オラクル株式会社

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
【デブサミ2017】セッションレポート連載記事一覧

もっと読む

この記事の著者

CodeZine編集部(コードジンヘンシュウブ)

CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10045 2017/04/03 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング