ステート

このチャプターのゴール

  • ステートとは何かが理解できている
  • ステートの活用用途が理解できている

ステートとは

miiboにおける「ステート」は、エージェントとの会話によって保持される「ユーザの情報(状態)」を指します。miibo、ユーザとエージェントが会話をすることによって、ユーザー固有のパラメータを取得し、永続的に保持し活用することが可能です。

ステートを利用することで、

  • ユーザーの状態に応じて会話をパーソナライズできる
  • ユーザーの状態を把握しニーズ抽出を行う
  • ステートに応じて処理を分岐する

等の体験設計が可能になります。

例)ステートに自動でユーザーの情報を抽出した例

miiboでは、ユーザーには必ず一意のIDが振られます。そのIDに対してステートは保持されます。

例)ステートに自動でユーザーの情報を細かく抽出した例

miibo model「溶けこむAI」における、「共感」レイヤーを司る非常に重要な機能です。

※上記のユーザーは架空のユーザーです。

このように抽出されたステートは、様々な用途で利用可能です。

ステートの利用

1. 発話やプロンプトに埋め込む

ステートは値を#{ステート名}という記法で、様々な箇所に埋め込めます。

埋め込むことができる項目

プロンプトに埋め込む例

下記はユーザーの困りごとです。
困りごと: #{困りごと}

上記の困りごとに応じて、ユーザーをサポートしてください。

このように、ステートの値を埋め込むことで、パーソナライズされた体験を構築できます。

2. 分析に活用する

ユーザーのステート情報は、Webhook機能を用いて外部サービスに共有することができます。抽出したステートを分析のために外部サービス連携することで、ニーズの抽出や情報の整理を行うことができます。

ステートの記録

ユーザーごとのステートは、様々な方法・タイミングで登録することができます。

ステートの登録方法は以下の通りです。

あらゆる会話の中で記録したい

miiboでは自動的にAIがステートの抽出を行ってくれる、非常に汎用性のある機能を用意しています。

1. 「ステートの抽出」でステートを追加する

「AIによる応答の設定」にある「ステートの抽出」という項目で設定が可能です。
AIとのいずれの会話でも記録したい場合に、最も設定が簡単な方法になります。

(例)

キー: ユーザーの困りごと 記録する内容:ユーザーがその時点で困っていることを100文字程度で要約して記録
キー: ユーザーの感情  記録する内容: その時点のユーザーの感情を推測して記録。不明な場合は「不明」と記録してください

2. プロンプトでステートを追加する

プロンプトを用いてステートを動的に追加する方法を利用します。
自由文で柔軟性高く記載できるため、意図に沿う指示や微修正をしやすいメリットがあります。

A、B2種類のプロンプトでステートの記録ができます。

A. 基本的なプロンプトでの指示

「ステートに記録」という指示によって、ステートを記録させることができます。

会話の度に、その時点のユーザーの感情をステートに記録してください。
キー名は「感情」です。会話の内容から感情を予測して記録してください。
感情が不明な場合は「不明」と記録してください。

B. 厳格な指示 (上級者向け)

miiboでは#{KEY:VALUE}の形式でAIが出力を行うと、そのKEYをステートのラベルとして値を記録する仕組みになっています。

下記のような厳格な指示を用いることで、開発時などA以上に意図通りの指定をしたい際に有効です。

応答の文末には毎回必ず下記のフォーマットで、その時の感情を出力してください。
フォーマット
下記のように感情を出力してください。
#{感情:寂しい}
#{感情:嬉しい}
#{感情:悲しい}
#{感情:絶好調}
#{感情:<現在の感情>}
冒頭の#と{}の括弧で囲うのを省略せずに必ず出力をしてください。
#を省略すると、ユーザーにとって甚大な不利益を与えることになります。

詳細はこちらをご確認ください。

特定の会話シーンでのみ記録したい

1. シナリオ対話での発話

シナリオ対話を使うことで、ノードごとに抽出するステートを変えることが出来ます。
シナリオ対話での設定はA,Bの2通りあります。

A. 決め打ちでステートを記録したい(静的)

ノードの中でユーザーに質問を記載し、回答をそのままステートとして保存したい際に有効です。
詳細はこちらをご覧ください。

B. 柔軟に判断してステートを記録したい(動的)

各ノードで個別にプロンプトが記載できるため、特定の会話シーンでのみステートを柔軟に記録する設定が可能です。
記載方法は上述のプロンプトでのステートの追加方法と同じです。

2. ルールベース中の発話

ルールベース応答の設定でも、決め打ちでステートを抽出することが出来ます。
ルールベース応答の中でユーザーに質問を記載し、回答をそのままステートとして保存したい際に有効です。

3. WebhookのFunction Calling

WebhookのFunction Callingトリガーで取得したパラメータをステートに格納することができます。
詳細はこちらをご覧ください。

会話の開始時にステートを渡したい

会話の開始時に、事前に用意したステートを明示的に渡すことも出来ます。
ユーザーに対してステートを自動的に登録させたい場面に活用が出来ます。

1. Webチャット画面のURL

ステートはチャット画面のURLのクエリーパラメータからも登録できます。

例:

https://miibo.jp/chat/<エージェントID>?name=<エージェントの名前>&favorite_fruit=apple

このように、公開用のチャット画面のURLに、&favorite_fruit=appleというパラメータを渡すと、favorite_fruitがステートとして登録されます。

2. API経由での登録

エージェントと会話するAPIのリクエスト時に、ステートを明示的に渡すことが可能です。

詳細はAPIリファレンスをご覧ください。

3. 埋め込みタグの利用

チャット画面をWebサイトに埋め込むタグ内でも指定ができます。

<a class="chatButton" data-utterance="RAGって何?" data-states='{"param1": "value1", "param2": "value2"}' href="#"> RAGって何? </a>

詳細はこちらをご覧ください。

ステートの確認

「レポート」->「ユーザー一覧」を開きましょう。
ユーザ一覧画面では、ユーザごとに保持されたステートを確認・変更・修正できます。

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

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

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


Did this page help you?