こんにちは。SCSKの江木です。
これまでDialogflow CXでAgentを構築していて、困ったことが多々ありました。
今回はこれまでの経験をもとに、スムーズな開発と高品質なチャットボットを実現するためのTipsをいくつかまとめました。
本記事がAgentを作成するためのヒントになれば幸いです。
Dialogflow CXとは
Dialogflow CXとは、自然言語による対話をシステムに組み込む際に使えるプラットフォームです。高度なチャットボットや音声アシスタントを構築するためのツールであり、複雑な会話の流れや多様なユーザーの質問に柔軟に対応できることが特徴です。
Dialogflow CXの基本については以下のブログにまとめているので、ご参照ください。
Agentを作成するときのTips
Route Groupを使いこなせ!
Route Groupは、Routeを使いまわしたいときに使います。同じintentで遷移先が同じRouteが異なるPageで存在したとき、それぞれのページでRouteを作るよりも、Route Groupを使うことで開発を時間短縮することができます!!
Route Groupは以下の手順で新たに作成することができます。設定の仕方はRouteと同様にintentとTransitionを設定すると、動作します。
- Pageの詳細
- [Add state handler]をクリック
- [Route groups]にチェックして、[Apply]をクリック
- [Route groups]右の[+]をクリック
- [Route group]の[Create new route group]を選択
Parameterを使いこなせ!
Parameterを使うことで、Agentの実装の幅が大きく広がります。本節ではParameterについて説明した後、実装例について紹介していきます。
Parameterについて
Dialogflow CXにおけるParameterは、セッション中にエンドユーザーが入力した値を取得または参照するときに使用します。Parameterには以下の3種類が存在します。
- Intent parameter
- Form parameter
- Session parameter
それぞれのParameterについて説明します。
Intent parameter
Intentが一致した時にエンドユーザーが入力した値を抽出し、Intent parameterに設定されます。
以下のFlowを使用して、Intent parameterの取得方法を紹介します。
Page1の設定は以下の通りです。
curryというRouteに、curryというintentを設定しています。
以下のように、curryというintentにTraining phraseを入力し、curryという名前のIntent parameterを設定します。
続いて、Page2のFulfilmentにて、Intent parameterを取得します。
テストしてみると、以下のようにIntent parameterを取得できていることがわかります。
Form parameter
Form parameterは参照で使用されず、パラメータの入力ステータスの確認で使われます。つまり、「$page.params.パラメータ名」といった記述はできません。
「$page.params.status = “FINAL”」のように現在のページですべてのパラメータが入力されているのか確認するために使用します。
以下のように、Conditionで設定することが多いです。
Session parameter
実行時に任意のパラメータが設定されると、Session parameterに設定されます。
Session parameterはPageのParameterで設定することが多いですが、Route、eventhandler、PageのFulfillmentのParameter presetsでも設定することができます。
以下のFlowを用いて、Session parameterの取得方法を紹介します。
Page1の設定は以下の通りです。
Parameterにdrinkというパラメータが設定されています。このパラメータに値が入ったときにSession parameterに値が入ります。
続いて、Page2のFulfilmentにて、Session parameterを取得します。
テストしてみると、以下のようにSession parameterを取得できていることがわかります。
Parameterを使った実装例
以下のフローチャートのようなコンサートのチケット申し込みを行うチャットボットを作る例を考えます。
また、以下の2つの機能が含まれるようにチャットボットを作成します。
- チケットの確認を行う際に、申し込むチケットによってチャットボットの応答が変わる
- チケット申し込みと確認におけるループの上限回数が3回である
以降、上から機能1、機能2と記載します。
このフローチャートに従って作成したFlowは以下の通りになります。
このFlowにおけるPageの役割は以下の通りです。
- Select Ticket
- 申し込むチケットをユーザーに選択させる
- 「男性アイドルグループMと女性アイドルグループWのどちらのチケットが欲しいですか?「M」か「W」で教えてください。」とユーザーに質問する
- Ticket Confirm
- 申し込むチケットの確認を行う
作成したFlowとPageについての説明が終了したところで、次は機能1と機能2をどのように実装したのかを説明します。
機能1
Intent parameterを使って、実装していきます。
以下のようにIntentを設定します。
「M」、「W」と入力されたときにきちんとIntent parameterに値が入るように設定しました。
先ほど設定したIntentであるticket.mとticket.wをSelect TicketページのRouteであるticket.mとticket.wに設定します。
次にこのIntent parameterを参照します。Ticket ConfirmページのパラメータであるresponseのAgent responsesという項目で下記のようにIntent parameterによって、チャットボットの返答が変わるように設定します。
※パラメータであるresponseはエンドユーザーの返答である「はい」か「いいえ」を格納するために設定しています。「はい」ならばEnd Sessionページへ、「いいえ」ならSelect Ticketページに遷移するように設定しています。
機能1の実装は以上になります。
機能2
Session parameterを使って、実装していきます。
ループカウントするためのパラメータを用意するため、Start PageのルートであるtrueのParameter presetsにordercountというSession parameterを定義します。
※trueは必ず遷移するルートで、遷移先はSelect Ticketに設定しています。
続いて、チケットの確認を行うたびにordercountがインクリメントされるように設定します。Select TicketページのFulfillmentのParameter presetsで以下のように設定します。
また、Select Ticketページのルートに、ordercountが4になったとき(つまり、3回申し込み確認を終えたとき)にEnd Sessionに遷移するようなルートを設定します。
※ここでAgent responsesで「男性アイドルグループMと女性アイドルグループWのどちらのチケットが欲しいですか?「M」か「W」で教えてください。」と返答する条件として「ordercount < 3」と設定しているのは4回質問しないようにするためです。
機能2の実装は以上になります。
他の細かい設定は説明がかなり長くなってしまうので、今回は割愛させていただきます。
Start Pageのintentに注意しろ!
Start Pageに設定したRouteのIntentはすべてのPageに伝播されます。ある特定のPageからの遷移を設定したいときは、Start PageにIntentを設定しないように気を付けてください。
冒頭で紹介したブログにて作成した、以下のAgentで実際に挙動を確かめてみます。
AgentのPageに設定した項目の一部を以下に示します。
Page | Fulfillment | Route | intent | Training phrase | Transition |
Start Page | – | store.location | store.location | 任意のお店の場所を聞く フレーズ |
Store Location |
store.hour | store.hour | 任意の営業時間を聞く フレーズ |
Store Hours | ||
Store Location | Agent says: 東京都************です。その他ご用件はございますでしょうか。 |
Route Group: Closing |
– | – | – |
Store Hours | Agent says: 月曜日から土曜日まで9:00 -19:00 で営業しています。日曜祝日は定休日です。その他ご用件はございますでしょうか。 |
Route Group: Closing |
– | – |
次にRoute Groupの設定を示します。
Route Group | intent | Training phrase | Transition |
Closing | closing | いいえ、ありません等の否定のフレーズ | End Session |
それではAgentに会話してみます。お店の場所を聞いた後に、試しに営業時間を時間を尋ねたところ、以下のようにAgentが返答を返してきました。
Store LocationからStore Hoursへ遷移するようなRouteを設定していないのに、遷移してしまいました。Start Pageに設定したintentが効いているのが確認できますね!!
おわりに
いかがだったでしょうか。
今回はDialogflow CXでAgentを作成するときのTipsを紹介しました。
私が開発していて躓いたポイントを盛り込んでいるので、参考にしていただければと思います。
本記事が皆様のお役にたてば幸いです。
最後まで読んでいただきありがとうございました。