Dialogflow for Android

GoogleがサポートしているDialogflow for Androidの話をしましょう。

Dialogflow for Androidの概要

DroidKaigi2018 Dialogflow for Android」を参照しています。

Dialogflowとは

https://dialogflow.com

Dialogflowは音声およびテキストベースの自然言語での会話型インターフェイスを構築するためのサービスです。

たとえば「誕生日おめでとう」という呼びかけに対して、「ありがとう」という返答をさせるようなものを作ることができます。

Dialogflowのコンソールではどのような言葉に対してどのように返答するかの設定していきます。

Dialogflowで作成したチャットボットは、Googleアシスタント、Facebook Messenger、Slackなどのサービスに対応していて、それらのサービス上でも動作させることができます。

スマートスピーカーのGoogle Homeで音声による会話をすることも可能です。


Dialogflow SDKs

Fulfillment:

会話型入力に基づいて、自分のシステムでアクションを実行します。Fulfillmentは、Dialogflowエージェントをサービス、API、データベースに接続します。

intent APIの検出:

Dialogflowで構築された会話型インターフェースをアプリまたはウェブサイトに埋め込みます。

Agent API:

Agentのインテント、エンティティ、およびコンテキストを編集して、エージェントの動作を動的に変更します。

DialogflowのREST APIの詳細については、リファレンスドキュメントを参照してください。

Dialogflowの例

Agent
  • 名称:「受付業務」
  • 一般:「Project ID」「Service Account」「V1 API/V2 API」「API KEYS」
  • 言語:「Japanese — ja」
  • ML Setting:「MATCH MODE」「TRAIN」
  • Export and Import:「EXPORT AS ZIP」「RESTORE FROM ZIP」「IMPORT FROM ZIP」
  • Share:「WHO HAS ACCESS」「INVITE NEW PEOPLE」
Intent
  • 朝の挨拶
  • 昼の挨拶
  • 夜の挨拶
  • 遅延情報
Entities
  • position:「社長」「社員」及び、そのシノニム
  • username:「山田」「吉田」
  • train_root: 「横須賀線」「中央線」及び、そのシノニム

Dialogflow for Android

Dialogflow Android SDKのソースコード、サンプルコード、ドキュメンテーションはすべてこちらのリポジトリから確認することができます。

AIDataService

最も実装の自由度の高いライブラリ。文字列をAIDataServiceに投げると適切なIntentの結果を返してくれる。

AIService

音声の録音をするライブラリ。録音が終了すると自動的に音声をDialogflowに飛ばし、適切なIntentの結果を返してくれる。Androidのマイクを扱う時と同じ要領で扱える。start stop メソッドなどがある。

AIButton

最も実装が少ないライブラリ。Buttonを扱う時と同じ要領で扱え、自動的に音声をDialogflowに飛ばしてくれる。

AIDialog

AIButtonのDialog版

Androidアプリにチャットボットを導入してみる

今回作成したサンプルは全てこちらのリポジトリにございます。 シンプルに紹介したいため難しい設計などはしてません。より良い方法などがあればPRをいただけたら嬉しいです:)

チャットボット作成の流れ

  1. チャット画面の作成
    • EditText
    • Button
    • ScrollView
  2. AIDataServiceの準備
  3. Dialogflowと接続
    • AccessTokenと言語を設定

チャット画面の作成

チャット画面にはこちらのライブラリ(ChatMessageView)を使用します。 少ないコードで簡単にチャット画面を作成することができます。

ChatMessageViewの準備: アイコンや名前を設定

AIDataServiceの準備

Dialogflowと接続

Client access tokenと言語を登録

Dialogflowの使い方

Dialogflowの使い方

  • Googleアカウントでログイン
  • Dialogflowのアカウントとプロジェクトを作成
  • 基本機能3つを抑える
  • キャンセル待ちを登録するBotを作成してみる

Agentの作成

AgentはDialogflowのプロジェクトです。

  1. 名前
  2. 言語・ロケール
    • 後から言語の追加可能

※注意: DialogflowはGCPプロジェクトを利用します。GCPのプロジェクトを新規作成したくない人は、Agentの作成画面で「GCPプロジェクトをImportする」を選択してください。

Dialogflow基本機能3つ

Intent
  1. 会話の設計をする場所
  2. 会話を開始するトリガーを決める
    • 「こんにちは!」、「BMIを知りたい」など
  3. 会話を成立させるための条件を決める
    • 身長と体重の入力を必須にする
  4. レスポンスを決める
    • 答えが既に決まっている場合
      • Intentのレスポンスに内容を入力
    • 答えが決まっていない場合
      • BMIの計算、航空券の検索など
      • バックエンドを設定してあげる

Intentは1つの目的につき、1つのIntentを作成する

  1. 挨拶Intent
  2. BMI計算Intent
  3. レシピIntent

発言に応じて適切なIntentに案内してくれる

おはようIntentを作成してみる

  1. User Saysに会話のトリガーをいれる
    • おはようございます
  2. Responseに会話の返答をいれる
    • おはよう!

作成が完了したら右側のシミュレーターでテストします。「おはようございます」と発言すると「おはよう!」が返ってくることが分かります。

Dialogflowは学習する

いくつかの「おはようパターン」を入れておけば、その中に無いパターンでも良い感じに解釈してくれるようになる。

下記画像の例では「おはよ」というのはUser Says に登録されていないが、ちゃんと解釈してくれている。

最初から入っている2つの特殊なIntent

  1. Default Welcome Intent
    • Google アシスタントなどでアプリを起動した時に返答する挨拶文
      • 今回は使用しない
  2. Default Fallback Intent
    • ユーザーの発言がどのIntentにも当てはまらない時に呼ばれる
    • 「すみません、分かりませんでした」のような文言を返す
      • 「サーバーエラーです」のような文言を返すのはNG
        • 会話にエラーは存在しない
Entity
  1. 文章から特定の単語を取り出すための辞書
  2. 通貨、時間、メールアドレスなどの標準的なものは既に用意されている
  3. ユニークなワードも自分で作成可能

※正規表現やMeCabの品詞分解が不要になる

Fulfillment
  1. サーバーの情報を登録する場所
  2. HTTPS POST 通信
    • Google好きならfunctionsやappengineを使おう
  3. 登録できる情報
    • URL
    • BASIC 認証
    • HEADER
    • DOMAINS


お花畑7