Alexa Dev Day Tokyo 2018レポート- VUIワークショップ第二部・第三部 #AlexaDevDay #alexa

こんにちは、中村です。 今日は2018年10月12日、13日に千葉はヒルトン東京ベイにて行われた「Alexa Dev Day Tokyo 2018」の様子をレポートします。 この記事では、音声デザインワークショップ第二部・第三部のセッションレポートになります。スピーカーはAmazon JapanのシニアソリューションアーキテクトであるJustin Jeffress氏、同じくデベロッパーエバンジェリストの畠中俊巳氏です。

はじめに

午前中の第一部では、スキルを使用する人(ペルソナ)の設定・台本の作成を行いました。

レポート

会話デザイン

手間の軽減
すでに知っていることは聞かずに記憶する。台本から保存しておいていい項目を洗い出す。
ex. 名前・住所

会話の分断
会話の分断が起きそうな箇所を洗い出す。

  • 同義語(シノニム)
  • コンボブレイカー(予想外の会話が発生しそうな箇所)

まとめ

  • ペルソナの設定
  • 台本作成(ペルソナがやりたいことを考える)
    • キャッチボールのデザイン
    • ハッピーパスを作成
  • コンテキストのギャップを見つける
    • 聞かなければならない情報を洗い出す
    • スロットになる
  • 手間の軽減
  • 会話の分断
    • ユーザーは予想外の発話をするので想定できる分を洗い出す

フローチャートだと困難になりうるので、台本に記載していく。

ビルド

ソースはこちら

今回のスキルでは、4つの項目を実装する。

  • ダイアログ管理
  • メモリと永続性
  • コンテキストの切り替え
  • 条件に応じたスロット収集

原則: 一息で言える長さの原則

  • 一度にたくさん聞かれると忘れてしまうので、一気に聞かない
  • ダイアログモデル
    • Alexaが自動でスロットを収集してくれる
    • 必要情報を会話の中で取得する

ダイアログ管理

スロット

台本で記述したユーザーから取得しなくてはいけない項目をスロットとして定義し、サンプル発話に反映する。

同義語(シノニム)の登録

ユーザーの発話のゆらぎをより拾えるように登録する。
Alexaからのレスポンスには、使用した言葉を使う。スロットの値を使用するとユーザーが誤解するため

メモリと永続性

追跡

  • セッションアトリビュートはセッションが終わると消滅してしまうので、DynamoDB等を利用して永続化する

同じことを聞かないようにDBにアクセスして以前聞いたものを取得しスロットに追加する。 DynamoDBにはユーザーIDをキーに保存されておりユーザーIDはスキルのON/OFFでも変化するため、最初から情報を取得する必要がある

会話の中断(コンテキストの切り替え)

ダイアログモデルでは、一旦インテントから抜けてしまうとスロットの値が抜けてしまう。

  • インテント名ごとにセッションアトリビュートを保存しておく。
  • セッションアトリビュートを取得しリストアする。
  • 新しいスロットを取得したらセットしておく。
  • Alexaがスロットを取得済みを認識するために、更新を通知する。

条件に応じたスロットの収集

サンプルコードの中で説明。3つのハンドラーで、持っている情報・足りない情報を確認する。

ハンドラーの処理順序について
最初に True を返したハンドラーがリクエストを処理する。優先順位を注意して実装する。
今回の場合は、郵便番号を取得するインテント(InProgressHadZipCaptureAddressIntentHandler)で検索できるので住所等は取得せず処理を進める。

まとめ

いかがでしたでしょうか。 実装における基本部分を再確認できるセッションでした。