ステート
このチャプターのゴール
- ステートとは何かが理解できている
- ステートの活用用途が理解できている
ステートとは
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のリクエスト時に、ステートを明示的に渡すことが可能です。
3. 埋め込みタグの利用
チャット画面をWebサイトに埋め込むタグ内でも指定ができます。
<a class="chatButton"
data-utterance="RAGって何?"
data-states='{"param1": "value1", "param2": "value2"}' href="#">
RAGって何?
</a>
ステートの確認
「レポート」->「ユーザー一覧」を開きましょう。
ユーザ一覧画面では、ユーザごとに保持されたステートを確認・変更・修正できます。

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

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

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