4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

スマートスピーカーAdvent Calendar 2021

Day 19

アップデートされたAlexa Conversationsを触ってみる

Last updated at Posted at 2021-12-19

はじめに

2021年11月末頃、Alexa Conversationsに大きなアップデートがあり、ダイアログの作成方法などに変更が入りました。新しいAlexa Conversationsを使うには、Alexa Developer Console でスキルを開き 今すぐ保存して移行する をクリックすることでスキルをマイグレーションすることができます。すでにを公開している Alexaa Conversationsスキルの場合は、様子をみた方がいいかもしれません。私もAlexa Conversationsを使用したスキルを1つ公開していますが、今のところはマイグレーションしていません。試しにAlexa Conversations 入門 スキルというサンプルスキルをマイグレーションしてみましたが、今のところ何のトラブルもなく、スキルも正常に動作しています。

image.png

マイグレーションすると、応答がオーディオ応答(APL for Audio)と視覚応答(APL)に分かれます。以前は応答の中で、APL for Audio と APLを作成する仕様でしたが、より分かりやすくなったと思います。

Alexa Conversationsのメニュー

2021年12月19日現在、Alexa Conversations 入門スキルや、スクラッチでスキルを作成しても、マイグレーション前の状態で作成されます。

【注意】hostedスキルで Alexa Conversations 入門スキルを作成すると、Lambdaのコードも付いてきます。ただしLambdaのコードはマイグレーションされないので自身で修正してください。Alexa Conversations 入門スキルの修正ヵ所は、API定義名称の先頭にapis.を付けるだけです。APIが2つあるので両方とも修正します。

マイグレーション前:util.isApiRequest(handlerInput, 'RecordColor');
マイグレーション後:util.isApiRequest(handlerInput, 'apis.RecordColor');

その他のアップデート情報は What's New in Alexa Conversations を参照してください。

Alexa Conversations を簡単に紹介

Alexa Conversations はAI駆動のダイアログ管理モデルを用いて、幅広いフレーズや予期しない会話フローに応答できるようにしたものです。従来のインテントベースモデルのスキルとは別のものになります。これでスキルのモデルが3種類になりました。

image.png

Alexa Conversations モデルの場合は、Lambda側でAlexaのレスポンスを作る必要がなくなっていたり、会話の管理をしなくてよくなっています。以下を見てもらえればわかるように、Alexa Conversations モデルでは、ターンのやりとりは全てスキル側で賄われています。そのためLambdaではビジネスロジックに専念できるようになっています。

スキルモデル ターン Alexa Developer Console Lambda
Alexa Conversations 起動時 AlexaConversationsWelcome
USER: 発話セット
ALEXA: オーディオ応答(APL for Audio)
視覚応答(APL)
インテントベース 起動時 LaunchRequest
USER: インテント
ALEXA: .speak
.reprompt
.addDirective(APL for Audio / APL)
.addDirectiveToReprompt(APL for Audio)

Alexa Conversations を有効にするには

Alexa Developer Console の インターフェース で Alexa Conversations をオンにするだけです。

インターフェース

Alexa Conversations セクションの右上のチェックをオンにする。さらに、スキルを Alexa Conversations モデルで起動(開始)したい場合は、セッション開始時にAlexa Conversationsをダイアログマネージャーとして使用する をオンにする。これで Alexa Conversations を使うための準備が整いました。

Alexa Conversations

Alexa Developer Console の左ペインに Alexa Conversations セクションが表示されます。

image.png

Alexa Conversations のスキルを作る

ここでは、Alexa Converstions 入門 スキルをベースに説明していきます。入門スキルとは、スキルテンプレートで選択できるAlexa Conversationsのサンプルスキルのことです。

image.png

マイグレーション前の Alexa Conversations であれば、ダイアログはサンプルダイアログとして USER:ALEXA: の会話を入力して、ユーザー発話やAlexa応答は別に作成していました。サンプルダイアログに表示されている文字列はスキルには影響しませんでした。それが、今回のアップデートによってサンプルダイアログを作成するときの、USER:ALEXA: の会話は、ユーザー発話と、オーディオ応答から生成されるようになりました。そのため、最初にこのツールでダイアログを作るというよりは、机上でダイアログを考えておいて、各パーツを作った後に、ダイアログを完成するのが良いのではないかと思っています。

image.png

まず最初はダイアログを考える

Alexa Conversationsの要はダイアログです。これまでのスキル作成と同じ要領で机上でダイアログを考えます。ハッピーパスを考えるのと同じ要領です。今回の Alexa Converstions 入門スキルのダイアログはこんな感じになっています。

ハッピーパス

Alexa Conversationsのダイアログに、直接USER:ALEXA: の会話を入力してしまうのもアリかもしれません。ダイアログに文字を入力することは現在も可能です。しかし、会話を考える時は机上でやっている人の方が多いのではないかと思っているので、まずは机上で!と書いています。

ダイアログからダイアログアクトを考える

ダイアログが完成したら、次はダイアログアクト(対話の振る舞い方)を考えますが、この時点ではまだ机上で作業します。なぜ、いきなりダイアログアクトが出てきたかと言うと、ダイアログアクトのうちのリクエストアクトを決めておかないとAlexa Conversaationsの部品の1つである発話セットが作れないからです。
それぞれつけ方にルールがあるので詳しくはリファレンスを見ていただきたいのですが、リクエストアクトの決め方を簡単に言うと、ダイアログの最初だったらInvoke APIs。ダイアログの途中でスロットを拾う場合はInform Args。はいの場合はAffirm。いいえの場合はDenyでだいたいいけると思います。

ダイアログ 仮

以前のAlexa Conversationsでは、ユーザー入力とAlexa応答を合わせてダイアログアクトと言わていましたが、新しいAlexa Conversationsでは、ユーザー入力ダイアログアクトは、リクエストアクト(Request acts)と名称が変わりました。Alexa応答ダイアログアクトは、応答アクト(Response acts)と名称が変わっています。

リクエストアクトと応答アクトには以下の種類があります。

No リクエストアクト 説明
1 Affirm ユーザーは、前のターンのリクエストを肯定しています。
2 Deny ユーザーは、前のターンのリクエストを否定しています。
3​ Inform Args ユーザーは、前のターンでAlexaがリクエストした引数を提供しています。
4​ Invoke APIs ユーザーは、APIを呼び出すダイアログパス上にいます。
No 応答アクト 説明
1 API Failure API呼び出しが失敗したことをユーザーに通知しています。
2 API Success API呼び出しが成功したことをユーザーに通知しています。
3 Confirm API 必須のAPI引数(すべて)と任意のAPI引数(任意の数)をユーザーに確認しています。
4 Confirm Args 1つ以上の引数をユーザーに確認しています。
5 Offer Next API 会話を続けるために、別のAPIを呼び出すダイアログパスをユーザーに提供しています。
6 Request Alt 同じAPIを呼び出すダイアログパスを提供し、指定された引数をリクエストしています。
7 Request Args 1つ以上の引数をユーザーにリクエストしています。

ダイアログ作成の前にまず部品を作る

ダイアログを作成する前に、まずは必要な部品を作成しておく必要があります。ダイアログを作りながら、その都度、ユーザー発話やAlexa応答を作成することもできますが、予め会話設計したうえで、発話セットやAlexa応答を用意しておくほうが良いと思っています。

入門スキルは以下のような構成になっています。Built-in 以外のAPI定義、発話セット、オーディオ応答、視覚応答とスロットタイプの部品を作る必要があります。

image.png

API定義を作成する

API定義画面で1つずつ作成していきます。Alexa Conversations 入門スキルでは、以下の2つのAPIが定義されています。
API名と引数と戻り値を設定する作業は、関数定義みたいなものです。

No. API定義名 引数(スロットタイプ) 戻り値
1 GetFavoriteColor なし FavoriteColor
2 RecordColor color(AMAZON.color) FavoriteColor

image.png

発話セットを作成する

発話セット画面で1つずつ作成していきます。Alexa Conversations 入門スキルでは、以下の3つの発話セットが定義されています。
発話セットの注意点は、1つの発話に対してリクエストアクトを設定しなければならない点です。つまり、Affirm用の発話セットなのか、Invoke APIsの発話セットなのかを明確に指定してあげる必要があります。なので、最初に机上でダイアログアクトを検討する必要があったわけです。

作り方は、インテントを作るようなイメージです。マイグレーション後は、スロットではなくプロパティと表現されるようになりました。

スロットを使う場合は、タイプのコンフィギュレーションで、対象のスロットタイプを選択することで、必要なスロットが自動的にプロパティに表示されます。ここではcolorというプロパティが欲しいのでSpecifyFavoriteColorTypeを選択しています。

No. 発話セット名 リクエストアクト タイプのコンフィギュレーション
1 RecordFavoriteColor Invoke APIs なし
2 GetFavoriteColor Invoke APIs なし
3 SpecifyFavoriteColor Inform Args SpecifyFavoriteColorType

image.png

オーディオ応答を作成する

オーディオ応答画面で1つずつ作成していきます。Alexa Conversations 入門スキルでは、以下の3つのオーディオ応答が定義されています。
オーディオ応答の実態はAPL for Audio です。Alexa Conversations のAlexa の応答は全て APL for Audio で作成することになります。ですのでオーディオ応答は必須となります。

タイプのコンフィギュレーションでスロットタイプを指定しておくと、APL for Audioのpayloadでプロパティが参照できるようになります。
例:${payload.favoriteColor.color}

No. オーディオ応答名 タイプのコンフィギュレーション プロパティ(スロットタイプ)
1 RecordColorSuccessPrompt GetFavoriteColorSuccessResponseType favoriteColor(FavoriteColor)
2 RequestFavoriteColorPrompt なし なし
3 GetFavoriteColorSuccessPrompt GetFavoriteColorSuccessResponseType favoriteColor(FavoriteColor)

image.png

!オーディオ応答を編集する というリンクとは気づきにくい文字列をクリックすると、お馴染みのAPL for Audioエディタが別画面で開きます。

image.png

視覚応答を作成する

視覚応答画面で1つずつ作成していきます。Alexa Conversations 入門スキルでは、以下の3つの視覚応答が定義されています。
視覚応答の実態はAPLです。視覚的な応答が不要な場合は、APL の作成は不要です。

タイプのコンフィギュレーションでスロットタイプを指定しておくと、APLのpayloadでプロパティが参照できるようになります。

No. 視覚応答名 タイプのコンフィギュレーション プロパティ(スロットタイプ)
1 RecordColorSuccessView GetFavoriteColorSuccessResponseType favoriteColor(FavoriteColor)
2 RequestFavoriteColorView なし なし
3 GetFavoriteColorView GetFavoriteColorSuccessResponseType favoriteColor(FavoriteColor)

image.png

こちらも同じで、!APLツール をクリックするとAPLエディターが起動します。

image.png

スロットタイプを作成する

スロットタイプ画面で1つずつ作成していきます。Alexa Conversations 入門スキルでは、以下の3つのプロパティーが持てるスロットタイプと、1つの値を持つカスタムスロットが定義されています。
プロパティーが持てるスロットタイプはAlexa Conversations 用のスロットタイプです。

タイプ:プロパティを持つカスタムスロット

No. スロットタイプ名 プロパティ(スロットタイプ)
1 FavoriteColor displayLocale(ResponseString)
color(AMAZON.color)
2 GetFavoriteColorSuccessResponseType favoriteColor(FavoriteColor)
3 SpecifyFavoriteColorType color(AMAZON.color)

タイプ:値を持つカスタムスロット

No. スロットタイプ名 スロット値
1 ResponseString これはアウトプットの際、複合スロットプロパティーのラベルにのみ使用されます

image.png

ダイアログを仕上げる

部品が揃ったらダイアログを作り上げていきます。
Alexa Conversations 入門スキルでは、以下の2つのダイアログが定義されています。ダイアログの作成画面では、1つのダイアログ毎にダイアログを作成していきます。

No. ダイアログ名
1 dialogName_GetFavoriteColor
2 dialogName_RecordFavoriteColor

Step by Step 風で

ここではdialogName_RecordFavoriteColorダイアログを作る流れを記載します。

USER:ALEXA:を1行1行設定していく必要があります。まずは USER: を作成するのですが、このUSER:はダイアログの最初のターンなので、リクエストアクトはInvoke APIsとなります。Invoke APIsを選択すると、Invoke APIs 用の発話セットがリスト表示されるので、対象の発話セット(RecordFavoriteColor)を選択します。

image.png

発話セットを選択すると、USER: に自動的にサンプル発話が表示されます。これは、発話セット(RecordFavoriteColor)に定義されている一番上のサンプル発話が表示されています。そして、ミドリのチェックが付けば設定完了です。

image.png

次にALEXA:の設定です。ここでは引数(color)を拾いたいので、その引数をユーザーにリクエストすることになります。ですので、応答アクトはRequest Argsとなり、リクエストするAPIはRecordColorとなります。APIを選択するとリクエストするAPI引数に自動的に必要な引数(color)が表示されます。

image.png

さらにオーディオ応答(RequestFavoriteColorPrompt)を選択すると、ALEXA:にAPL for Audioへのリンクが表示されます。このサンプルスキルは視覚応答もあるので、視覚応答(RequestFavoriteColorView)も選択します。

image.png

ダイアログはまだ続くので、追加:ユーザーの発話 ボタンをクリックしてUSER:を1行増やします。Alexa ConversationsではALEXA:で終わるルールがあるので、この時点ではエラーが表示されます。

image.png

ですので、とりあえず追加:ALEXAのセリフもクリックしてしまいましょう。

image.png

さて、2つ目のUSER:を設定します。これはInvoke APIsAPI Successの間に挟まれたターンのためInform Argsとなります。Inform Argsを選択すると、Inform Args用の発話セットがリスト表示されるので、対象の発話セット(SpecifyFavoriteColor)を選択します。

image.png

USER: に自動的にサンプル発話が表示されるとともに、ユーザー入力には自動的に出力変数が設定されます。これは次のALEXA:に値を渡すために使用するもので、ここではcolorを保持するために使用しています。

image.png

このダイアログの最後です。このALEXA: でAPIを起動しますので、応答アクトはAPI Successとなります。呼び出すAPIでRecordColorを選択すると変数名のドロップダウンが表示されますので、ここに先ほどの出力変数を選択して引数にcolorをセットしています(ここでAPIが呼ばれる)。レスポンスはFavoriteColorが返却されるので、それを変数にセットしています。
オーディオ応答と視覚応答は先ほどと同じです。

image.png

変数をAPL for Audio、APLで使えるようにするために、GetFavoriteColorSuccessResponseTypeのプロパティ(favoriteColor)セットします。こでれ、APL for Audio、APL内のpayloadでプロパティ値が使えるようになります。
例:${payload.favoriteColor.color}

image.png

全ての設定を終えると、こんな感じになります。

image.png

もう一つのダイアログdialogName_GetFavoriteColorを作ったら完成です。ビルドしてスキル試してみましょう。

入門スキルの動きはこんな感じ

image.png

なんとなくおわかりいただけたでしょうか?
一部、新旧版を比較している部分もありますが、日本語版ベータは公開されて間もなくアップデートがありましたので旧版でスキルを作ることはないかもしれませんね。

おわりです。

参考

What's New in Alexa Conversations / November 2021
Alexa Conversationsとは
Tutorial: Annotate a Dialog for Alexa Conversations

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?