Dialogflow ES エージェントを作成する
Dialogflow ES コンソールを使用して、エージェントをビルドしてテストします。
始める前に
始める前に、次の手順を完了します。
- Dialogflow の基本をご覧ください。
- セットアップ手順を完了します。
エージェントを作成する
- Dialogflow ES コンソールに移動します。
- Dialogflow コンソールにログインするよう求められたら、ログインします。詳細については、Dialogflow コンソールの概要をご覧ください。
- サイドバー メニューで [エージェント] をクリックします。
- [デプロイしたエージェント] タブを選択します。
- [エージェントを作成] をクリックします。
- エージェント名、デフォルトの言語、デフォルトのタイムゾーンを入力します。
- 既存のプロジェクトを入力します。Dialogflow コンソールでプロジェクトを作成できるようにするには、[Create a new Google project] を選択します。
- [作成] をクリックします。
インテント
インテントは、1 回の会話ターンにおけるエンドユーザーの意図を分類します。各エージェントで多数のインテントを定義し、複数のインテントを組み合わせて会話全体を処理します。
デフォルト インテント
エージェントを作成すると、Dialogflow は 2 つのデフォルト インテントを作成します。
- デフォルトの Welcome インテント: エンドユーザーがエージェントとの会話を開始すると、このインテントとエージェントのマッチングが行われます。このインテントでは、会話の開始にあたりエージェントがどのように動作するか、またはどのような発話をすることができるかをエンドユーザーに知らせるレスポンスを返します。
- デフォルトのフォールバック インテント: エンドユーザーの表現と他のすべてのインテントとの間で一致がない場合に、このインテントとのマッチングが行われます。
これらのインテントを表示するには、エージェントのインテント リストに移動します。
- Dialogflow ES コンソールに移動します。
- 作成したエージェントを選択します。
- サイドバー メニューで [Intents] をクリックします。
Dialogflow コンソールの中央に、エージェントのインテントのリストが表示されます。

デフォルトのフォールバック インテントをテストする

Dialogflow シミュレータは、コンソールの右側にあります。シミュレータでは、メッセージを音声入力または入力してエージェントをテストできます。
エージェントを試してみましょう。
- [Try it now] フィールドをクリックします。
- タイプ
What is your name?。 - Enter キーを押します。
エージェントのレスポンスは、[Default Response] セクションに表示されます。入力した内容がどのインテントにも一致しなかったため、デフォルトのフォールバック インテントとのマッチングが行われ、デフォルト レスポンスのいずれかが返されます。
インテントを作成する
このセクションのステップでは、「What is your name?」という質問に答えるインテントを作成します。インテントごとに、多数のトレーニング フレーズを定義します。トレーニング フレーズは、エンドユーザーがエージェントに何を入力または発声するかのサンプルです。エンドユーザー表現とも呼ばれます。Dialogflow が表現をインテントに一致させるのに役立つトレーニング フレーズを定義します。
インテントを 1 つ作成します。
- サイドバー メニューの [Intents] の横にあるインテント追加 ボタンをクリックします。
- [Intent name] フィールドに「
get-agent-name」と入力します。 - [Training Phrases] セクションで、[Add training phrases] をクリックします。
次のトレーニング フレーズを入力します。
What is your name?Do you have a name?Tell me your name

[Responses] セクションで、[Text Response] セクションに次のように入力します。
My name is Dialogflow!

[Save] ボタンをクリックし、[Agent Training] ダイアログにトレーニングが完了したことが示されるまで待ちます。
インテントをテストする

シミュレータで「What's your name?」と入力し、Enter キーを押します。
入力されているトレーニング フレーズとは少し異なっていても、エージェントは表現に対して適切に応答します。
Dialogflow は、トレーニング フレーズを機械学習モデルのサンプルとして使用して、エンドユーザー表現とインテントのマッチングを行います。モデルは、エージェント内のすべてのインテントに照らして表現をチェックし、各インテントにスコアを割り当てて、最高スコアのインテントをマッチングします。スコアが最も高いインテントでも、スコアが非常に低い場合は、フォールバック インテントが一致するインテントとなります。
パラメータとエンティティ
実行時にインテントが一致すると、Dialogflow はエンドユーザーの表現から抽出された値をパラメータとして提供します。各パラメータにはエンティティ タイプというタイプがあります。エンティティ タイプによって、データの抽出方法が指定されます。未加工のエンドユーザー入力とは異なり、パラメータは、ロジックの実行やレスポンスの生成に簡単に使用できる構造化データです。エージェントの作成時にデータの抽出方法を制御するには、トレーニング フレーズの一部にアノテーションを付け、関連するパラメータを構成します。
パラメータを作成する
インテント パラメータを作成します。
- サイドバー メニューの [Intents] の横にあるプラス ボタンをクリックします。
- インテント フォームの上部にあるインテント
set-languageに名前を付けます。 - 次のトレーニング フレーズを追加します。
I know EnglishI speak FrenchI know how to write in German
[Save] ボタンをクリックし、[Agent Training] ダイアログにトレーニングが完了したことが示されるまで待ちます。

Dialogflow はトレーニング フレーズから、システム エンティティとして認識されるパラメータを自動的に検出します。システム エンティティは、多数の一般的なデータ型(場所、色、日付など)向けに Dialogflow が用意したエンティティです。
トレーニング フレーズを追加すると、Dialogflow によって [Action & parameters] テーブルに行が作成されます。

- Required: チェックボックスはオンになっていません。したがって、このパラメータはオプションです。
- Parameter Name: 言語として認識されるため、自動的に
languageという名前が付けられます。 - エンティティ:
@sys.languageシステム エンティティとして認識されます。 - 値: このパラメータの値を参照するときに使用する識別子。
- Is List: チェックされていません。このパラメータはリストではありません。
レスポンスでパラメータ データを使用する
レスポンスでパラメータの値を使用できます。たとえば、エージェントをビルドする際に、レスポンスで $language パラメータ参照を使用できます。実行時に、エージェントはエンドユーザーの表現で指定された言語に置き換えます。
パラメータを使用するレスポンスを追加します。
- [Responses] セクションに移動します。
- [Text Response] セクションに、次のように追加します。
Wow! I didn't know you knew $language. - [Save] ボタンをクリックし、[Agent Training] ダイアログにトレーニングが完了したことが示されるまで待ちます。
パラメータをテストする

シミュレータに「I know Russian」と入力します。Dialogflow が、値「Russian」の language パラメータを正しく抽出していること、レスポンスでこのパラメータ参照が使用される場所に「Russian」が正しく挿入されていることがわかります。
独自のエンティティを作成する
ほとんどの場合、システム エンティティでは提供されない特定のデータをユーザーから収集する必要があります。このような状況に対応するには、カスタム エンティティを作成できます。
カスタム エンティティを作成するには、次の手順を行います。
- サイドバー メニューで [Entities] の横にあるエンティティ追加 ボタンをクリックします。
- エンティティの名前として「
language-programming」と入力します。 次のエンティティ エントリ(行)を追加します。
参照値 同義語 JavaScript JavaScript、js、ECMAScript Java Java Python Python、py [Save] ボタンをクリックし、[Agent Training] ダイアログにトレーニングが完了したことが示されるまで待ちます。

Dialogflow では複数形や大文字と小文字などの単純な違いには対処できます。エントリには考えられるあらゆる類義語を追加してください。追加する類義語が多ければ多いほど、エージェントは正確にエンティティを判断できます。
新しいエンティティを使用する
set-language インテントに、新しいエンティティを使用するトレーニング フレーズを追加します。
- サイドバー メニューで [Intents] をクリックします。
set-languageインテントをクリックします。- 次のトレーニング フレーズを追加します。
I know javascriptI know how to code in Java
- これらのトレーニング フレーズのプログラミング言語にアノテーションが自動的に付けられ、プログラミング言語が [Action and Parameters] セクションでパラメータに追加されることに注意してください。
- [Responses] セクションに、次の 2 番目のテキスト レスポンスを追加します。
$language-programming is an excellent programming language。 - [Save] ボタンをクリックし、[Agent Training] ダイアログにトレーニングが完了したことが示されるまで待ちます。
新しいエンティティをテストする

シミュレータに I know how to code in py と入力します。Dialogflow は、language-programming パラメータの py を正しく抽出し、Python エンティティとして識別して、その値をレスポンスに挿入します。
コンテキスト
会話の流れを制御するには、コンテキストを使用します。
フォローアップ インテントを追加する
フォローアップ インテントを使用すると、コンテキストを手動で作成して管理しなくても、会話を制御できます。
フォローアップ インテントを作成すると、出力コンテキストが親インテントに追加され、同じ名前の入力コンテキストが子インテントに追加されます。これは、前の会話ターンで親インテントが一致している場合にのみ、フォローアップ インテントとのマッチングが行われることを意味します。
カスタムのフォローアップ インテントを set-language インテントに追加します。
- 前の手順で作成した
set-languageインテントを選択します。 - [Response] セクションでテキスト レスポンスを更新します。
Wow! I didn't know you knew $language. How long have you known $language?
- [Save] ボタンをクリックし、[Agent Training] ダイアログにトレーニングが完了したことが示されるまで待ちます。
- サイドバー メニューで [Intents] をクリックします。
set-languageインテントにカーソルを合わせて、[Add follow-up intent] をクリックします。- リストで [カスタム] をクリックします。
- [Save] ボタンをクリックし、[Agent Training] ダイアログにトレーニングが完了したことが示されるまで待ちます。
フォローアップ インテントに、set-language - custom という名前が自動的に付けられます。

フォローアップ インテントを使用したインテント マッチング
フォローアップ インテントは、親インテントが一致した場合にのみ一致します。set-language - custom インテントは set-language インテントの後にのみマッチングされるため、ユーザーには「How long have you known $language?」という質問が行われたばかりです。この質問に対するユーザーの回答として想定されるトレーニング フレーズを追加します。
- サイドバー メニューで [Intents] をクリックします。
set-language - customインテントをクリックします。- 次のトレーニング フレーズを追加します。
3 yearsabout 4 daysfor 5 years
- [Save] ボタンをクリックし、[Agent Training] ダイアログにトレーニングが完了したことが示されるまで待ちます。
フォローアップ インテントをテストする
シミュレータで「I know French」と入力してから、質問「How long have you known French」に対して「about 2 weeks」と返答します。
2 番目の表現に対するレスポンス(about 2 weeks)はありませんが、適切なインテント(set-language - custom)に表現がマッチングされ、duration パラメータが正しく解析されたこと(2 weeks)がわかります。
インテントとコンテキスト
set-language インテントを調べ、set-language-followup が出力コンテキストとしてリストされ、その前に数字 2 が付けられていることを確認します。この数字は、有効期間と呼ばれます。

set-language インテントが一致すると、set-language-followup コンテキストがアクティブになり、次の 2 回の対話(有効期間 2)にわたって会話に関連付けられます。したがって、How long have you known $language? のような質問に回答すると、set-language-followup コンテキストがアクティブになります。
set-language - custom インテントを調べ、set-language-followup が入力コンテキストとしてリストされ、set-language インテントの出力コンテキストと同じであることを確認します。
Dialogflow がインテントのマッチングを行う場合、アクティブなコンテキストと一致する入力コンテキストが含まれるインテントが優先されます。
コンテキストとパラメータ
コンテキストはパラメータの値を格納します。set-language インテントの出力コンテキストがアクティブであれば、このインテントに定義されたパラメータの値にアクセスできます。set-language - custom インテントでは、ユーザーがその言語を習得してからどれくらいの期間が経っているかを尋ねているだけで、参照している言語自体については尋ねていません。
レスポンスで言語を参照するには:
set-language - customインテント テキスト レスポンスをI can't believe you've known #set-language-followup.language for $duration!に更新します。- [Save] ボタンをクリックし、[Agent Training] ダイアログにトレーニングが完了したことが示されるまで待ちます。
#set-language-followup.language 参照は、アクティブなコンテキストのパラメータ参照です。
コンテキスト パラメータをテストする
シミュレータで「I know French」と入力してから、質問に対して「1 week」と返答します。なお、language パラメータ値はコンテキストから取得されます。
本番環境
エージェントを本番環境で実行する前に、本番環境のベスト プラクティスを実装します。