※このブログは、Leo OhannesianのブログをToshimi Hatanakaが日本向けに翻訳し加筆修正したものです。
ご存知ですか? 共有スロットを使うと、一度作成したカスタムスロットタイプは、複数の スキルで共有して再利用することができます。
共有スロットを作成するには、まずカスタムスロットタイプをスキルのコンテキスト外で作成します。これにより、あなたのアカウント内のすべてのスキルで利用できるようになりま す。
複数のスキルでスロットタイプを再利用することで、同じようなトピックをカバーする際に、すべてのスキルで一貫したエクスペリエンスを得ることができます。また、同じスロットやスロット値を何度も作成する必要がなくなり、一貫性を保つことができ、生産性向上が期待できます。
このブログ記事では、スキルのスロットを管理するいくつかの方法について説明します。
はじめに、背景から説明しましょう。
カスタムスキルを開発する場合、ユーザーがそのスキルを使ってできるアクションを表すインテントのセットを作成することから始めます。インテントは、ユーザーがAlexaに話しかけたリクエストに対応するアクションを表します。インテントにはオプションとして、スロットと呼ばれる引数を持つことができます。Amazonはスロットに利用できる膨大な数のスロットタイプライブラリを標準でサポートしています。これには以下が含まれます。
しかし、多くのスキルでは、独自のユースケースをカバーするために、カスタムスロットと 呼ばれる独自のスロットタイプを作成しています。
例えば、食料品を購入するようなスキルを考えてみましょう。まず、 GetGroceryItemAvailabilityという名前のインテントを定義します。そのインテントでは、 「◯◯を買う」の「〇〇」に入る食料品の名前のをスロット値として取得したいでしょう。 そのためには、予めAvailableGroceryItemsというカスタムスロットタイプを定義して、ある特定の店舗の各食料品のリストを作成しておく必要があります。
しかし、こうしたカスタムスロットタイプの作成にはいくつかの課題がありました。
従来は、カスタムスロットタイプは1つのスキル内にしか存在することができず、共有する ことができませんでしたが、今ではスキルのスロットを効率よく管理する方法はたくさんあります。
以下では、スキル間でカスタムスロットタイプを共有する方法を含め、いくつかをご紹介し ます。
参照ベースのカタログ管理APIを使用すると、外部データソースを参照してカスタムスロットタイプのスロット値を取得することができます。これは、スロットの値が頻繁に変更される場合に特に便利です。
例えば、あなたが食料品店のスキルの開発者だとします。あなたの店には、どのお店にも共通の食料品のリストはありますが、これらの食料品は非常に頻繁に更新されます。例えば、 お店ごとに食料品の在庫状況を確認できるスキルを持っているとしましょう。開発者としては、これらの食料品のアイテム(スロット)を「ListOfGroceryItemsSlot」(カスタムスロ ットタイプ)に追加・削除・更新するのは面倒です。 しかし、カタログ管理APIを利用すれ ば、Amazon S3バケットにある既存の食料品のカタログや、https:// のリンク先の任意の場所にある食料品カタログにリンクすることで、食料品スキルの「ListOfGroceryItemsSlot」 に対してリストを提供することができます。
Amazon S3バケットまたは他のオンラインリソースに保存されているカタログを更新して スキルの対話モデルを再ビルドすると、「ListOfGroceryItemSlot」タイプは自動的に最新のカタログ値(この場合は利用可能な食料品)に更新されます。この食料品(スロット)のリ ストは、特定のスキルに関係なく独立してメンテナンスすることができ、多くのスキルで使用することができます。
複数のスキルでカスタムスロットタイプを共有することができます。スロットタイプは、特定のスキルに依存せずに作成でき、カタログ管理APIとも連携することができます。
食料品の例に戻りますが、あなたは別の店舗の商品を検索できる2つ目のAlexaスキルを作ろうとしていると仮定します。あなたはすでに「ListOfGroceyItems」カスタムスロットタイ プを作成し、カタログ管理APIを使って外部カタログにリンクしています。新しいスキルで は、スロットタイプを一から作り直す必要はありません。両方のスキルで同じスロットタイ プを再利用することができるのです。
スロットタイプを変更すると、スキルを再ビルドした際に、そのスロットタイプを使用しているすべてのスキルにも反映されます。さらに公開中のスキルであっても、ライブスキルアップデート機能により、ほぼ瞬時に反映されます。これにより開発者の負担を削減し、ヒューマンエラーを減らし、同じカスタムスロットタイプを使用しているスキル全体で一貫した エクスペリエンスを確保することができます。
共有スロットは、開発者が所有しているどのスキルでも利用できるため、独自に作成したビルトインスロットのようなものと考えることもできるでしょう。また、共有スロットはカタログシステムにも依存しません。複数のスキルで利用できるスロットタイプを作成するには、新しいスロットタイプを作成する必要があります。スロットを共有する方法については、こちらの技術文書を参照してください。
カタログ管理も共有スロットも、スキルのビルド時に生成されるスロット管理技術です。すなわち、ユーザーに公開するためにはスキルの再ビルドが必要となります。動的エンティテ ィを使用すると、スキルのエンドポイント(Lambda)から定義済みのスキルのスロットタイ プを拡張し、スキル実行時に新しいスロット値を動的に作成して利用することができます。
例えば、食料品のスキル開発者であれば、動的エンティティを使用してユーザーの好みの商品リストを更新することで、ユーザーにパーソナライズされたエクスペリエンスを提供することができます。例えば、ユーザーが「買い物リストに牛乳を追加して」と言った場合、 User ID、場所、好みの牛乳のブランド、購入履歴を使用して、「牛乳」のスロット値を 「オーガニック2%牛乳」にエンティティ解決して、それが探しているものかどうかをユー ザーに尋ねることができます。動的エンティティは、ユーザーの好みや場所に基づいて、個別のユーザーに個別のサービスを提供するのに最適なツールです。
動的エンティティに関してはこちらのブログも参照ください。
このブログで取り上げた3つのスロットに関するテクニックはすべて、開発サイクルを加速させ、より良いユーザーエクスペリエンスを提供してくれます。繰り返しになりますが、カタログ管理では、リンクされたソースからカスタムスロットタイプにスロットを同期させることができます。また、複数のスキルで使用可能なスロットタイプを作成することもできます。最後に、動的エンティティを使用して、実行時にスロットの値を動的に作成し、ユーザーのエクスペリエンスをカスタマイズすることができます。それぞれの実装方法については、以下の技術資料をご覧ください。