🛰️

Dialogflow CX の事前構築済みコンポーネントの紹介

2023/12/04に公開

概要

  • Dialogflow CX の事前構築済みコンポーネントに新しいユースケースが追加されました
  • 実際にインポートしてみた
  • 類似機能(ビルド済みエージェント)の紹介

1. はじめに

こんにちは、クラウドエース データ ML ディビジョン所属の泉澤です。
クラウドエースの IT エンジニアリングを担うシステム開発部の中で、特にデータ基盤構築・分析基盤構築からデータ分析までを含む一貫したデータ課題の解決を専門とするのがデータ ML ディビジョンです。

データML ディビジョンでは活動の一環として、毎週 Google Cloud の新規リリースを調査・発表し、データ領域のプロダクトのキャッチアップをしています。その中でも重要と考えるリリースを本ページ含め記事として公開しています。

2. 概要

今回紹介する リリース notes は、Dialogflow CX に事前構築済みコンポーネントが追加されたことについてです。
このリリースは 10/23 にありました。

まず初めに、今回のリリースに関わる Dialogflow CX について紹介します。

2.1. Dialogflow CX とは?

Dialogflow というのは、チャットボットを開発するためのプラットフォームです。Google Cloud の AI 技術を活用して自然な会話を実現させることができます。Dialogflow には CX (Advanced) と ES (Standard) の2つのエディションがあり、それぞれチャットボットの作成方法が異なります。
今回は、より複雑な対話を実現できる Dialogflow CX について説明します。

Dialogflow CX の基本的な仕組みについて説明します。詳しい説明は他の記事にお任せしたいと思います。すでに Dialogflow CX の基本はわかっている、という方は「2.2. 事前構築済みコンポーネントとは?」まで読み飛ばしていただいて構いません。

一般に、AI を搭載したチャットボットのことを仮想エージェントと呼ぶことがあります。Dialogflow CX 上では、作成する一つ一つのチャットボットをエージェントと呼びます。(他のエージェントタイプと比較して CX エージェントと呼ぶこともあります。)

エージェントは、それぞれ独自のフローを持ちます。フローとは会話の流れのようなものです。フローには、ページと呼ばれる会話トピックと、それらをつなぐパスが定義されています。ページ内には、ハンドラと呼ばれるものが定義されており、このハンドラがページ遷移を制御することで、会話の流れが自然に分岐し、展開していきます。大規模なエージェントになると複数のフローを持ち、より複雑な会話を成立させることができます。

1_image.png
ハンドラには要件、フルフィルメント、トランジション ターゲットが定義されています。

  • 要件:
    ハンドラが起動する条件のことです。エンドユーザーの入力内容の意図(インテント)やパラメータの入力などがこの条件に該当します。
    例)hungry インテント:「腹へった」「空腹です」「お腹すいた」...などの複数のトレーニングフレーズを登録しておき、Dialogflow CX が ML モデルを学習させます。エージェントが学習済みの ML モデルでエンドユーザー入力がインテントとマッチしているか判断します。インテントがマッチしたと判断された場合、このインテントに該当するハンドラが起動します。
  • フルフィルメント:
    ハンドラが起動した際に実行する手順のことです。エージェントのレスポンスメッセージ、もしくは外部サービスの呼び出し(Webhook)などが該当します。
  • トランジション ターゲット:
    ページの遷移の先のことです。遷移先は各ハンドラに1つまでしか定義できないため、最低でも遷移先分ハンドラが必要となります。トランジション ターゲットを定義しない場合、遷移せず、今いるページにそのまま残ります。トランジション ターゲットにはページだけでなく、別のフローや会話の終了(End Session)を定義することもできます。

そのほかの重要なリソースについて簡単に説明します。

  • パラメータ:セッション中にエンドユーザーが指定した値を抽出して参照するために使用される変数のようなものです。
  • エンティティ:エンドユーザー入力からデータを抽出する方法を定義しておくものです。パラメータとエンティティは同時に使われることが多いです。

基本の仕組みは以上になりますが、仮想エージェント作成のイメージを掴むために、まったく触ったことがない人は 公式のクイックスタート を一度やってみるのをおすすめします(目安:30分〜1時間)。

事前構築済みコンポーネントには、今説明してきたフローとそれに付随するリソースが定義されています。

2.2. 事前構築済みコンポーネントとは?

事前構築済みコンポーネントというのは、一般的なタスクやシナリオに対応する事前構築済みフローのパッケージです。このフローにはすぐに使用できるインテントとエンティティが含まれており、外部サービスとの統合を必要としないコンポーネントについてはすぐに使用できます。外部サービスとの統合を必要とするコンポーネントについては適切なエンドポイントと統合するように Webhook の構成を変更する必要があります。

事前構築済みコンポーネントには次の 2 種類があります。

  • 構成要素コンポーネント: 名前や住所など、特定のパラメータを収集するコンポーネントです。
  • ユースケース コンポーネント: 一つ以上の構成要素コンポーネントを使用し、大規模なユーザー ジャーニー(カスタマー ジャーニー)※を実現するコンポーネントです。ユースケース コンポーネントをインポートすると、構成要素コンポーネントが同時にインポートされることがあります。

※「ユーザージャーニー」とは、エンドユーザーが商品やサービスを知り、購入や利用の意向を持つまで、そして実際に購入や利用を行い、その後も利用を続けたり再購入の決定を下すまでの一連の体験を「旅」に喩えた概念です。

本リリースで追加されたのは、ユースケース コンポーネントの

  • 口座残高
  • 取引明細書
  • 英数字のコレクション
  • 予約を手配する
  • Authentication
  • クレジットカードの登録
  • クレジットカードの明細書
  • 異議申し立て
  • 金融サービスの運用
  • カードをロック
  • カードの紛失・盗難
  • お支払い方法
  • 口座を開設する
  • トランザクション履歴
    です。

それ以外に次の構成要素コンポーネントがあります。

構築要素コンポーネント

  • 住所の収集
  • 英数字の収集
  • クレジットカード CVV の収集
  • クレジットカードの有効期限収集
  • クレジットカード番号の収集
  • 生年月日の収集
  • Feedback
  • ご挨拶
  • 名前の収集
  • 数値の収集
  • 電話番号の収集
  • 待合室の機能
  • 郵便番号の収集

3. 試してみた

実際に事前構築済みコンポーネントをインポートしてみたいと思います。 全てのコンポーネントは同じ方法でインポートできます。 インポート後の Webhook などの設定は公式ドキュメントを確認してください。今回、インポートするのは構成要素コンポーネントの「生年月日の収集」です。
この検証を行うためには、事前に Google Cloud プロジェクトを用意し、Dialogflow の API を有効化しておく必要があります。

  1. 仮想エージェントの作成
    まず、Dialogflow CX コンソールに移動します。
    ご自身の Google Cloud プロジェクトを選択します。

1_image.png

エージェントを選択するか、新しいエージェントを作成します。今回は右上にある [Create agent] を押して新しいエージェントを作成します。

2_image.png

[Build your own] を押します。余談ですが、このとき [Auto-generate] を押すと、Vertex AI Conversation に遷移し、生成 AI 機能を搭載したデータストアエージェントを作成することができます。

3_image.png

[Display name] に任意のエージェント名を入力し、[Create] をクリックします。

4_image.png

  1. 事前構築済みコンポーネントのインポート
    左パネルにある上側の十字ボタンを押します。

5_image.png

[Use Prebuilt flow] にカーソルをあて、インポートしたいコンポーネントを探し、クリックします。今回は Date of Birth (DOB) をインポートします。

6_image.png

コンポーネントの説明を確認し [Import as flow] をクリックします。Link からは各コンポーネントの公式ドキュメントが開きます。

7_image.png

Dob Collection フローと Waiting Room フローがインポートされました。 Waiting Room フローは、エンドユーザーがエージェントからの質問に対してすぐに答えられず待機を希望する場合に遷移するフローです。

8_image.png

  1. 会話のシミュレーション
    Dob Collection フローを使って会話のシミュレーションをしてみます。まずは Default Start Flow から Dob Collection に遷移できるように設定します。
    左パネルから Default Start Flow をクリックし、Start Page を開いて Default Welcome Intent を選択し、Transition から遷移先のフローを Dob Collection にします。

9_image.png

こうすることで エンドユーザーが "Hello" といった挨拶をした際に、Default Start Flow から Dob Collection に遷移することができます。

会話のシミュレーションは左上の Test Agent から行うことができます。

10_image.png

"Hello" を入力して会話を始めます。

11_image.png

上記画像のようなレスポンスがありました。"Good day! ..." は Default Start Flow に定義されているレスポンスです。
"Please provide your ..." 以降は Dob Collection に定義されているレスポンスであるため、会話としては少々違和感がありますが、正しく遷移できていることがわかります。

誕生日を聞かれているので "September 10th 1999" と答えてみました。

12_image.png

画像のように生年月日が正しいかを確認するメッセージが返ってきました。
"<speak> ... </speak>" と書かれているのは音声合成マークアップ言語(SSML)でレスポンスが記述されているためです。
これを使うと日付、時刻、略語などに対するオーディオ形式を指定することができます(詳細)。
おそらく、実際にエージェントを統合する環境(Web サイト、LINE、Slackなど)では、これらのタグ(<speak>など)は出ないと思われます。
因みに、Web サイトに作成したエージェントを埋め込むことができる Dialogflow Messenger で検証した際には画像のようにタグは出ませんでした。
実際に使う環境に合わせて確認してみてください。

messenger_image.png

先ほどの会話に続いて"yes" と入力します。

13_image.png

上記のようにレスポンスがきました。これでこのフローは終了です。

さらに、このコンポーネントは、エンドユーザーから得られた日付が現実的かどうかを判断し、あり得ない日付だった時に聞き返してくれます。
例えば誕生日を "September 9th 2024" と伝えると下図のようにもう一度言ってくださいと言うように促されます。

14_image.png

4. 制限と注意点

  • 言語の制限について
    現在、すべての事前構築済みコンポーネントは英語にしか対応していません。しかし、日本語の仮想エージェント開発に全く使えないわけでもないです。デフォルトの言語を日本語に設定したエージェントに対して事前構築済みコンポーネントのインポートを試みたところ、インポートすることができました。ただし、フルフィルメント、インテントのトレーニングフレーズ、エンティティエントリなどの言語特有のリソースがすべて消えてしまうため、日本語に直して登録する必要があります。
    これと同じ現象はエージェントに対してデフォルトとは異なる言語を追加した際にも発生します。
    とはいえ、一からフローを設計する必要がなくなるため、求める機能が事前構築済みコンポーネントとしてある場合には、利用を検討しても良いと思います。また、本格的に Dialogflow CX で開発を自身で設計を行う場合、事前構築済みコンポーネントを見ておくことで勉強になると思います。
    別の対処法として英語でエージェントを作成し、Translation API を挟むというやり方もあるとは思います。

  • VPC SC について
    事前構築済みコンポーネントは Google がホストする外部の Google Cloud Storage バケットに格納されています。そのため、プロジェクトが VPC Service Controls(VPC-SC)境界内にある場合、このバケットからのインポートを有効にする下り(外向き)ルールの追加が必要になることがあります。
    インポートを有効にするには、Google Cloud Storage バケット gs://gassets-api-ai を含む外部 Google Cloud プロジェクトへのアクセスを許可する下り(外向き)ルールを作成する必要があります。ルールには以下の属性(参考)を記述します。

    • Resource: projects/921279757870
    • Service Name: storage.googleapis.com
    • Method: google.storage.objects.get

インポートを試みた際に"Permission denied while accessing Google Cloud Storage URI 'gs://gassets-api-ai/prebuilt_components/cx-standard-prebuilt-components/resource-name'"といったエラーメッセージが表示された場合、上記の設定が必要となります。

5. 類似機能(ビルド済みエージェント)の紹介

ビルド済みエージェントというのは一般的なユースケース向けの構築済みエージェントのコレクションのことを指します。金融サービス、レンタカー予約などのユースケースに対応するエージェントが用意されており、構築済みコンポーネントと同様にWebhookなどの設定をするだけですぐに使うことができます。

ビルド済みエージェントのインポート方法はさらに簡単で、Agent を選択する画面で [Use pre-built agents] をクリックし、ユースケースにあったエージェントを選ぶだけです。

15_image.png

16_image.png

事前構築済みコンポーネントと同様に自由に後からカスタマイズできますが、

  • デフォルトの言語設定が英語しかない(デフォルトの言語設定を後から変えることはできません)
  • テストケースがあらかじめ定義されている

といった違いがあります。
外部の会話プラットフォーム(Slack や Google チャットなど)と統合させる際、デフォルトの言語でないと会話ができないといった制限がある場合があるため、注意が必要です(参考)。

6. まとめと今後の展望

本記事では、Dialogflow CX の事前構築済みコンポーネントについて紹介しました。事前構築済みコンポーネントを利用することで仮想エージェント開発を加速することができます。Dialogflow CX は Vertex AI Conversation と組み合わせることで生成 AI 機能を搭載したチャットボットを開発することができます。今回紹介した事前構築済みコンポーネントは自由にカスタマイズすることが可能なので、生成 AI 機能を組み合わせても面白いですし、生成 AI 機能を持ったコンポーネントが今後リリースされるのではなかろうかと、個人的に期待しています。
生成 AI と事前構築済みコンポーネントでチャットボット開発を爆速化できる Dialogflow CX で、チャットボットの導入をぜひ検討してみてください!

もちろん、クラウドエースの SI や Booster for 生成 AI で Google Cloud およびチャットボットの導入支援することもできます👀

7. 参考

Discussion