🤖

【解説編】初めてのDialogflow CX と Competition そしてLINE Botへの連携まで!【ノーコード・ローコード】

2021/12/31に公開

こんにちは、もっちゃんと申します。

自然言語をアプリケーションで利用できると、ユーザビリティをより向上させることができる可能性があると思っています。アプリケーションの使い方にとらわれず、普段よく使っている自然言語でアプリが利用できるからですね。

そして私、自然言語とかがちょっと好きで、さらにクラウドのAI/ML系のサービスも好きだったりでちょこちょこ触って遊んでいたりします。

そこで今回はGoogleの自然言語処理系のサービス、Dialogflow CXについて、以前触った時の備忘録も兼ねて情報をまとめていきたいと思います。

なお、こちらの記事は Qiitaアドベントカレンダー 【LINE DC Advent Calendar 2021】の記事でもあります!

https://qiita.com/advent-calendar/2021/linedc

Dialogflow CX とは

Dialogflow CXとは、Google が高度な chatbot システムと呼ぶシステムを企業が構築できるようにするもので、複雑な質問と回答の会話の流れを含む高度なやり取りに焦点を当てたサービスです。Dialogflow CX は、電話通信を念頭に置いて設計されており、企業全体でのデプロイメントに合わせて柔軟に規模を調整できます。

Googleが提供している、自然言語による対話をシステムに組み込む際に使えるプラットフォームですね。視覚的にわかりやすいGUI(Visual Builder)で会話のフローを構築できるのが特徴です。chatbotだけでなく、voicebot(スマートスピーカーなど)を作る際にも活用することができます。

従来のDialogflow は Dialogflow ESと名称変更、Dialogflow CX は次世代のより複雑な会話フローに対応すべくリリースされています。

  • エディションの種類

詳細な説明は下記のイベント内でも解説されていますので、よろしければご覧ください。

https://linedevelopercommunity.connpass.com/event/220362/

YouTubeのvideoIDが不正ですhttps://youtu.be/iFeOJ5cwTmU?t=680

主要な用語整理

Dialogflow CXを使うにあたり、先に抑えておいた方がよいキーワードがありますのでさっそく見ていきましょう。

Agent

エンドユーザーとの同時会話を処理する仮想エージェントです。これは、人間の言語のニュアンスを理解する自然言語理解モジュールです。Dialogflow は、会話中のエンドユーザーのテキストまたは音声をアプリやサービスが理解できる構造化データに変換します。Dialogflow エージェントは、システムに必要な種類の会話が処理されるように設計および構築されます。

まさに人間とシステムの間を取り持つ妖精のような存在で、それぞれ(人間・システム)が理解できる形に情報を変換しながら処理を実行してくれるものですね。

Intent

インテントによっては、1 回の会話ターンにおけるエンドユーザーの意図(含意)を分類します。 ES インテントと比較すると、CX インテントは簡素化され、より再利用が可能なリソースになりました。

まず前提として現状、機械学習が実施できるタスクはある程度決まっています(分類、翻訳などなど)、そのうちインテントでは分類する機能を活用する形です。ユーザから送られてきたメッセージが、事前に定義されたインテント(ラベル)のうち、何に該当(分類)するのかを判断するイメージです。例えば、スポーツ関係の内容がメッセージに入っていたら(スポーツ選手の名前、スポーツに使う道具などなど)、スポーツのインテントが反応し、その後は事前に定義しておいたスポーツの会話フローに入っていくといったところです。

Entity

エンティティ タイプを使用して、エンドユーザー入力からデータを抽出する方法を制御します。

これはユーザが発した文章情報の中から取得したい情報が部分的にある場合があるかと思います。例えば下記のようにユーザから注文系の発言があった場合...

例)
Mサイズのピザを3個ください

↑ユーザの発言の中から、サイズの情報(Mサイズ)と商品名(ピザ)、枚数(3個)の情報が欲しいですよね

こういったユーザの注文情報の中から、サイズの情報(Mサイズ)と商品名(ピザ)、枚数(3個)の情報の抽出をエンティティで実現することができます。

Flow

多くの場合、複雑なダイアログでは複数の会話トピックが関与します。たとえば、ピザの配達エージェントの場合、料理の注文、顧客情報、確認という別個のトピックが考えられます。各トピックでは、エージェントがエンドユーザーから関連する情報を取得するため、複数の会話ターンを実行する必要があります。
フローは、これらのトピックと、関連する会話パスを定義するために使用されます。

会話の状態がどこからどこに移っていくかを定義するものです。デフォルトで1つフローは用意されていますが、より幅広い会話機能を持たせる場合には、フローを必要に応じて追加することで、複雑な会話フローも管理しやすい形で実現できます。

Page

フローごとに多数のページを定義します。結合されたページでは、フローが設計されたトピックに関する完全な会話を処理できます。
各ページを、そのページが表す会話の状態に関連するエンドユーザーから情報を収集するように構成します。

さきほどのフローが会話の遷移をつかさどる機能なら、ページは遷移先の会話の状態を表現・定義する機能になります。

LINE Botと連携するには?

Dialogflow CX では標準機能として、LINEとのIntegration機能が備わっています。従いまして、LINE Botの開発にDialogflow CXを用いるのは非常に相性が良く簡単です。

ざっくり下記の手順で実施できます。

① LINEの開発者コンソールでMessaging APIのチャネルを作成、必要な情報の取得を行う

LINE Botを作成するにあたっては、先にMessaging APIのチャネルというものを作成します。
詳細は下記のURL先の情報を参考にしてください。

https://zenn.dev/mochan_tk/books/line-aws-paypay-handson-doc/viewer/2-create-line-messaging-api-channel

必要な情報① チャネルID

[チャネル基本設定タブ] > [チャネルID]

必要な情報② シークレットキー

[チャネル基本設定タブ] > [チャネルシークレット]

必要な情報③ アクセストークン

[Messaging API設定タブ] > [チャネルアクセストークン]

② Dialogflow CX側でLINEとの連携設定

[Manageタブ] > [Integrations] > [LINEアイコンが表示されている箇所のConnect] を選択。

そして下記のように①で取得した情報を入力して、[Start]ボタンを押すだけで連携完了です。

③ LINEの開発者コンソールで Webhook URLの設定を行う

[Messaging API設定タブ] > [Webhook設定] でWebhookの設定を行います。

すると、下記のようにDialogflow CX で定義した動きで、LINE Botを動かすことができます!

④ LINE固有のメッセージタイプに対応するには?

LINEのメッセージタイプは、シンプルなテキスト意外にも様々な種類があります。

LINEの固有のメッセージタイプもDialogflow CXで使うことが可能です。

[Buildタブ] > [Flowsセクション] > [Page] > [Routes] > [Custom payload] から直接 JSON形式の文字列を設定することで、LINE固有のメッセージにも対応可能です!

(ここではクイックリプライというメッセージの形式を例にしています。)

設定するJSONの例
{
  "text": "ご注文いただいた$session.params.design、$session.params.sizeサイズのシャツは、7〜10営業日でお渡しできます。注文確定でよろしいでしょうか。",
  "type": "text",
  "quickReply": {
    "items": [
      {
        "action": {
          "label": "はい",
          "type": "message",
          "text": "はい"
        },
        "type": "action"
      },
      {
        "action": {
          "text": "いいえ",
          "type": "message",
          "label": "いいえ"
        },
        "type": "action"
      }
    ]
  }
}

すると下記のように固有のメッセージの形式にも対応することができています。

【おまけ】 開発モチベーションを上げるためにイベントへ参加しよう!(Competitionなど)

Googleさんは、これまでもちょいちょい開発者に向けたイベントを開催しています。こういったイベントに参加するとTシャツとかも貰えたりするので学習のモチベーションが爆上がりしますね。

https://medium.com/@saadpasta/create-a-google-assistant-action-and-win-a-google-t-shirt-and-cloud-credits-4a8d86d76eae

今年は夏頃にコンペティションが行われていました。(なぜか日本の方にはあまり知られてなさそうな感じはしましたが...)

https://medium.com/google-cloud/dialogflow-cx-competition-learn-dialogflow-cx-design-open-source-components-db2b138fe2a4

https://events.withgoogle.com/dialogflow-cx-competition-global/

こういうところに自分の名前が載るのはちょっと嬉しいですね!(競争率もそこまで高くなさそうなので、穴場かもです!皆さんも、次回は是非ご参加を!)

まとめ

今回は解説編として、まずはDialogflow CXの全体のイメージを掴むところの情報をまとめてみました。
次回は【実践編】として、Dialogflow CXをゼロから実際に使っていくところをまとめていきたいと思います。

Discussion