このチャプターのゴール
- シナリオ対話の仕組みについて理解ができている
- シナリオを利用して会話コンテンツが作成できる
「シナリオ」とは
「トピック」や「雑談表現」は一問一答のやりとりを扱う会話コンテンツですが、エージェントに一問一答でない決められたフローに従った会話を行わせたい場合もあります。その場合に利用するのが、「シナリオ」という会話コンテンツです。シナリオは会話のフローを描き、発動するトリガーを設定することで、決められた流れに従った会話を作ることができます。
利用シーン
このシナリオ機能は例えば下記のような用途に利用が可能です。
- ユーザの情報収集
- アンケート
- インタビュー
- 商品レコメンド
- 条件分岐が必要な会話
シナリオ対話の作成方法
シナリオを作成する方法について説明をしていきます。今回はシナリオの例に「ユーザのプロフィールについてのアンケート」を題材として紹介します。
1. シナリオの作成
「会話のトレーニング」画面から「シナリオ一覧」画面を開きましょう。
「新しいシナリオの作成」をクリックして、シナリオエディタを起動します。2. シナリオの設定
シナリオエディタを開いたら、まずはシナリオの設定をします。
「シナリオの設定を表示」を押して、設定画面を表示します。
シナリオの名前
管理のしやすいシナリオの名前を自由に設定しましょう。シナリオの名前は管理画面でのみ表示されます。
シナリオのトリガー
会話の中でシナリオが開始される条件を設定します。シナリオのトリガーは下記から選択できます。
- 特定の発話があった場合
- 特定の発話が含まれた場合
- 会話の開始と同時に呼び出す
- 次のステートが存在しない場合
特定の発話があった場合
特定の発話にマッチした場合にシナリオを開始します。特定の発話は、改行をすることで複数設定できます。
特定の発話が含まれた場合
特定の発話が含まれた場合(部分一致)にシナリオを開始します。特定の発話は、改行をすることで複数設定できます。
会話の開始と同時に呼び出す
会話の開始と同時にシナリオを開始します。
次のステートが存在しない場合
指定したステートがない場合、シナリオを開始します。不足しているユーザの情報について質問をしたい場合などに利用が可能です。
3. ノードを作成
シナリオの設定が完了したら、会話のフローを構築していきます。「ノードを追加する」をクリックしましょう。
ノードとは
ノードはシナリオにおける会話の発話を行う1単位です。シナリオエディタにおける1つのアイテム(四角形)が1つのノードになります。実際にノードを作成しながらイメージを深めていきましょう。「ノードを追加する」というボタンをクリックすると下記のモーダルが表示されます。
各項目について説明をします。
ノード種別
ノードの種別が選べます。種別は下記のA~Cの3種類です。
A.質問
ユーザに質問を行い、ユーザの応答を保持します。
B. 発話
エージェントの発話のみ行い、ユーザの情報を保持しません。
C. フリートーク
次のシナリオに進む条件を満たすまで、エージェントにフリートークをさせます。フリートーク時は、トピックや雑談表現、AIの自動応答などによる会話が行われます。
タイトル
ノードのタイトルを設定します。シナリオエディタ上でのみ利用され、ユーザには表示されません。
質問・発話
エージェントがユーザに対して行う発話です。ユーザとの会話で表示されます。ノード種別が「発話」の場合は、質問ではなく「発話」という表記になります。
この発話には自動応答も含めることができます。含めたい場合は@{auto_response}
という文字列を含めます。
例えば、
そうだったのですね、@{auto_response}
という表現を入力しておくと、@auto_response
の部分をプログラムが自動で補ってくれます。
(学習したトピックや雑談表現の応答も利用されます。)
※ AIによる応答を返す場合は、エージェントの設定でAIによる応答をONにしておく必要があります。
ステート名 (任意)
質問によって得られた情報を保持するステートの名前を設定できます。ステートに関しては後のChapterで詳細に説明します。現段階では、「シナリオの会話の中でユーザの回答を保持したいときに指定する」程度の理解で問題ございません。
クイックリプライ (任意)
エージェントが発話を行う際に表示される選択肢を設定できます。1行に1つ入力することで複数入力ができます。
画像URL (任意)
発話の際に表示される画像を指定できます。画像のURLを指定しましょう。
URL (任意)
発話の際に表示されるリンクを指定できます。URLを指定しましょう。
抽出パターン (任意)
ユーザの応答から抽出する文字列を正規表現で指定できます。
例えば、年齢を尋ねるノードにおいてユーザが「24歳です!」と回答した場合、抽出パターンに「\d+歳
」という正規表現を指定しておくと、「24歳」という文字列を抽出できます。
拡張データ (任意)
API連携で返される拡張データを設定できます。JSON形式で入力が可能です。後のChapterで詳細に利用方法を説明します。
回答が正しいかをユーザに確認 (任意)
この項目がチェックされていると、エージェントは質問後にユーザの回答が正しいかをユーザに一度確認します。確認して「はい」と回答された場合に、次のノードへ進みます。回答ミスを防ぎたい質問等でご活用ください。
「終了」と言われるまで回答を蓄積する (任意)
複数の回答をさせたい場合に利用します。この項目にチェックが付いている場合、エージェントの質問に対してユーザが「終了」と言うまでに行われた発話を全て記憶します。
選択肢からのみ回答が可能 (任意)
自由入力をさせず、上述した「クイックリプライ」で設定した選択肢からのみ回答してもらいたい場合にチェックします。この項目にチェックが付いていると、選択肢以外の回答を防ぐことができます。
今回は例として下記のようなノードを設定をしてみます。名前を尋ね、入力された名前が正しいかどうかを最後に確認します。
設定をしたら右下の「追加する」ボタンをクリックしましょう。
ノードが追加されたことを確認できました。試しにもう1つのノードを追加してみましょう。
上記のイメージの例では、年齢について尋ねるノードを追加しています。
これで2つのノードが作成できました。
4. 条件(エッジ)を作成
エッジとは
エッジはノードとその次のノードを繋ぐ線です。エッジには、次のノードに移動するための条件が設定されます。
先ほど作成したノードにエッジを追加していきましょう。
左側のノードの右隅にある・をマウスでクリックしたまま、右のノードの左隅にある・までドラッグします。ノードとノードが線で繋がると、下記のようなモーダルが表示されます。
これがエッジの条件設定モーダルです。この画面で次のノードが呼ばれるための条件を設定していきます。
エッジで設定ができる条件
エッジでは下記のA~Gの条件を設定できます。
A. 何らかの文字列が入力されている
ユーザの何らかの応答があれば次のノードに進みます。
B. 次の文字列を含む
特定の文字列を含んだ場合次のノードに進みます。
C. 次の文字列に一致する
ユーザの応答が指定した文字列に完全一致した場合に次のノードに進みます。
D. 次の正規表現にマッチする
ユーザの応答が指定した正規表現にマッチした場合に次のノードに進みます。
E. 次のステートが存在する
ユーザのステートに指定したステートが存在した場合に次のノードに進みます。
F. 次のステートがキーワードとマッチする
ユーザのステートに指定したステートが存在した上で、そのステートに紐づく値が指定したキーワードと完全一致した場合に次のノードに進みます。
G. 次のステートがキーワードを含む
ユーザのステートに指定したステートが存在した上で、そのステートに紐づく値が指定したキーワード含む場合に次のノードに進みます。
エッジを設定すると下記のように、エッジでノードが繋がれます。
このようにノードとエッジをつなぎ合わせていくことでシナリオ対話を構築することができます。作業がひと段落したら、右下にある「変更を保存」ボタンを押して保存しましょう。
ノードとエッジの繋げ方が理解できたら、コンテンツを増やしていきましょう。ノードとエッジはクリックをすると設定を後から変更できます。
5. シナリオを試す
シナリオの作成が完了したら、「変更を保存」を押してシナリオを保存します。シナリオを試す場合は、シナリオの起点となるノードをクリックして、「プレビュー」ボタンを押しましょう。
作成したシナリオの会話が始まれば成功です。
6. シナリオレポートを確認する
エージェントの公開が完了したら、シナリオ一覧画面を確認しましょう。
「レポートを確認」というボタンがあるので、そちらからシナリオへの回答を確認できます。
各項目の「確認」ボタンから、ユーザごとのシナリオへの応答内容を閲覧することができます。レポートはcsvもしくはxlsx形式でダウンロードすることも可能です。
以上で、シナリオについての説明を終わります。シナリオは利用シーンが多い機能だと思いますので、ぜひご活用ください。