【Dialogflow】ちょっと凝ったチャットボットを作りたい人が読むシステム構成の話
”簡単にチャットボットを導入してみた!けど、もっとこだわってチャットボットを作成したいんだ! …でも、次に何をしたらいいの?”
そんな方のために、凝ったチャットボットを作るためのシステム構成を紹介する記事です。
この記事は アイソルート Advent Calendar 23日目の記事です。
■はじめに
こんにちは。
webソリューショングループのfukatsu.hです。
今回は、チャットボットを作成できるサービス「Dialogflow」を使ってチャットボットを実現するためのシステム構成についてご紹介いたします。
「Dialogflowとは?」「Dialogflowってどうやって導入するの?」という方は、下記記事をご参考にして頂ければと思います。
【DialogFlow】手軽にチャットボットが作れる!4つの魅力とは?
乗り遅れるな!Dialogflow(旧API.ai)で作るGoogle Home アプリ開発
■本記事の概要
本記事では、Dialogflowを使ったチャットボットサービスのシステム構成例を紹介します。
紹介する構成例は下記3つで、構成図とその概要、他2例と比較したメリット・デメリットを併せて説明します。
1. Dialogflowとインテグレーションしているサービスとつなぐ
2. Dialogflowとインテグレーションしていない既成サービスとつなぐ
3. Dialogflowとインテグレーションしていない自作サービスとつなぐ
※Dialogflowとインテグレーションしている:GoogleAssistantやSlackなどのサービスと連携して、サービス-Dialogflow間のリクエスト・レスポンスのやり取りが保障されている仕組み。サービスとDialogflowの設定だけでそれぞれをつなぐことができる。
上記3例をまとめると、下記表になります。(※筆者の経験ベースの所感です)
開発速度 | 作りこみ | 開発コスト | 開発難易度 | 障害対応 | |
---|---|---|---|---|---|
1. | 〇 | △ | ◎ | ◎ | △ |
2. | △ | 〇 | △ | 〇 | 〇 |
3. | △ | ◎ | △ | 〇 | 〇 |
・凡例
◎…とても優れている
○…優れている
△…今一つ
ユースケースで分けると下記のようになります。
とにかく早くチャットボットを作り上げたい方…1
どうしても既成サービスとつなぎたい方…2
ユーザインターフェース部分を作りこみたい方…3
詳細は以降の1.~3.で説明します。
1. Dialogflowとインテグレーションしているサービスとつなぐ
1.1 構成概要
Dialogflowが直接インテグレーションしているサービスについて、今回は「GoogleAssistant」を例に説明します。
こちらの構成は、ユーザとのインターフェース部分が既製品かつDialogflowが公式的にインテグレーションしているため、サービスとDialogflowを設定するだけで、会話だけであれば実現することが可能です。
1.2 構成図
1.3 簡易リクエストフロー
①ユーザが発話(リクエスト)
②リクエストをDialogflowへ
③リクエストに応じたユーザへ返すレスポンス作成
④(設定されていれば)ユーザにレスポンスを返す前に、レスポンス内容(会話内容)をデータストアに書き込む
⑤会話内容の保持
1.4 構成詳細
①GoogleAssistant
既製品のため開発は不要です。Dialogflowと合わせて設定することで、すぐに会話することができます。
具体的な利用方法としては、
Ⅰ.携帯端末でGoogleAssistantを起動し、特定の文言でGoogleAssistantアプリを立ち上げる
Ⅱ.音声またはキーボードでリクエスト
の2ステップで会話がスタートできます。
②Actions on Google
ここで①から来たリクエストをどの処理(actionと呼ばれる)に通すかを決定できます。今回はDialogflowですが、その他actions sdkなどがあるようです。
③Dialogflow
GoogleAssistantから飛んでくるリクエストを受けて、特定のIntentを発火させます。
Intentとは特定のリクエストに対するレスポンス定義のようなものです。
例えば、「こんにちは」というリクエストが来たら「こんにちは」と返すレスポンス定義の単位です。
ここで定義した通り、リクエストに応じたレスポンスを返却します。
Fulfillmentを設定していれば、レスポンスを返却する前にFulfilmentの処理を通します。
④Fulfilment
Fulfilmentでは、ユーザにレスポンスを返す前にレスポンスを加工したり、レスポンスを使った別の処理(会話情報をデータベースに格納するなど)を挟むことができます。Fulfilmentには、Dialogflow付属のinlineEditor(GCPサービスのCloudFunctionに接続する)や外部のWebhookサービスを設定できます。
どちらを使うかは例えば処理の規模によって決定します。構成例では会話データの書き込み程度なので、inlineEditorを選択しています。
Fulfilment部分の処理は作成したいシステムに応じて開発する対象となります。
⑤BigQuery
会話内容を保持するデータストアです。BigQuery以外にもGCEに導入したデータベースなどでも代用可能です。
1.5 メリット・デメリット
■メリット
・フロントの開発をしなくともよい(開発コスト低)
・インテグレーションの仕組みができているため、導入が楽
・Fulfillmentも実装しなければ、1行もコードを書く必要がない
・サーバレスなため、グローバル展開しやすい
■デメリット
・フロントのサービスで障害があった場合はそちらの対応待ちとなる
・レスポンス形式をカスタマイズできない
・GoogleAssitantのエラーは現状既存サービスで検知する仕組みがない
2. Dialogflowとインテグレーションしていない既成サービスとつなぐ
2.1 構成概要
Dialogflowがインテグレーションしていない既成サービスの構成図について、今回は「LINE」を例に説明します。
(※開発当時はインテグレーションされていませんでしたが、現在はインテグレーションされているようです)
こちらの構成は、ユーザとのインターフェース部分が既製品ですがDialogflowが公式的にインテグレーションしていないため、サービスとDialogflowの設定の他に、サービスとDialogflowの間にリクエスト・レスポンスを変換するフォーマット変換サーバを用意する必要があります。
2.2 構成図
2.3 簡易リクエストフロー
①ユーザが発話(リクエスト)
②リクエストを変換しDialogflowへ(DialogflowからのレスポンスをLINE用に変換)
③以降は1.と同様
2.4 構成詳細
①LINE
既製品のため開発は不要です。
設定として、LINE開発者アカウントの登録など設定が必要です。
登録後の具体的な利用方法としては、
Ⅰ.LINEを起動し、開発者アカウントと友達になる
Ⅱ.会話リクエスト
の2ステップで会話がスタートできます。
②フォーマット変換サーバ
ここで①から来たリクエストをDialogflow用のリクエストに変換します。
また、Dialogflowから返却されたレスポンスをLINE用に変換する処理も必要です。
③以降は1.と同様のため割愛。
2.5 メリット・デメリット
■メリット
・フロントの開発をしなくともよい(開発コスト低)
・Dialogflowにリクエストする前に処理を挟める
・既製品とのインテグレーションが可能
■デメリット
・変換サーバの開発・運用・維持が必要
・レスポンス形式をカスタマイズできない
3. Dialogflowとインテグレーションしていない自作サービスとつなぐ
3.1 構成概要
Dialogflowがインテグレーションしていない自作サービスの構成図について、今回は「自作WEBサービス」を例に説明します。
こちらの構成は、ユーザとのインターフェース部分を作成し、Dialogflowとインテグレーションさせる方法です。
なお、WEB側はまだ作成されていない状態で、Dialogflowと同時に開発が始まることを想定しています。
3.2 構成図
3.3 簡易リクエストフロー
①ユーザが発話(リクエスト)
②WEB資材(Dialogflowと直接やり取りできるインターフェースとする)
③以降は1.と同様
3.4 構成詳細
WEB側の開発でDialogflowと直接やり取りできるインターフェースに実装することで、変換サーバを挟むことなくやり取りができる構成。
それ以外は1.と同様。
3.5 メリット・デメリット
■メリット
・フロントの開発で作りこめば、様々なリクエスト・レスポンスに対応できる
・フロントの障害のハンドリングが可能
■デメリット
・フロントの開発・運用・維持が必要(開発コスト高)
・グローバル化の際もフロントは作り直し
・利用ユーザも開発も、導入までの道のりがやや長い
■ おわりに
本章で紹介したシステム構成例からそれぞれの特徴を理解して、作成したいサービスに最も合った構成を検討いただければと思います。
また、本章で紹介したシステム構成例は飽くまで例であり、これに囚われず新しいシステム構成の検討が進められれば、より良いチャットボットサービスのモデル作成につながるかと思います。
この構成例がその一助となれば幸いです。
■次回
明日はkikuchi.sさんの「【Dialogflow】爆速チャットボット開発」です。