Googleの新しい対話モデル構築ツールである「Actions Builder」使っていますか?
Dialogflowに比べるといくらか複雑性が減って、シンプルなものであればwebhookでバックエンドに流さなくても、Actions Builderだけでかんたんに対話モデルやレスポンスを作ることができます。こんな感じですね。
Actions SDKだとこうなります。
handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: これはActions Builderのテストです。 transitionToScene: actions.scene.END_CONVERSATION
これをテストシミュレータで実行してみるとこんな感じでレスポンスが返ってきます。
このようにYAMLでいろいろなパラメータを設定していくやり方になっています。このYAMLについては、以下のようにリファレンスに載っています(一例としてIntentEventのリファレンスへのリンクです)
詳しくはこのリファレンスを・・・というところですが、見ててもいまいちピンとこないw そこでいろんなパラメータを実際に試してみました。なお、webhookによる動的なものは今回扱いません。Actions Builder上で設定できるスタティックなもの限定です。
目次
デバイスごとに切り替える(candidates/selector)
candidatesは、selectorと組み合わせてデバイスごとにレスポンスを変えます。
candidates: - selector: surface_capabilities: capabilities: - RICH_RESPONSE first_simple: variants: - speech: これはActions Builderのテストですよ。 content: card: title: テスト用画像 text: テスト用画像です image: url: >- https://example.com/example.png - first_simple: variants: - speech: これはActions Builderのテストです。
candidatesはarrayになっています。上から順に評価されて、selectorで合致したものをレスポンスとして返してそこで終了します。selectorでは、surface_capabilities.capabilitiesでデバイス側の機能を指定します。
上記の例だと、リッチレスポンス対応機種、つまり、スマホのGoogleアシスタントやNest Hubなどの画面付きデバイスの場合はカードを表示するとともに音声レスポンスを返しますが、非対応の場合、つまりGoogle Homeなどのスマートスピーカーの場合は音声レスポンスだけを返します。(「Voiceflow&VUI 虎の巻」の表紙画像を使ってみました)
選択できるcapabilitiesには以下のようなものがあります。
- SPEECH
- TTSやSSMLで発話ができるもの
- RICH_RESPONSE
- カードやテーブルなど、リッチレスポンスを表示できるもの
- LONG_FORM_AUDIO
- 音楽やポッドキャストなどのメディアファイルを再生できるもの
- INTERACTIVE_CANVAS
- インタラクティブキャンバス対応
- WEB_LINK
- ブラウザを開けるもの
- HOME_STORAGE
- ホームストレージ対応
静的なレスポンスいろいろ
candidatesの配列に入れることのできる静的なレスポンスには以下のようなものがあります。(Actions SDKを見ていると、実際にはStaticPromptCandidateという階層が一枚挟まれるようですが、Action Builderでは指定不要みたいです)
- first_simple
- 最初に発話されるテキストのみのレスポンス
- content
- カード、リスト、テーブルなど、主にメディアを扱うレスポンス
- last_simple
- 最後に発話されるテキストのみのレスポンス
- suggestions
- ユーザに次の選択や発話等をしやすくするために表示するヒント
- link
- アプリやサイトへのリンク
- canvas
- インタラクティブキャンバス
全部は紹介しませんが、少し見ていきましょう。
first_simple/last_simple
first_simpleとlast_simpleはともにテキストのみのレスポンスです。firstが最初、lastが最後に実行されます。
candidates: - first_simple: variants: - speech: これはActions Builderのテストです。 last_simple: variants: - speech: さようなら。
これだけであればどっちか片方だけも事足りますが、次に紹介するcontentはこの最初と最後に間に入るようになっています。最初に紹介したサンプルのようにカードを表示してみます。
candidates: - first_simple: variants: - speech: これはActions Builderのテストです。 content: card: title: テスト用画像 text: テスト用画像です image: url: >- https://exampl.com/example.png last_simple: variants: - speech: さようなら。
このようにcontentを挟む感じになります。
content
contentはメディアを扱うレスポンスで、さらにいくつかの種類があります。
- card
- カードを表示
- image
- 画像を表示
- table
- 表を表示
- media
- メディアを再生
- list
- 選択可能なリスト形式のカードを表示
- collection
- 選択可能なリスト形式のカードを表示。listとほぼ同じ?
- collectionBrowse
- ウェブページのリスト形式をカードで表示
- suggestions
- ユーザに次の選択や発話等をしやすくするために表示するヒント
いくつか紹介します。
image
画像を表示します。
candidates: - first_simple: variants: - speech: これはActions Builderのテストです。 content: image: url: >- https://example.com/example.png alt: サンプルの画像です。 height: 100 width: 100 last_simple: variants: - speech: さようなら。
こんな感じになります。カード表示とそんなに変わらないですが、画像サイズを指定したりできます。
list
選択可能なリスト形式で表示します。リストの項目にはこちらも「Voiceflow&VUI 虎の巻」のメンバーを使わせてもらいました。ユーザに選択を促すことになるので、ここでEND_CONVERSATIONにトランジションすることはできません。
タップするとtitleで指定されている文字列が送信されます。つまり、ここを発話したのと同じことになります。keyはおそらくslot typeだと思ってますがちょっと未確認。そのうち試します。
candidates: - first_simple: variants: - speech: これはActions Builderのテストです。知りたい著者を選択してください。 content: list: title: 著者一覧 subtitle: 選択してください。 items: - key: author title: kun432 description: 普段の仕事では一切 VUI に関わっていないインフラエンジニア。関⻄の VUIイベントによく出没してます。 image: url: >- https://example.com/kun432.jpg - key: author title: がおまる description: スマートスピーカーが好きすぎて、本まで執筆しちゃいました! 色々連携したがる変なおじさん。「業界荒らし」や「がおってる!」と言われている。 image: url: >- https://example.com/gaomar.jpg - key: author title: 福村浩治 description: 福岡で VUI コミュニティ「VUI Fukuoka」を主催している介護エンジニア。介護、障害福祉への活用目的で、VUI に注目しています。 image: url: >- https://example.com/fukumura.jpg
media
mediaはオーディオを再生するためのレスポンスのようです。mediaTypeで指定できるものをざっと見る限りはオーディオ専用ですね。 SSMLのオーディオ(240秒)と違って時間の制約はありません。mediaObjectsでimageを指定することでジャケット画像のような表示も可能です。
candidates: - first_simple: variants: - speech: これはActions Builderのテストです。オーディオを再生します。 content: media: mediaType: AUDIO mediaObjects: - name: 秋の音 description: 秋の音をお楽しみください。 url: https://example.com/audio.mp3 image: large: url: https://example.com/jacket.png
実際に表示すると、再生や一時停止などもコントロールできるようになっています。
suggestions
suggenstionsは、次に選択可能なヒントを表示します。
candidates: - first_simple: variants: - speech: これはActions Builderのテストです。ヒントを表示します。 suggestions: - title: "はい" - title: "いいえ"
こういう感じですね。タップするとtitleが発話内容として送信されます。
バリエーションをつける(variants)
variantsはレスポンスにバリエーションを付けます。複数記載すると、そのうちの1つがランダムに選択されます。
candidates: - first_simple: variants: - speech: これはActions Builderのテストです。 - speech: これはActions Builderのテストですよ。 - speech: これはActions Builderのテストですよーだ。
起動するたびに発話内容が変わっていますね。
まとめ
ということで、Actions SDKで定義されているレスポンスを色々見てみました。いろいろなレスポンスのバリエーションがあってよいですね。
少しだけ注意が必要なのはリファレンスに記載されているものと、Actions BuilderのYAMLエディタで入力する内容は微妙に違う場合があるということですね(firstSimpleとfirst_simpleとか)。Actions Builder上ではレスポンス部分しかいじれないのですが、gactionsコマンドでYAMLファイルを使う場合はレスポンス以外の設定(条件の指定やシーンの遷移など)もすべて指定できるので、この辺の違いによるのかもしれません。ご注意ください。
レスポンスについてざっくり概要を掴むには以下ドキュメントが参考になりますので、合わせてご覧ください。