うろ覚えで作り始めるとはまってしまうダイアログフロー
IBM watoson asistant skillを作成した後は、会話の作成に入ります。
IBM watoson asistantの会話の流れは、Intent(会話の目的や意図 どうするの部分。動詞) Entity(目的 ~をの部分。名詞) Dialog(会話ブロック:ノードと言っている)によって作成していきます。
この内IntentとEntityは、Dialog(該当の会話ブロックのようなもの)を実行するかどうかの判断に使われます。
チャット入力内容が設定したIntentとEntityに該当する場合に、Dialog(会話の一部)が実行されます。
Dialogは全体を構成する一部の会話ブロックになり、会話全体は、Dialogが組み合わされたダイアログフローとして表されます。
ダイアログフローの流れ(次はどのダイアログが実行されるか)には、評価順序規則があります。
この順序規則をうろ覚えのままダイアロフローを作ってしまうと、結構ハマり(嫌になり)ます。
そこで、ダイアログフローの評価順序を整理することにしました。
ダイアログフロー評価順序
IBM Cloud 資料 Watson Assistantダイアログ作成に記述されている内容の整理まとめです。
ダイアログは、インテント (ユーザーの発言) と応答 (ボットの回答) をマッチングします。
各ダイアログ・ノードには、少なくとも 1 つの条件と 1 つの応答が含まれます。
ダイアログのこのノードをトリガーするためにユーザー入力に含まれている必要がある情報を指定します。 情報は通常、特定のインテントです。
最初のノードから最後のノードまで処理します。
満たされている条件を検出すると、そのノードをトリガーします。
複雑な会話は、子ノードを追加します。
ノードがトリガーされるたびに、そのノードの最初の子ノードから最後の子ノードまでたどり、また、子ノードがトリガーされるたびに、そのブランチを最後のノードに達するまでたどります。
ノードは最初から最後まで評価されるので、ブランチの順序が重要です。
入力と一致する条件を持つ最初のルート・ノードが使用されます。つまり、それより後に位置するツリー内のノードはトリガーされません。
アシスタントがブランチの最後に到達した場合、または、評価対象である現在の子ノードのセットに true と評価される条件がない場合、アシスタントはツリーの基点にジャンプして戻ります。
anything_else この条件をダイアログの最後で使用して、ユーザー入力が他のどのダイアログ・ノードとも一致しない場合の処理を実行できます。
この条件により、Anything else ノードがトリガーされます。
conversation_start welcome と同じく、この条件はダイアログの最初のターンで true と評価されます。
welcome とは異なり、アプリケーションからの最初の要求にユーザー入力が含まれているかどうかにかかわらず、true になります。
conversation_start 条件を指定したノードを使用して、ダイアログの開始時にコンテキスト変数を初期化したり他のタスクを実行したりできます。
false この条件は常に false と評価されます。 開発中のブランチの先頭にこれを使用して、そのブランチが使用されないようにしたり、一般的な機能を提供するノードの条件として使用し、そのノードを Jump to アクションのターゲットとしてのみ使用するようにしたりできます。
irrelevant Watson Assistant サービスがユーザー入力を不適当と判断した場合に、この条件は true と評価されます。
true この条件は常に true と評価されます。
ノードまたは応答のリストの最後でこれを使用して、それまでの条件と一致しなかったすべての応答をキャッチできます。
welcome この条件は、アプリケーションからの最初の要求にユーザー入力が含まれていない場合にのみ、ダイアログの最初のターン (ダイアログの開始時) に true と評価されます。 2 ターン目以降では false と評価されます。
この条件により、Welcome ノードがトリガーされます。
一般的に、この条件を持つノードはユーザーへのあいさつ文を表示するために使用します。
このノードは、Facebook や Slack などのチャネルを介して生じる対話の際に処理されることはありません。
アプリケーションへ統合した場合
welcomeノードは実行されずに応答を待つ。
conversation_startノードにすると実行される。