kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

Amazon Lex の Visual Conversation Builderを試す ①ハローワールドな会話フロー

随分とブログの更新もご無沙汰してしまっておりますが、いろいろあって今月からまたガツガツ再開していきたいと思います!

ということで久々のネタは、Amazon Lexで以下のニュースから。

ざっくり言ってしまうと、Amazon LexでVoiceflowのようなGUIで会話フローを構築できるエディタ機能ができたということですね。こういうのは触ってみるのが一番早そうなので、早速やっていきましょう。

目次

ボットの作成とVisual Conversation

まず最初によくある「ハローワールド」な会話フローを作ってみましょう。

Lexのページからボットを作成します。

ボットの基本的な設定を行います。以下を参考に。

言語設定は日本語で。そういえばTakumiでニューラルが使えるようになっていますね。

ボットが作成されました。ボット作成後はインテントがないので新しいインテント作成画面になります。

Visual Conversation Builderによる会話フローの作成

ここで下の方に「Visual builder」というのが見えていると思います。これをクリック。

なるほど。エディタの切り替えは保存がされないのですね。注意しないと。ここでは気にせず「移動」をクリック。

おー、出てきました。なるほど、ここに色々並べて線を引く感じっぽいですね。

インテント画面なので当然サンプル発話等の設定が必要ですね。最初から用意されている「Start」の右上のアイコンをクリックします。

右側にメニューが表示されます。これがブロックの設定になるようです。「Start」はインテントに合致した場合のフローの開始点になりますので、サンプル発話等の設定もここで行います。

では設定します。インテント名を設定します。ここでは「HelloWorldIntent」としました。

下の方に移動して、サンプル発話を追加します。

こんな感じでいくつか追加しておきます。

ちなみに、私の環境だけかもしれませんが、日本語の変換が変に解釈されてしまう場合があるようです。

これ多分スロットを割り当てることができるようになってるんだと思うのですが、どうも日本語変換とうまく噛み合っていないようです。そのうち修正されるでしょう。この場合は手動で修正しておいてください。

これでサンプル発話に合致した場合にはこのインテントが呼び出されるようになりました。次にこれに対する応答を設定しましょう。

上のメニューから、「Closing response」をドラッグして、「Start」の右側に配置します。

「Closing response」の右上をクリックして、ボットが返す応答を入力します。

ではブロックをつなげましょう。こんな感じでドラッグしてつなげます。

つながりました。

ではインテントを保存します。

警告が出ますね。インテントを保存すると、会話フローに抜けがないか?をチェックしてくれるようです。このまま保存します。

保存後に見てみると、最後に「End conversation」というブロックが追加されて、「Closing response」から自動的につながっていますね。つまり「Closing response」の先がつながっていないということだったようです。これ以外にもブロックの設定が正しくない場合などはエラーが表示されたりと、会話フローの不備をきちんとチェックしてくれる機能があるのはよいですね。

ただちょっと上の線の繋がり方があまりきれいじゃないですね。こういうときは右のAuto Cleanupアイコンをクリックします。

配置が自動的に最適化されます。これも便利ですね。保存もお忘れなく。

とりあえずフローは完了です。

テスト

作ったフローをテストしましょう。フローやインテントなどを変更した場合はビルドが必要です。上の「Build」をクリックします。

ビルドは少し時間がかかりますので完了するまで待ちます。

ビルドが完了したらテストをします。「Test」をクリックします。

テスト用の画面が開くので、設定したサンプル発話を入力してみてください。想定通りに動いていればオーケーです。

まとめ

まだインタフェースがこなれていない印象はありますが、会話フローが視覚的に作れるのはやはりカンタンでよいですね。Voiceflowあたりになれていると自然に使えると思います。

今回は本当に単純なものだったので、次回はユーザの発話内容に応じて分岐するような会話フローを作ってみる予定です。