会話の改善
ダイアログをテストし、ダイアログ・ノードを編成します。
ダイアログのテスト
ダイアログの作業中は、いつでもダイアログが入力にどのように反応するかをテストすることができます。
「試してみる」パネルから送信したクエリは、 /message
APIコールを生成しますが、ログには記録されず、料金も発生しません。
-
ダイアログページから 、「Try it」ボタンをクリックします。
-
チャット・ペインで、テキストを入力して Enter キーを押します。
-
応答をチェックして、ダイアログが入力を正しく解釈して適切な応答を選択したかどうかを確認します。
チャット・ウィンドウに、入力で認識されたインテントとエンティティーが示されます。
テスト・ダイアログ出力 -
認識された上位のインテントを表示するには、信頼性スコアが最も高いインテントの横に表示されている目のアイコン
の上にカーソルを移動します。
-
応答が予期したものではない場合は、「試行する (Try it out)」ペインから以下のアクションを実行できます。
- 入力で認識されたエンティティーを編集する場合は、エンティティー名をクリックして、「エンティティー (Entities)」ページで開きます。
- 誤ったインテントが認識された場合は、そのインテント名の横の矢印をクリックして修正するか、トピックに無関係 (irrelevant) のマークを付けることができます。 詳しくは、トレーニング・データの改善を参照してください。
-
ダイアログツリー内のどのノードが応答を引き起こしたかを知りたい場合は、その横にある場所アイコン
をクリックします。
ソース・ノードがフォーカスされ、アシスタントがそのノードに至るまでたどったツリーの経路が強調表示されます。 新しいテスト入力を行うなど、別のアクションを実行するまで、経路は強調表示されたままです。
-
コンテキスト変数の値を確認または設定するには、「コンテキストを管理 (Manage context)」リンクをクリックします。
ダイアログに定義したコンテキスト変数がすべて表示されます。
さらに、以下のコンテキスト変数がリストされます。
$timezone
:「試す」ペインは、Web ブラウザーからユーザー・ロケール情報を取得し、それを使用して$timezone
コンテキスト変数を設定します。 このコンテキスト変数により、ダイアログの対話テストでの時刻基準の処理が簡単になります。$metadata
: このコンテキスト変数には、ユーザー ID の名前と値のペアが含まれます。 「試す」ペインではデフォルトでuser_id
が指定されていないため、conversation_id
がuser_id
値として使用されます。 実行時に、ID 値は通常、使用している統合からアシスタントに渡されます。 カスタム・アプリケーションを設計する場合は、この値を自分で設定します。
変数を追加してその値を設定すると、テスト・ダイアログの次のターンでどのような応答が返されるかを確認できます。 この機能は、例えば、ユーザーから提供されたコンテキスト変数の値に応じて異なる応答を表示するようにダイアログが設定されている場合に役立ちます。
- コンテキスト変数を追加するには、変数名を指定し、Enterキーを押します。
- コンテキスト変数のデフォルト値を定義するには、リストに追加したコンテキスト変数を見つけ、その変数に値を指定します。
詳しくは、 コンテキスト変数 を参照してください。
-
ダイアログとの対話を続けて、どのような会話のフローになるかを確認します。
- テスト発話を検索して再送信する場合は、上矢印キーを押すと、最近の入力を順番に確認することができます。
- チャット・ペインから過去のテスト発話を削除し、最初からやり直すには、「クリア」リンクをクリックします。 この操作により、テストの発話と応答が削除されるだけでなく、ダイアログとの対話の結果として設定されたコンテキスト変数の値もクリアされます。
次のタスク
テスト時に表示される問題に対応するようにダイアログを変更します。
- 不適切なインテントまたはエンティティーが認識されていることがわかった場合は、インテントまたはエンティティーの定義を変更する必要があります。
- 正しいインテントとエンティティが認識されているにもかかわらず、ダイアログで誤ったノードがトリガーされている場合は、条件が正しく記述されていることを確認してください。
ダイアログの検索
ダイアログを検索して、特定の単語やフレーズを含む1つまたは複数のダイアログノードを見つけることができます。
-
を選択します。
-
検索対象の語句を入力します。
初めて検索を行うと、インデックスが作成されます。 ダイアログ・ノード内のテキストの索引が作成される間待つよう求められる場合があります。
検索語を含むノードと、それに対応する例が表示されます。 任意の結果を選択して、編集するために開きます。

ダイアログ・ノードのコピー
ノードを複製し、ダイアログ・ツリーの直後に、そのノードの正確なコピーをピア・ノードとして作成できます。 コピーされたノード自体には、元のノードと同じ名前が付けられますが、- copy
n
が付加されます。ここで、n
は 1 から始まる番号です。 同じノードを複数回複製すると、コピーとコピーを区別できるように、名前の n
がコピーごとに
1 つずつ増分されます。 ノードに名前がない場合は、copy
n
という名前になります。
子ノードを持つノードを複製すると、子ノードも複製されます。 コピーされた子ノードは、元の子ノードと同じ名前になります。 コピーされた子ノードを元の子ノードと区別するには、親ノード名の copy
の表記を確認するしかありません。
-
コピーしたいノード上で、 Node をクリックし、
を選択し、次に 「複製」 を選択します。
-
コピーしたノードの名前を変更したり条件を編集したりして、区別できるようにすることを検討してください。
ダイアログ・ノードの移動
作成した各ノードを、ダイアログ・ツリー内の他の場所に移動することができます。
以前に作成したノードをフローの別の領域に移動して、会話を変更しなければならない場合があります。 ノードを移動して、別のブランチの兄弟またはピアにすることができます。
-
移動したいノード上で、 Node をクリックし、
を選択し、 移動を選択します。
-
ツリー内でこのノードの近くにある移動先ノードを選択します。 このノードを移動先ノードの前に配置するか、後に配置するか、または、移動先ノードの子ノードにするかを選択します。
フォルダーを使用したダイアログの編成
複数のダイアログ・ノードを 1 つのフォルダーに追加して、ダイアログ・ノードをグループ化できます。 ノードをグループ化する理由には、次のものがあります。
- 対処するサブジェクトが似ているノードをまとめて見つけやすくする。 例えば、ユーザー・アカウントについての質問に対処するノードを*「ユーザー・アカウント」フォルダーにまとめ、支払い関連の照会を処理するノードを「支払い」*フォルダーにまとめます。
- 特定の条件が満たされた場合にのみダイアログで処理したいノードのセットをグループ化します。
$isPlatinumMember
のような条件を使用して、現在のユーザーが追加サービスを受ける権利を持っている場合にのみ処理される追加サービスを提供するノードをグループ化します。 - ノードを操作する間、ランタイム環境からノードを隠す。
false
条件を指定したフォルダーにノードを追加して、それらのノードが処理されないようにします。
フォルダーの以下の特性によって、フォルダー内のノードが処理される方法が決まります。
- 条件: 条件が指定されていない場合、アシスタントはフォルダー内のノードを直接処理します。 条件が指定されている場合、アシスタントは最初にフォルダー条件を評価して、その中のノードを処理するかどうかを決定します。
- カスタマイズ: フォルダーに適用した構成設定は、フォルダー内のノードに継承されます。 例えば、フォルダーの脱線設定を変更すると、その変更はフォルダー内のすべてのノードに継承されます。
- ツリー階層: フォルダー内のノードは、フォルダーがダイアログ・ツリーにルート・レベルで追加されたか子レベルで追加されたかによって、ルート・ノードまたは子ノードとして扱われます。 ルート・レベルのフォルダーに追加したルート・レベル・ノードは、ルート・ノードとして機能し続けます。そのため、フォルダーの子ノードなどになることはありません。 ただし、ルート・レベルのノードを別のノードの子であるフォルダーに移動すると、そのルート・ノードはその別のノードの子になります。
フォルダーは、ノードが評価される順序に影響を与えません。 ノードは変わらず最初から最後まで処理されます。 アシスタントがツリーをたどる際、フォルダに条件が設定されていないか、または条件が真である場合、フォルダ内の最初のノードを即座に処理し、ツリーを順にたどっていきます。 フォルダにフォルダ条件が設定されていない場合、そのフォルダ内の各ノードは、ツリー内の他の個々のノードと同様に扱われます。
フォルダーの追加
フォルダーをダイアログ・ツリーに追加するには、次の手順を実行します。
-
ダイアログのツリービューから、 [フォルダの追加] をクリックします。
フォルダーは、ダイアログ・ツリーの最後の Anything else ノードの直前に追加されます。 ただし、ツリー内の既存のノードを選択していた場合は、その選択したノードの後ろに追加されます。
ツリー内の別の場所にフォルダを追加したい場合は、追加したい場所の前のノードから、 Node オプション アイコン
をクリックし、次に フォルダを追加する を選択します。
既存のダイアログ・ブランチ内の下位ノードの後ろにフォルダーを追加できます。 これを行うには、子ノードの
Node をクリックし 、[フォルダの追加] を選択します。
フォルダーが編集ビューで開かれます。
-
オプション: フォルダーに名前を付けます。
-
オプション: フォルダーの条件を定義します。
条件を指定しない場合は
true
が使用されます。これは、フォルダー内のノードが常に処理されることを意味します。 -
ダイアログ・ノードをフォルダーに追加します。
-
既存のダイアログ・ノードをフォルダーに追加するには、それらをフォルダーに一度に 1 つずつ移動する必要があります。
移動したいノード上で、 Node をクリックし、
を選択し、 移動をクリックし、フォルダをクリックします。 移動先ターゲットとして**「フォルダー (To folder)」**を選択します。
ノードを移動すると、フォルダー内のツリーの先頭に追加されます。 したがって、例えば、連続するルート・ダイアログ・ノードの順序を保持するには、まず、最後のノードから移動を開始します。
-
フォルダにダイアログノードを追加するには、フォルダ上で Node オプション アイコン
をクリックし、次に フォルダにノードを追加する を選択します。
ダイアログ・ノードがフォルダー内のダイアログ・ツリーの最後に追加されます。
-
フォルダーの削除
フォルダーのみを削除することも、フォルダーとその中のすべてのダイアログ・ノードを削除することもできます。
フォルダーを削除するには、以下の手順を実行します。
-
**「ダイアログ (Dialog)」**タブのツリー・ビューから、削除するフォルダーを見つけます。
-
フォルダーの Node オプション ・アイコン
をクリックし、 「削除」 を選択します。
-
以下のいずれかを実行します。
- フォルダーのみを削除し、フォルダー内のダイアログ・ノードを保持するには、**「フォルダー内のノードを削除 (Delete the nodes inside the folder)」チェック・ボックスを選択解除し、「はい、削除します (Yes, delete it)」**をクリックします。
- フォルダーと、その中のすべてのダイアログ・ノードを削除するには、**「はい、削除します (Yes, delete it)」**をクリックします。
フォルダーのみを削除した場合は、そのフォルダーが以前に存在していたダイアログ・ツリー内の場所に、フォルダーに含まれていたノードが表示されます。
ダイアログ・ノードの制限
スキルごとに作成できるダイアログ・ノードの数は、プラン・タイプによって異なります。
プラン | スキルごとのダイアログ・ノード数 |
---|---|
Enterprise | 100,000 |
プレミアム (レガシー) | 100,000 |
プラス | 100,000 |
トライアル | 25,000 |
ライト | 25,000 |
ツリーにあらかじめ入力されている welcome
と anything_else
のダイアログノードは、合計数に含まれます。
ツリーの深さの制限:このダイアログは、2,000個のダイアログノードの子孫をサポートしています。ダイアログは20個以下で最適に動作します。
ノード ID によるダイアログ・ノードの検索
ノード ID でダイアログ・ノードを検索できます。 完全なノード ID を検索フィールドに入力します。 次のいずれかの理由から、既知のノード ID に関連付けられているダイアログ・ノードを見つけなければならない場合があります。
- ログを確認していたら、ダイアログのセクションがノード ID で示されている。
- API メッセージ出力の
nodes_visited
プロパティーにリストされているノード ID を、ダイアログ・ツリーに表示されるノードにマップする必要がある。 - ダイアログ実行時のエラー・メッセージで、構文エラーが通知され、修正が必要なノードがノード ID で示されている。
ノード ID に基づいてノードを見つけ出すもう一つの方法は、以下の手順を実行する方法です。
-
「ダイアログ」ページで、ダイアログ・ツリーの任意のノードを選択します。
-
現在のノードで編集ビューが開いている場合は、編集ビューを閉じます。
-
ウェブブラウザのロケーションフィールドに、以下の例のような構文URL が表示されます
https://{location}.assistant.watson.cloud.ibm.com/{location}/{instance-id}/skills/{skill-id}/build/dialog#node={node-id}
-
現在の
{node-id}
の値を、検索したいノードのIDに置き換えて URLを編集し、新しい URL を送信します。 -
必要に応じて、編集した URL をもう一度強調表示して再送信します。
ページが最新表示され、指定したノード ID のダイアログ・ノードがフォーカスされます。 ノード ID が、スロット、Found スロット条件、Not found スロット条件、スロット・ハンドラー、または条件付き応答を表している場合は、スロットまたは条件付き応答が定義されているノードがフォーカスされ、対応するモーダルが表示されます。
それでもノードが見つからない場合は、ダイアログ・スキルをエクスポートし、JSON エディターを使用してスキルの JSON ファイルを検索します。
ダイアログのノード数
ダイアログ・スキル内のダイアログ・ノードの数を調べるには、以下のいずれかを行います。
-
ダイアログ・スキルがまだアシスタントに関連付けられていない場合は、それをアシスタントに追加し、アシスタントのメインページからスキル・タイルを表示します。 trained data セクションにダイアログ・ノードの数がリストされます。
-
/dialog_nodes
API エンドポイントに GET リクエストを送信し、include_count=true
パラメータを含めます。 以下に例を示します。curl -u "apikey:{apikey}" "{url}/v1/workspaces/{workspace_id}/dialog_nodes?version=2018-09-20&include_count=true"
ここで、{url} は、インスタンスに適切な URL です。 詳しくは、 サービス・エンドポイントを参照してください。
応答の
total
オブジェクトのpagination
属性にダイアログ・ノードの数が含まれています。
合計が思ったよりも多く見える場合は、アプリケーションから作成するダイアログがJSONオブジェクトに変換されていることが原因かもしれません。 単一のノードの一部であるように見えるフィールドは、その基盤となるJSONオブジェクトでは、個別のダイアログノードとして構造化されている。
- ノードとフォルダーはそれぞれ、独自のノードとして表されます。
- 単一のダイアログ・ノードに関連付けられた条件付き応答はそれぞれ、個別のノードとして表されます。
- スロット付きノードの場合、スロット、スロットの found 応答、スロットの not found 応答、スロット・ハンドラー、「prompt for everything」応答 (設定されている場合) はそれぞれ、個別のノードです。 実際には、3 つのスロットがあるノード 1 つが 11 個のダイアログ・ノードに相当する場合があります。