kun432's blog

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

Voiceflowにおける会話のコンテキストを考える ③プライムコンテキスト

f:id:kun432:20200724191613p:plain

Voiceflowにおける会話のコンテキストを考える」シリーズの第3回です。今回は「プライムコンテキスト」です。

第1回はこちら。

第2回はこちら。

目次

プライムコンテキストとは?

前回ご紹介した「コンテキストのスイッチ」をもう一度振り返ってみましょう。

いらっしゃいませ。ご注文は何になさいますか?

コーヒーを一つ。

砂糖とミルクはおつけしますか?

あ、そうだ、営業時間は何時まで?

営業時間は9:00〜22:00です。ところで砂糖とミルクはおつけしますか?

お願いします

途中で会話のコンテキストが「注文を受け付ける」から「営業時間を聞く」に変わります。これが「コンテキストの一時的なスイッチ」でしたね。そして、最後に元の「注文を受け付ける」に戻ってきていますよね。このときのコンテキストの関係性はこうなります。

  • メイン:注文を受け付ける
  • サブ :営業時間を聞く

つまり、コンテキストにも重要度・優先度があるわけです。このとき、より重要・優先度が高いコンテキストを「プライムコンテキスト」と呼んでいます。一度変更したコンテキストから元のコンテキストに戻るかどうかは、この重要度・優先度が大きな要因になります。

では、以下のような場合はどうなるでしょうか?

いらっしゃいませ。ご注文は何になさいますか?

コーヒーを一つ。

砂糖とミルクはおつけしますか?

あ、急に胸が・・・苦しい・・・き、救急車をっ・・・

わ、わかりました!今、救急車を呼びました!

コンテキストはこの2つです。

  • 注文を受け付ける
  • 救急車を呼ぶ

途中で「注文を受け付ける」から「救急車を呼ぶ」に切り替わっています。通常、「救急車を呼ぶ」はそうそう起きることではないので、あくまでも切り替わる前は「注文を受け付ける」がプライムコンテキストです。ただし、もし起こったら重要度は「救急車を呼ぶ」のほうが圧倒的に高い上、この会話の流れで「注文を受け付ける」に戻る必要はないですよね。

つまり、「プライムとなるコンテキスト」が別のコンテキストに「恒久的」にスイッチした、ということになります。

Intent Block

Voiceflowで「恒久的」な「プライムコンテキスト」のスイッチを行うには、"Intent Block”を使います。"Intent Block"はフローのどこからでもインテントを呼び出せるブロックです。つまりフローの流れに沿う必要はありません。早速やってみましょう。

前回までのフローはこんな感じになっていました。いろいろな「注文を受け付ける」フローがプライムコンテキスト、「営業時間を聞く」のは「コマンド」を使ったサブコンテキストになっています。

f:id:kun432:20200921215822p:plain

ここに"Intent Block"を追加します。

f:id:kun432:20200921220016p:plain

"Intent Block"にインテントを追加します。"emergency_intent"としました。

f:id:kun432:20200921220321p:plain

こんな感じでサンプル発話を入力します。

f:id:kun432:20200921220436p:plain

Speak BlockをつなげてAlexaの発話を入力します。

f:id:kun432:20200921220726p:plain

これで終了です。

ではアップロードしてテストしてみましょう。

f:id:kun432:20200921221028p:plain

「注文を受け付ける」コンテキストのフローのどこからでも「救急車を呼ぶ」コンテキストにスイッチして、元のコンテキストに戻らずにそのまま「救急車を呼ぶ」コンテキストのフローに流れていっていますね。これが「プライムコンテキストのスイッチ」です。図にするとこういう感じになります。

f:id:kun432:20200921222243p:plain

うまくいきました!

おまけ

どこからでも呼び出せるということは、スキルの起動と同時に呼び出すこともできます。これが「ワンショット発話」になります。

f:id:kun432:20200921222458p:plain

まとめ

「Voiceflowにおける会話のコンテキスト」シリーズの第3回、プライムコンテキストの「恒久的」なスイッチについてご紹介しました。次回は少し複雑になりますが、コンテキストに応じたインテントを使い分けるというのをやってみたいと思います。