ステートを利用する ステートを利用する

ステートを利用する

最終更新日:

ステートの概要

DH-Cconversationにおける「ステート」は、エージェントとの会話によって保持される「ユーザの情報」を指します。DH-Cconversationはトピックや雑談表現、質問などで「ステート」にセットするラベルを設定ができ、ユーザとエージェントが会話をすることによってステートが溜まっていきます。

 

質問の設定で紹介した例をもとに説明をします。

例えば、下記のように「好きな焼肉の部位は?」という質問を作成するとします。

_2021-06-13_23.20.46__1_.png

ステート名には、「favorite_steak_part」という文字列を設定しています。

この設定をエージェントに追加した状態で、ユーザが会話をします。下の画像は確認用画面ですが、動作はデジタルヒューマンでも同じです。

_2021-06-13_23.26.22__1_.png_2021-06-13_23.27.00__1_.png

 

この会話がなされると、DH-Cconversation上には下記の様な情報が蓄積されます。

user_id: xxxxxxxxxxxx 
favorite_steak_part: ロース

※「user_id」はユーザごとに割り振られたIDです

会話を行ったユーザの好きな焼肉の部位(favorite_steak_part)が「ロース」であると保持されたことになります。このように、会話の中で様々なユーザの情報を取得し、その後の会話に活用することができるのが「ステート」の仕組みです。

そして「ステート名」は、ユーザ情報を保持するための「ラベル」であり、ユーザ情報を後から引き出す際に利用します。プログラムでいう変数のような物です。

 

ステート名を設定できる箇所

ステート名が設定できるのは下記の4つです。

  1. 質問
  2. トピック
  3. 雑談表現
  4. シナリオ内のノード

いずれもステート名と同時に設定するエージェントの質問もしくは応答に対して行われたユーザの回答がユーザ情報が、ステート名をラベルとして保持されます。

 

ステート名設定の注意事項

ステートには下記の制約があります。

  • 32文字以内
  • 「,」(カンマ)を利用しない
  • 下記は予約語のため利用不可
    • username : デフォルトで保持されています。

 

ステートの活用方法

応答に含める

一度ユーザから取得したステートは、応答文に含めることができます。ユーザの名前などを応答に含めたいときなど、応答文に自動的に文字列を挿入したいときに便利です。

下記は、ユーザの好きな焼肉の部位によって応答を変える例です。

_2021-06-13_23.28.11__1_.png

「#{ステート名}」の表記を応答文に含めることによって、ユーザの情報に合わせた応答を作成することができます。この例の場合は、すでにユーザが好きな焼き肉の部位を答えている場合、#{favorite_steak_part} の部分がその名前に置き換わって表示されます。

_2021-06-13_23.29.08__1_.png

この場合、「favorite_steak_part」が保持されていない場合、うまく答えを返すことができないので、後述するステートを用いた条件設定を行いましょう。

 

 

応答や質問の条件として利用する

ステートは応答や質問を発動するための条件として利用ができます。

特定のステート名について、ユーザの情報があるかないか、もしくはその内容によって、応答や質問をするかしないかを判断することが可能です。

_2021-06-28_21.30.37.png

 

条件なし

条件を特にしない場合は、この項目にします。

 

次のステートを保持している

_2021-06-28_21.33.21.png

指定したステート名が既にユーザ情報として保持されている場合のみ、質問や応答が発動します。

上記の例の場合は、「favorite_steak_part」を設定すると、好きな焼肉の部位についてエージェントが知っている時だけ、応答が返されます。

複数指定したい場合は、「,」(カンマ)区切りでステート名を列挙します。

複数指定を行うと、全てのステート名が保持されたときのみ発動します。

 

次のステートの値が一致している

_2021-06-28_21.33.45.png

ステート名についてのユーザ情報があるかどうかだけでなく、その値(内容)によって条件を指定する場合は、この項目を設定します。

上記の例では、「favorite_steak_part」というユーザ情報に「ロース」という言葉が入っている時のみ、質問や応答が発動します。

「次のステートを保持している」と同様、複数指定したい場合は「,」(カンマ)区切りでステート名と値を列挙します。列挙をする場合は、ステート名と値それぞれの列挙の順番を同じにする必要があります。下記の説明を参照。

 

複数指定時の注意事項

ステート名

state1,state2,state3

value1,value2,value3

複数指定時は必ずステート名と値に指定するワードの数が同じになるようにします。

個数が異なる場合は正しく条件が動作しません。また、ステート名と値の並び順は対応づいたものでなければなりません。

 

次のステートの値が含まれている

_2021-06-28_21.39.33.png

「次のステートの値が一致している」と基本的な考え方は同じですが、こちらの条件は値が完全一致ではなく「部分一致」した場合に応答や質問が発動します。

この例の場合、「favorite_steak_part」に「肩ロース」など「ロース」という言葉が含まれた場合に発動します。

こちらも複数指定が可能です。

複数指定の際の注意は上述したものと同様です。

 

次のステートの値が保持されていない

_2021-06-28_21.41.55.png

指定したステート名が保持されていない場合のみ、質問や応答が発動します。

上記の例の場合は、「favorite_steak_part」を設定すると、好きな焼肉の部位についてエージェントを知らない時だけ、応答が返されます。

複数指定したい場合は、「,」(カンマ)区切りでステート名を列挙します。

複数指定を行うと、全てのステート名が保持されたときのみ発動します。