Chapter 14

ユーザのステートを利活用する

maKunugi
maKunugi
2021.12.07に更新

このチャプターのゴール

  • meboにおけるステートについて理解ができている
  • ステートを活用して会話コンテンツを作成できる
  • エージェントと会話したユーザのステートを確認できる

ステートとは

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

例として、シナリオのChapterで作成した以下のノードを見てみましょう。

こちらはユーザに対して年齢を尋ねるノードでした。ステートに「age」というキーワードが指定されています。

この状態でエージェントと会話を行うと、年齢を尋ねた質問に対してユーザが答えた会話がステートとして保持されます。例えば上記のイメージの会話の応答としてユーザが「20代前半」と答えると、ステートには、age: 20代前半という情報が保持されます。

また、ノードの質問に「#{username}さんの年齢はおいくつですか?」と入力してありますが、#{username}もステートを利用した記法です。保持されたステートは#{ステートのラベル名}という記法で値を呼び出すことができます。この例の場合、usernameというステートが保持されていれば、質問文にはユーザの名前が挿入されます。

ステートを設定できる機能

ステートは下記の3つの機能で利用ができます。

  1. トピック
  2. 雑談表現
  3. シナリオ

いずれの機能もエージェントの発話に対してステートのラベル名が設定できます。そのエージェントの発話に対してユーザが応答をしたタイミングでステートに情報がセットされます。

ステート設定の注意事項

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

  • 32文字以内
  • 「,」(カンマ)を利用しない
  • 予約語は利用不可

ステートの予約語

  • username
  • every
  • day
  • 曜日
    • Monday
    • Tuesday
    • Wednesday
    • Thursday
    • Fryday
    • Saturday
    • Sunday
  • 時間帯
    • morning
    • noon
    • afternoon
    • evening
    • night
    • eary morning

定期的に変化するステート

ステートには期間が指定できます。

期間指定の例

ステート名を下記のようにします。

曜日を指定

<ステート名> + (スペース) + every Sunday

<ステート名> + (スペース) + every Monday

<ステート名> + (スペース) + every Tuesday

<ステート名> + (スペース) + every Wednesday

<ステート名> + (スペース) + every Thursday

<ステート名> + (スペース) + every Friday

<ステート名> + (スペース) + every Saturday

1日に1回

<ステート名> + (スペース) + every day

時間帯を指定する

<ステート名> + (スペース) + every morning

<ステート名> + (スペース) + every early morning

<ステート名> + (スペース) + every afternoon

<ステート名> + (スペース) + every noon

<ステート名> + (スペース) + every evening

<ステート名> + (スペース) + every night

時間帯と曜日を組み合わせる

<ステート名> + (スペース) + every afternoon Sunday

期間指定ステートに格納される値

期間指定ステートが設定された発話に対するユーザの応答は、下記のようなステート名で保持されます。
<ステート名> 2021-06-28 morning

「(ステート名) + 日付 + 時間帯」のように、「every」の部分が日付に変換され保持されます。この保持された情報は、他のステートと同様、「#{<ステート名> 2021-06-28 morning}」という記法で、応答文に組み込むことが可能です。

期間指定ステートの利用例

例えば、today's plan every day というステートを設定し、このステートが存在しないことをシナリオの「トリガー」に設定したとします。その場合、1日に1回発動するシナリオを作成することができます。
このように、

  • 定期的にシナリオを発火させたい場合
  • 日ごとに情報を収集したい

といった用途に期間指定ステートは利用できます。

ステートの活用方法

1. 会話コンテンツの応答に含める

先述したように、保持したステートは応答に含めることができます。保持されたステートは#{ステートのラベル名}という記法で値を呼び出します。この機能を利用することで、会話の内容をユーザごとに変化させることが可能になります。

2. 応答やシナリオの条件として利用する

ステートは応答やシナリオの条件として利用ができます。特定のステート名について、ユーザの情報があるかないか、もしくはその内容によって、応答やシナリオのノードを呼び出すか等を判断することが可能です。

応答にステートの条件を設定する

会話コンテンツの応答には条件が設定できます。条件を1つ1つ見てみます。

条件なし

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

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

指定したステートが既にユーザ情報として保持されている場合のみ、質問や応答が発動します。上記の例の場合は、「favorite_steak_part」を設定すると、好きな焼肉の部位についてエージェントが知っている時だけ、応答が返されます。複数指定したい場合は、「,」(カンマ)区切りでステート名を列挙します。複数指定を行うと、全てのステート名が保持されたときのみ発動します。

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

ステート名についてのユーザ情報があるかどうかだけでなく、その値(内容)によって条件を指定する場合は、この項目を設定します。上記の例では、「favorite_steak_part」というユーザ情報に「ロース」という言葉が入っている時のみ、質問や応答が発動します。「次のステートを保持している」と同様、複数指定したい場合は「,」(カンマ)区切りでステート名と値を列挙します。列挙をする場合は、ステート名と値それぞれの列挙の順番を同じにする必要があります。下記の説明を参照。

複数指定時の注意事項

ステート名

state1,state2,state3

value1,value2,value3

複数指定時は必ずステート名と値に指定するキーワードの数が同じになるようにします。個数が異なる場合は正しく条件が動作しません。また、ステート名と値の並び順は対応づいたものでなければなりません。

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

「次のステートの値が一致している」と基本的な考え方は同じですが、こちらの条件は値が完全一致ではなく「部分一致」した場合に応答や質問が発動します。この例の場合、「favorite_steak_part」に「肩ロース」など「ロース」という言葉が含まれた場合に発動します。こちらも複数指定が可能です。複数指定の際の注意は上述のとおりです。

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

指定したステート名が保持されていない場合のみ、質問や応答が発動します。上記の例の場合は、「favorite_steak_part」を設定すると、好きな焼肉の部位についてエージェントを知らない時だけ、応答が返されます。複数指定したい場合は、「,」(カンマ)区切りでステート名を列挙します。複数指定を行うと、全てのステート名が保持されたときのみ発動します。

シナリオのノードにステートの条件を設定する

シナリオのエッジにもノードを呼び出す条件を設定できます。

次のステートが存在する

ユーザが指定したステートを保持していた場合に次のノードが呼び出されます。ステートは複数指定ができます。複数指定した場合は、いずれかのステートが存在していれば発動します。

次のステートがキーワードとマッチする

指定したステートの値が特定のキーワードとマッチした場合に次のノードが呼び出されます。

次のステートがキーワードを含む

指定したステートの値が特定のキーワードを含む場合に次のノードが呼び出されます。

3. ユーザごとのステートを確認・編集する

ユーザ一覧画面では、ユーザごとに保持されたステートを確認・変更・修正できます。

https://mebo-admin.work/admin/users

ユーザ一覧画面にはステートが更新された日時の降順にユーザが表示されています。「ステートを確認」というボタンを押すことで、ユーザごとに個別のステートを確認できます。

ユーザのステートは管理者が変更・追加・削除を行うこともできます。削除する場合は、各ステートの横に表示されている「削除」というボタンを押しましょう。

ステートを追加する時は、右下の「追加する」というボタンから追加を行いましょう。ユーザの管理を行う上でステートにを編集する必要がある場合は、この機能を利用しましょう。

ステートに関する説明は以上になります。ユーザのステートをうまく利活用することで、エージェントはサービスのユーザ体験向上に大きく寄与できるようになります。ぜひこのステート機能をご活用ください。