Dialogflow ES エージェントを作成する
Dialogflow ES コンソールを使用して、エージェントをビルドしてテストします。
始める前に
始める前に、次の手順を完了してください。
- Dialogflow の基本をご覧ください。
- 設定手順を完了します。
エージェントを作成する
- Dialogflow ES コンソールに移動します。
- プロンプトが表示されたら、Dialogflow コンソールにログインします。詳細については、 Dialogflow コンソールの概要をご覧ください。
- サイドバー メニューで [Loading agents] を展開します。
- [Create new agent] をクリックします。
- エージェント名、デフォルト言語、デフォルト タイムゾーンを入力します。
- 既存のプロジェクトを入力します。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] の横にあるインテント追加 button をクリックします。
- [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 ¶meters] テーブルに行が作成されます。

- Required: チェックされていません。このパラメータは省略可能です。
- Parameter Name: 言語として認識されるため、自動的に
languageというパラメータ名が付けられます。 - Entity:
@sys.languageシステム エンティティとして認識されます。 - Value: このパラメータの値を参照するときに使用する識別子です。
- 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] の横にあるエンティティ追加 button をクリックします。
- エンティティの名前として「
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] をクリックします。- リストで [Custom] をクリックします。
- [Save] ボタンをクリックし、[Agent Training] ダイアログにトレーニングが完了したことが示されるまで待ちます。
フォローアップ インテントに、set-language - custom という名前が自動的に付けられます。

フォローアップ インテントを使用したインテント マッチング
フォローアップ インテントが一致するのは、親インテントが一致した後のみです。
インテントが一致するのはset-language
インテントの後のみであるため、ユーザーは「How long have you known
$language?」という質問を受けたばかりです。set-language - customこの質問に対するユーザーの回答として想定されるトレーニング フレーズを追加します。
- サイドバー メニューで [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 パラメータ値はコンテキストから取得されます。
本番環境
エージェントを本番環境で実行する前に、 本番環境のベスト プラクティスを実装してください。
次のステップ
フルフィルメント クイックスタートを試します。