Dialogflow ES エージェントを作成する
このガイドでは、Dialogflow コンソールを使用して簡単なエージェントを作成し、テストする方法について説明します。
始める前に
このガイドを読む前に、次の手順を行ってください。
- Dialogflow の基本をご覧ください。
- 手順に沿って設定してください。
エージェントを作成する
エージェントをまだ作成していない場合は、ここで作成します。
- Dialogflow ES コンソールに移動します。
- Dialogflow コンソールにログインするよう求められたら、ログインします。詳細については、Dialogflow コンソールの概要をご覧ください。
- 左側のサイドバー メニューで [Create Agent] をクリックします。(すでに他のエージェントをお持ちの場合は、エージェント名をクリックし、一番下までスクロールして [Create new agent] をクリックします)。
- エージェント名、デフォルトの言語、デフォルトのタイムゾーンを入力します。
- すでにプロジェクトを作成している場合は、そのプロジェクトを入力します。Dialogflow コンソールでプロジェクトを作成できるようにする場合は、[Create a new Google project] を選択します。
- [Create] ボタンをクリックします。
エージェントにサンプル ファイルをインポートする
このガイドの手順でエージェントの前提条件を設定するため、このガイド用に準備されたエージェントをインポートする必要があります。インポート時に、これらの手順では restore オプションが使用されます。これにより、すべてのエージェント設定、インテント、エンティティが上書きされます。
このガイド用に準備されたエージェントは、ユーザー定義のインテントやエンティティを含まない新しいエージェントです。
ファイルをインポートする手順は次のとおりです。
-
new-agent.zip
ファイルをダウンロードします。 - Dialogflow ES コンソールに移動します。
- エージェントを選択します。
- エージェント名の横にある設定 settings ボタンをクリックします。
- [Export and Import] タブを選択します。
- [Restore from Zip] を選択し、手順に従ってダウンロードした zip ファイルを復元します。
インテント
インテントによって、1 回の会話ターンにおけるエンドユーザーの意図が分類されます。エージェントごとに、多くのインテントを定義します。インテントを結合することで会話全体を処理できます。
デフォルト インテント
エージェントを作成すると、2 つのデフォルト インテントが作成されます。
- デフォルトの Welcome インテント: エンドユーザーがエージェントとの会話を開始すると、このインテントとエージェントのマッチングが行われます。このインテントでは、会話の開始にあたりエージェントがどのように動作するか、またはどのような発話をするかをエンドユーザーに知らせるレスポンスを返す必要があります。
- デフォルトのフォールバック インテント: エンドユーザーの表現と他のすべてのインテントとの間で一致がない場合に、このインテントとのマッチングが行われます。
これらのインテントを表示するには、エージェントのインテント リストに移動します。
- Dialogflow ES コンソールに移動します。
- 前の手順で作成したエージェントを選択します。
- 左側のサイドバー メニューで [Intents] をクリックします。
コンソールの中央に、エージェントのインテントのリストが表示されます。
デフォルトのフォールバック インテントをテストする
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] をクリックします。
次のトレーニング フレーズを入力します。各エントリの後に Enter キーを押します。
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 English
I speak French
I know how to write in German
[Save] ボタンをクリックし、[Agent Training] ダイアログにトレーニングが完了したことが示されるまで待ちます。
Dialogflow はトレーニング フレーズから、システム エンティティとして認識されるパラメータを自動的に検出します。システム エンティティは、多数の一般的なデータ型(場所、色、日付など)向けに Dialogflow が用意したエンティティです。
[Training phrases] セクションにある [Action & parameters] テーブル内に、次の情報を示す行が作成されます。
- Required: このチェックボックスはオンになっていません。したがって、このパラメータはオプションです。
- Parameter Name: このパラメータは言語として認識されるので、自動的に
language
というパラメータ名が付けられます。 - Entity: エンティティのタイプです。
@sys.language
システム エンティティとして認識されます。 - Value: このパラメータの値を参照するときに使用する識別子です。
- Is List: このチェックボックスはオンになっていません。したがって、このパラメータはリストではありません。
レスポンスでパラメータ データを使用する
パラメータの値は、レスポンスで使用できます。たとえば、エージェントをビルドする際に、レスポンスに $language
パラメータ参照を使用できます。これは実行時に、エンドユーザー表現で指定された言語に置き換えられます。
パラメータを使用するレスポンスを追加します。
- [Responses] セクションまで下にスクロールします。
- 次のテキスト レスポンスを追加します。
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 javascript
I 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
」と入力します。
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 - custom
インテントは必ず set-language
インテントの後でマッチングされるので、ユーザーが「How long have you known $language?
」と質問された直後だと想定できます。次に、この質問に対するユーザーの回答として想定されるトレーニング フレーズを追加できます。
- 左側のサイドバー メニューで [Intents] をクリックします。
set-language - custom
インテントをクリックします。- 次のトレーニング フレーズを追加します。
3 years
about 4 days
for 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
パラメータ値はコンテキストから取得されます。
プロダクション
エージェントを本番環境で実行する場合は、必ずプロダクションのベスト プラクティスを実施してください。
次のステップ
フルフィルメント クイックスタートを試します。