対話モデルをask-cliで管理する
渡辺です。
Alexaスキルでは、利用者の発話に対してどんなアクションを取るかといった設定を対話モデル(Interaction Model)に定義します。 雑に言えば、「XX」と発話されたら「AA」という処理が走るといった定義を対話モデルで行います。
さて、スキル開発で開発環境と本番環境を分離する場合、スキルも同様に開発スキルと本番スキルが独立したスキルになります。 それぞれ別のLambdaを呼び出すような構成を想定しましょう。 この時、開発スキルの対話モデルと本番環境の対話モデルをどのように同期するか?が課題になります。
スキルビルダーで対話モデルを定義する
対話モデルはJSON形式で定義しますが、開発時にはスキルビルダーを利用すると便利です。 スキルビルダーは最新の開発者コンソールでは、スキルの編集(Edit)をクリックすると表示されます。
ここでインテントの定義などを行い、対話モデル(Interaction Model)を定義します。 言い回しを追加したり、新しいインテント(処理)を追加したりと、開発中は常に操作しているイメージでしょう。 また、ある程度の開発が進むと、より自然にスキルを使えるように対話モデルをチューニングします。 サンプル発話を追加する作業は開発者以外は行うことも多いでしょう。
対話モデルをエクスポートする
スキルビルダーで、JSON Editorメニューを開くと、対話モデルがJSON形式で確認できます。
エディターを利用して編集することもできますが、これをコピーすれば対話モデルをローカル環境に保存できます。 対話モデルはGitHubなどのリポジトリで管理すれば、スキルをコピーしたり、スキルを誤って消してしまった場合も安心できるでしょう。
また、JSONファイルはJSON Editorから読み込ませることもできます。
これらの仕組みを使えば、開発スキルの対話モデルをコピーし、本番スキルに反映することができます。
ASK-CLIで自動化する
コピペでなんとかなるなら良いじゃんと思ったら試合終了です。 自動化できるところは自動化しましょう。
スキル開発では、このような操作のほとんどはASK-CLIを利用してコマンドラインから行えます。
api get-model
対話モデルは、ask-cli でエクスポートできます。 ask-cliの初期設定を行い、スキルIDとロケールを指定してモデルを取得します。 対話モデルは標準出力されるので、テキストファイルに書き出しておきましょう。
$ ask api get-model --skill-id amzn1.ask.skill.xxxxxx-xxxx-xxxx-xxxxx-xxxxxx --locale ja-JP > model.json
api update-model
対話モデルは、ask-cli でインポートできます。 スキルID、ロケール、モデルファイルを指定してモデルを更新します。
$ ask api update-model --skill-id amzn1.ask.skill.xxxxxx-xxxx-xxxx-xxxxx-xxxxxx --locale ja-JP -f model.json
まとめ
スキル開発のフローを検討する場合、環境毎の対話モデルをどのように同期するかが課題となります。 対話モデルはJSONファイルで定義されますので、すべてをJSONで管理するのもひとつの作戦です。
しかし、現実的には非開発者もスキルビルダーを利用し、対話モデルをチューニングする機会が多くなります。 開発スキルでは、スキルビルダーを利用し対話モデルを構築し、モデルをエクスポートして本番スキルにインポートする運用がベストプラクティスでしょう。 ASK-CLIを活用し、ビルドプロセスに組み込んでみてください。