ステートを利用する
ステートの概要
DH-Cconversationにおける「ステート」は、エージェントとの会話によって保持される「ユーザの情報」を指します。DH-Cconversationはトピックや雑談表現、質問などで「ステート」にセットするラベルを設定ができ、ユーザとエージェントが会話をすることによってステートが溜まっていきます。
例
質問の設定で紹介した例をもとに説明をします。
例えば、下記のように「好きな焼肉の部位は?」という質問を作成するとします。
ステート名には、「favorite_steak_part」という文字列を設定しています。
この設定をエージェントに追加した状態で、ユーザが会話をします。下の画像は確認用画面ですが、動作はデジタルヒューマンでも同じです。
この会話がなされると、DH-Cconversation上には下記の様な情報が蓄積されます。
user_id: xxxxxxxxxxxx favorite_steak_part: ロース ※「user_id」はユーザごとに割り振られたIDです
会話を行ったユーザの好きな焼肉の部位(favorite_steak_part)が「ロース」であると保持されたことになります。このように、会話の中で様々なユーザの情報を取得し、その後の会話に活用することができるのが「ステート」の仕組みです。
そして「ステート名」は、ユーザ情報を保持するための「ラベル」であり、ユーザ情報を後から引き出す際に利用します。プログラムでいう変数のような物です。
ステート名を設定できる箇所
ステート名が設定できるのは下記の4つです。
- 質問
- トピック
- 雑談表現
- シナリオ内のノード
いずれもステート名と同時に設定するエージェントの質問もしくは応答に対して行われたユーザの回答がユーザ情報が、ステート名をラベルとして保持されます。
ステート名設定の注意事項
ステートには下記の制約があります。
- 32文字以内
- 「,」(カンマ)を利用しない
- 下記は予約語のため利用不可
username
: デフォルトで保持されています。
ステートの活用方法
応答に含める
一度ユーザから取得したステートは、応答文に含めることができます。ユーザの名前などを応答に含めたいときなど、応答文に自動的に文字列を挿入したいときに便利です。
下記は、ユーザの好きな焼肉の部位によって応答を変える例です。
「#{ステート名}」の表記を応答文に含めることによって、ユーザの情報に合わせた応答を作成することができます。この例の場合は、すでにユーザが好きな焼き肉の部位を答えている場合、#{favorite_steak_part} の部分がその名前に置き換わって表示されます。
この場合、「favorite_steak_part」が保持されていない場合、うまく答えを返すことができないので、後述するステートを用いた条件設定を行いましょう。
応答や質問の条件として利用する
ステートは応答や質問を発動するための条件として利用ができます。
特定のステート名について、ユーザの情報があるかないか、もしくはその内容によって、応答や質問をするかしないかを判断することが可能です。
条件なし
条件を特にしない場合は、この項目にします。
次のステートを保持している
指定したステート名が既にユーザ情報として保持されている場合のみ、質問や応答が発動します。
上記の例の場合は、「favorite_steak_part」を設定すると、好きな焼肉の部位についてエージェントが知っている時だけ、応答が返されます。
複数指定したい場合は、「,」(カンマ)区切りでステート名を列挙します。
複数指定を行うと、全てのステート名が保持されたときのみ発動します。
次のステートの値が一致している
ステート名についてのユーザ情報があるかどうかだけでなく、その値(内容)によって条件を指定する場合は、この項目を設定します。
上記の例では、「favorite_steak_part」というユーザ情報に「ロース」という言葉が入っている時のみ、質問や応答が発動します。
「次のステートを保持している」と同様、複数指定したい場合は「,」(カンマ)区切りでステート名と値を列挙します。列挙をする場合は、ステート名と値それぞれの列挙の順番を同じにする必要があります。下記の説明を参照。
複数指定時の注意事項
ステート名
state1,state2,state3
値
value1,value2,value3
複数指定時は必ずステート名と値に指定するワードの数が同じになるようにします。
個数が異なる場合は正しく条件が動作しません。また、ステート名と値の並び順は対応づいたものでなければなりません。
次のステートの値が含まれている
「次のステートの値が一致している」と基本的な考え方は同じですが、こちらの条件は値が完全一致ではなく「部分一致」した場合に応答や質問が発動します。
この例の場合、「favorite_steak_part」に「肩ロース」など「ロース」という言葉が含まれた場合に発動します。
こちらも複数指定が可能です。
複数指定の際の注意は上述したものと同様です。
次のステートの値が保持されていない
指定したステート名が保持されていない場合のみ、質問や応答が発動します。
上記の例の場合は、「favorite_steak_part」を設定すると、好きな焼肉の部位についてエージェントを知らない時だけ、応答が返されます。
複数指定したい場合は、「,」(カンマ)区切りでステート名を列挙します。
複数指定を行うと、全てのステート名が保持されたときのみ発動します。
最終更新日 January 1, 2023