SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

LINEのAIアシスタントとおしゃべりしよう! 世界一簡単なClovaスキル開発講座

Clovaスキルの実装方法を理解しよう~対話モデルの設定とHerokuの活用

LINEのAIアシスタントとおしゃべりしよう! 世界一簡単なClovaスキル開発講座 第2回

対話モデル作成画面のスロットの使い方

 では、前回触れなかった対話モデルのスロットについて解説します。対話モデル、インテントの概念については前回の記事をご確認ください。

スロットとは

 スロットとは会話から意図(インテント)と別に対象を抜き出すための仕組みです。宅配ピザを注文できるスキルを例にとって考えてみます。

 例えば「ペパロニピザを注文して」「ミックスピザを注文して」等の多数の要求に答えたい場合にそれぞれインテントを作るのではなく、インテントは「ピザを注文したがっている」、スロットとして「ペパロニピザ or ミックスピザ or ○○ピザ」等のように構造化して取得することができ、利便性が増します。

スロット図解
スロット図解

 また1つの会話に複数の対象が含まれるような場合にも、スロットを利用することでインテントを1つ作成し対象をスロットとすることでシンプルに管理することが可能になります。

 公式に分かりやすい図解と解説がありますので、そちらも併せてご覧ください。

スロットの値の取得

 ユーザーの発話がスロットを適用したインテントであると判断された場合、ソースコードからスロットの値を取得することができます。

 第1回で利用したプロジェクトの中盤にインテントを取得している部分がありますが、これと同様にスロットも取得することが可能です。

.onIntentRequest(async responseHelper => {
  const intent = responseHelper.getIntentName();
  // slotの値を辞書型で取得する
  const slots = responseHelper.getSlots()
...
})

ビルトインスロット

 インテントの中にスロットを適用するにはあらかじめスロットを作成しておく必要があるのですが、数字や日時、期間等よく使われるであろうスロットに関してはCEKに用意されており、自分で作成する必要はありません。

 例えば「商品を5個カートに入れて」というような発話から「5」の部分を抜き出したい場合等にサンプル発話の「5」の部分をスロットとして登録することで、インテントは同じまま、スロットに「10」や「100」等のユーザーが発言した数字が格納されるようになります。

 CEKには多数のビルトインスロットが用意されています。詳しくはドキュメントをご覧ください。

カスタムスロット

 ビルトインスロットにないスロット、例えばレストランのメニューの一覧やショップの商品カテゴリ一覧等は自分で作成する必要があります。

 詳しくはドキュメントをご覧ください。

ビルトインスロットとカスタムスロットを含むインテントの例

スロットの準備

 では第1回で作成した挨拶サンプルスキルに、新たなインテントを作成してみましょう。

 このインテントはユーザーの発話が商品の注文を指している時に呼ばれ、スロットとして商品名と個数が適用されています。

 まず、ビルトインのCLOVA.NUMBERの利用準備をしましょう。対話モデル設定画面を開き、左サイドバーから「ビルトインスロットタイプ」の横の「+」をクリック、次にCLOVA.NUMBERのチェックボックスをオンにし、保存をクリックします。

ビルトインスロット
ビルトインスロット

 これでインテントにCLOVA.NUMBERスロットを適用することができるようになりました。

 次にカスタムスロットです。

 左サイドバーから「カスタムスロットタイプ」の横の「+」をクリック、フォームに「slot_item」と入力し、作成をクリックします。

カスタムスロット
カスタムスロット

 代表語と同義語を入力し、保存をクリックします。その対象を表し、かつリクエストに含めたい言葉を入力します。

 同義語には、代表語と同じ意味でユーザーが発話する可能性のある言葉を、半角カンマで区切って入力します。同義語が発話された場合はスロットの値として代表語がリクエストに含まれます。

カスタムスロット
カスタムスロット

インテントの作成

 ではこれらのスロットを含むインテントを作ってみましょう。前回と同様にインテントを作成します。名前はBuyGameIntentとしましょう。

カスタムスロット
カスタムスロット

 サンプル発話を入力したら、スロットを適用したい部分をマウス、トラックパッド等でドラッグします。

カスタムスロット
カスタムスロット

 スロットの登録ダイアログが表示されます。テキストフィールドにhardwareと入力しreturnキーを押下します。

カスタムスロット
カスタムスロット

 スロットタイプからslot_itemを選択します。

カスタムスロット
カスタムスロット

 同様に個数の部分にビルトインスロットを適用します。スロット名はamountとします。

 できたら全てのサンプル発話に同様に適用してください。終わると以下のようになります。

カスタムスロット
カスタムスロット

 ビルドを忘れずにしておいてください。終わればインテントの作成は完了し、以後のリクエストに適用されます。

ソースコードの変更

 では実際にスロットの値を取得しそれによって返答を変えられるようソースを変更しましょう。先程一から作成したプロジェクトか、第1回でダウンロードしたプロジェクトindex.jsを以下のように変更します。

index.js
      case 'GreetingsIntent':
        ....
        break;
      // 追加ここから
      case 'BuyGameIntent':
        const slots = responseHelper.getSlots()
        speech = {
          lang: 'ja',
          type: 'PlainText',
          value: `${slots.hardware}を${slots.amount}個ですね。かしこまりました。${TEMPLATE_INQUIRY}`
        }
        responseHelper.setSimpleSpeech(speech)
        break;
      // 追加ここまで
      case 'Clova.GuideIntent':

動作チェック

 ではClovaに実際に話しかけて動作をチェックしてみましょう。

 「挨拶サンプルを起動して」の後にスタンバイモードになったことを確認してから、「プレステ4を3個購入して」と話しかけてみます。「PS4を3個ですね。かしこまりました」と返ってくれば成功です。うまくいかない場合は対話モデルが正常に設定されているか、ビルドが終わっているかを確認してください。どちらも問題ない場合は音声認識の結果を確認して下さい。

最後に

 第2回はHerokuの使い方やログの出力方法、シンプルなスキルを実現するためのプロジェクトの構成について踏み込んで解説を行いました。アイディアのある方は本記事を参考にしながら是非自分だけのスキルを開発してみてください。

 尚、スキルの開発には公式のデザインガイドラインが役に立ちます。審査で落ちてしまい無駄な時間を使わないためにも、構想段階から審査提出前まで意識しながら開発をするよう心がけることをおすすめいたします。

 次回は機能的で実際に役に立ちそうなスキルの開発手法を解説します。お楽しみに。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
LINEのAIアシスタントとおしゃべりしよう! 世界一簡単なClovaスキル開発講座連載記事一覧
この記事の著者

立花 翔(タチバナ ショウ)

 LINE株式会社テクニカルエバンジェリスト  個人アプリケーションデベロッパーとして世界中で1000万近くのユーザーと接点を持った経験を元に、デベロッパーのLINEのAPIを利用したビジネスの成功をお手伝いさせて頂いております。 各種APIを始めとするプラットフォームとしてのLINEを啓蒙し、目指...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11001 2018/08/13 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー