kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

#VUIchallenge #006 - Confirmations

f:id:kun432:20210711001052p:plain

#VUIchallengeの第6回です。テーマは「Confirmations」。

過去の#VUIchallengeの記事はこちら

お題

The challenge

Your VUI gives step-by-step guidance for cooking recipes. Design a solution for users that request a different recipe in-between steps.

Jesús' Tips

This is a confirmation situation. Stepping away from a recipe because of an error can be super frustrating for customers. How can you make sure that you are doing what customers expect? How can users recover from an unintended request?

DeepLによる日本語訳

課題

あなたのVUIは、レシピを作るためのステップ・バイ・ステップのガイダンスを提供します。ステップの合間に別のレシピをリクエストするユーザーのためのソリューションをデザインしてください。

Jesúsのヒント

これは確認のための状況です。エラーのためにレシピから離れてしまうことは、お客様にとって非常にフラストレーションの溜まることです。お客様が期待していることを確認するにはどうしたらいいでしょうか?ユーザーが意図しないリクエストから回復するには?

デザイン

まずはお題のシチュエーションを整理しましょう。こんな感じかなと。

  • スキルは、ステップ・バイ・ステップでレシピを説明してくれる。次のステップに進む場合はユーザに確認する。
  • ユーザは、レシピの説明を受けているステップの「途中」である
  • ユーザは、途中で「別のレシピ」を知りたくなった

会話フローだとこういう感じですかね。”ミートソースパスタ”のレシピを説明している途中だと思ってください。

ステップ1です。まず、お鍋に水を2リットル入れて沸騰させてください。
次のステップに進みますか?

はい

ステップ2です。塩をひとつまみ入れて、パスタを入れ、ほぐしながら7分ほど茹でます。
次のステップに進みますか?

(この間にポテトサラダも作らないと)ポテトサラダのレシピを教えて

つまり、レシピの説明が始まると、そのレシピ特有の「コンテキスト」が発生するということですね。レシピが切り替わったり、複数のレシピを並行で走らせたりするような場合は、このコンテキストを意識する必要があります。

ダメな例

コンテキストをきちんと把握した上で、うまく返せないととても使いづらいものになります。最初にダメな例を考えてみました。

コンテキストを全く意識しない

ステップ2です。塩をひとつまみ入れて、パスタを入れ、ほぐしながら7分ほど茹でます。
次のステップに進みますか?

(この間にポテトサラダも作らないと)ポテトサラダのレシピを教えて

わかりました。ポテトサラダのレシピですね。最初に材料を説明します。・・・
次のステップに進みますか?

(ポテトサラダのレシピのステップを最後まで進める)

これでポテトサラダは完成です。お疲れさまでした!他に知りたいレシピはありますか?

(ミートソースパスタの途中だったな)ミートソースパスタのレシピを教えて

わかりました。ミートソースパスタのレシピですね。最初に材料を説明します。・・・
次のステップに進みますか?

(途中まで進めてたんだけど!)

別のレシピを呼び出したことで、元のレシピのコンテキストが完全に失われてしまっています。このように一度呼び出すと一定のコンテキストで会話が継続する場合には、コンテキストから離脱する場合について意識する必要があります。

融通が利かない

ステップ2です。塩をひとつまみ入れて、パスタを入れ、ほぐしながら7分ほど茹でます。
次のステップに進みますか?

(この間にポテトサラダを作らないと)ポテトサラダのレシピを教えて

ごめんなさい、よくわかりませんでした。次のステップに進むには「はい」と言ってください。

(融通がきかないなぁ・・・)

こちらの場合、コンテキストは意識しているものの、コンテキストからの離脱を全く許容しない状態です。別のレシピを呼び出すためには、もうスキルを一旦終了して、再度スキルを呼び出す必要がありますね・・・

いくつかのアプローチ

どこまでやれるかはスキルの仕様によりますので、いくつかのパターンで見てみましょう。

できないことをきちんと説明する

一番シンプルなのはこれですね。

  • 一旦レシピの説明が始まったら、そのレシピの説明しかできない
  • 別のレシピに切り替えると、元のレシピで説明していた時点には戻れない

つまりコンテキストは常に一つであり、別のコンテキストに移る場合はもとのコンテキストには戻れない、という前提です。ユーザビリティとしてはあまり良くないかもですが、なんの説明なしに切り替わってユーザを混乱させてしまうよりは、きちんとできないことを説明するほうが全然良いと思います。イメージとしてはこんな感じかな。

ステップ2です。塩をひとつまみ入れて、パスタを入れ、ほぐしながら7分ほど茹でます。
次のステップに進みますか?

(この間にポテトサラダも作らないと)ポテトサラダのレシピを教えて

ミートソースパスタの説明中ですが、ポテトサラダのレシピの説明に切り替えます。その場合、ミートソースパスタのレシピの説明は最初からやり直す必要がありますが、よろしいですか?

(あ、そうなのか、しょうがないな、ポテトサラダはパスタができてからにしよう。)じゃあやっぱりやめとくよ

わかりました。ミートソースパスタのレシピの続きを説明します。・・・

機能としては足りないのですが、少なくともまったく融通が効かないわけではないですし、ユーザ側にはきちんと説明と選択肢が与えられますよね。最初の例に比べれば全然マシです。

コンテキストをきちんと管理する

理想的な例はこれになると思います。

ステップ2です。塩をひとつまみ入れて、パスタを入れ、ほぐしながら7分ほど茹でます。
次のステップに進みますか?

(この間にポテトサラダも作らないと)ポテトサラダのレシピを教えて

ミートソースパスタのレシピの説明中ですが、ポテトサラダのレシピの説明に切り替えます。終わったらミートソースパスタのレシピに戻ったほうがよいですか?

そのほうがいいな

わかりました。では一旦ポテトサラダのレシピを説明します。最初に材料を説明します。・・・

(ポテトサラダのレシピのステップを最後まで進める)

完成です。お疲れさまでした!ではミートソースパスタのレシピの説明に戻りますね。ステップ2の続きからです。・・・

はい、これだと複数のレシピを並行で動かすことができて、ユーザ側からすると時間を効率的に使えて良いですね!ユーザビリティとしてはとても良いと思います。

ただし、その代わり考えないといけないことはいろいろあります。

  • レシピを切り替える場合、元のレシピの名前やどこまで進んでいたかを記憶しておく必要がある。
  • レシピの切り替えを何個まで共用できるか?
  • レシピを切り替えて、途中で元のレシピに再度切り替えることを許容するか?

スキル開発を頑張ればできなくはないでしょうが、複雑になる分だけ、設計・開発・テストのコストも増えます。さらにいくらスキル側で多くのレシピを並行で動かせるとしても、多少なりともユーザ側の認知的負荷はあがることになりますので、それを下げるための工夫も必要になるでしょう(現在説明中のレシピ一覧を教えてくれる、とか、あとは画面的なサポートだったりとか)。

デザインと開発のバランスは常に意識する必要がありますね。

まとめ

会話フローにおいては、コンテキストはとても重要です。きちんと現在のコンテキストを意識しつつ、突然の切り替わりも許容するようなデザインを行うことがより自然な会話につながるのだと思います。

なお、Voiceflowを使うといろいろなコンテキストを意識したスキル開発をかんたんに行うことができます。興味があればぜひご覧ください。