Dialogflow for Android
GoogleがサポートしているDialogflow for Androidの話をしましょう。
Dialogflow for Androidの概要
「DroidKaigi2018 Dialogflow for Android」を参照しています。
Dialogflowとは
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をいただけたら嬉しいです:)
チャットボット作成の流れ
- チャット画面の作成
- EditText
- Button
- ScrollView
- AIDataServiceの準備
- Dialogflowと接続
- AccessTokenと言語を設定
チャット画面の作成
チャット画面にはこちらのライブラリ(ChatMessageView)を使用します。 少ないコードで簡単にチャット画面を作成することができます。
ChatMessageViewの準備: アイコンや名前を設定
AIDataServiceの準備
Dialogflowと接続
Client access tokenと言語を登録
Dialogflowの使い方
Dialogflowの使い方
- Googleアカウントでログイン
- Dialogflowのアカウントとプロジェクトを作成
- 基本機能3つを抑える
- キャンセル待ちを登録するBotを作成してみる
Agentの作成
AgentはDialogflowのプロジェクトです。
- 名前
- 言語・ロケール
- 後から言語の追加可能
※注意: DialogflowはGCPプロジェクトを利用します。GCPのプロジェクトを新規作成したくない人は、Agentの作成画面で「GCPプロジェクトをImportする」を選択してください。
Dialogflow基本機能3つ
Intent
- 会話の設計をする場所
- 会話を開始するトリガーを決める
- 「こんにちは!」、「BMIを知りたい」など
- 会話を成立させるための条件を決める
- 身長と体重の入力を必須にする
- レスポンスを決める
- 答えが既に決まっている場合
- Intentのレスポンスに内容を入力
- 答えが決まっていない場合
- BMIの計算、航空券の検索など
- バックエンドを設定してあげる
Intentは1つの目的につき、1つのIntentを作成する
- 挨拶Intent
- BMI計算Intent
- レシピIntent
発言に応じて適切なIntentに案内してくれる
おはようIntentを作成してみる
- User Saysに会話のトリガーをいれる
- おはようございます
- Responseに会話の返答をいれる
- おはよう!
作成が完了したら右側のシミュレーターでテストします。「おはようございます」と発言すると「おはよう!」が返ってくることが分かります。
Dialogflowは学習する
いくつかの「おはようパターン」を入れておけば、その中に無いパターンでも良い感じに解釈してくれるようになる。
下記画像の例では「おはよ」というのはUser Says に登録されていないが、ちゃんと解釈してくれている。
最初から入っている2つの特殊なIntent
- Default Welcome Intent
- Google アシスタントなどでアプリを起動した時に返答する挨拶文
- 今回は使用しない
- Default Fallback Intent
- ユーザーの発言がどのIntentにも当てはまらない時に呼ばれる
- 「すみません、分かりませんでした」のような文言を返す
- 「サーバーエラーです」のような文言を返すのはNG
- 会話にエラーは存在しない
Entity
- 文章から特定の単語を取り出すための辞書
- 通貨、時間、メールアドレスなどの標準的なものは既に用意されている
- ユニークなワードも自分で作成可能
※正規表現やMeCabの品詞分解が不要になる
Fulfillment
- サーバーの情報を登録する場所
- HTTPS POST 通信
- Google好きならfunctionsやappengineを使おう
- 登録できる情報
- URL
- BASIC 認証
- HEADER
- DOMAINS
お花畑7