IBM Watson Assistant:如何动态设置 'jump to' 目标节点(即使用上下文变量)
IBM Watson Assistant: How to set a 'jump to' target node dynamically (i.e. using context variables)
我想从对话节点跳转到 ID 存储在上下文变量中的节点。
我正在尝试解决与题外话有关的问题,此处已对其进行了描述:
Conditionally return from digression in watson assistant
特别是这张图表形象化了问题:
在我看来,A.H。提出了一个非常合理和相关的问题,但没有可行的答案。
据我所见,题外话设置无法解决问题。根级节点(通过匹配意图 # Want_to_speak_to_someone 触发)设置为 'return after digression' 或者不是。
如果此离题节点的离题设置设置为 'return',它将始终 return - 无论在此离题的对话流中进一步发生什么。即使用户确认他想与某人交谈(即他不想 return),对话也会 return 到离题开始的节点。
当我从 yes-node(用户确认他想与某个人交谈)跳到任何其他节点时,甚至会发生这种情况。一旦分支(或用户跳转到的分支)结束对话 returns 到离题开始的节点。
如果此离题节点的离题设置设置为 'does not return',则 return 是不可能的 - 即使用户决定不与某人交谈并选择 return到他所在的地方。
什么A.H。我想要的是用户可以从对话流中脱离出来,并且仍然可以决定他是否想要return。我认为这是对话的一个非常自然和重要的特征。人们喜欢改变他们的决定,或者他们甚至可能无意中偏离给定的对话流程。
Akaykay 提议有两个不同的节点 - 允许 returning 的 'yes-node' 和不允许 returning 的 'no-node'。但这不起作用,因为在此之前我必须有另一个节点要求用户确认 - 并且这个 'confirmation-node' 必须设置为 'return' 或 'does not return' (产生问题如上所述)。
出于这个原因,我试图找出一个解决方法:我将对话从中退出的对话节点 ID 存储在上下文变量中。
它是一个上下文变量
"context": {
"last_node": "<? output.nodes_visited [0]?>",
...
},
在允许离题的对话流的每个节点中更新。
在示例中,如果用户想要 return,我可以跳回 $last_node,如果用户想与某个人交谈,我可以跳转到另一个(固定的)节点- 'digression node' 的离题设置不会干扰,可以设置为 'does not return'。
然后我尝试在我技能的 json 文件中编辑相应的节点(从 return 到 $last_node):
"next_step": {
"behavior": "jump_to",
"selector": "user_input",
"dialog_node": "$last_node"
},
但是当我再次重新导入 skill-json-file 时,我收到此错误消息:
我可以接受任何一种解决方案 - 使用离题设置的解决方案或允许动态设置 'jump to' 目标节点的解决方案。我非常感谢任何帮助 - 谢谢!
如果您想阻止 Watson Assistent return 离题,只需在您不希望 Watson Assistant return 离题的节点中调用 <? clearDialogStack() ?>
函数,这就是它。
在您的图表中,您可以在节点 "Ok, click here." 的输出文本中写入 "Ok, click here. <?clearDialogStack()?>"
,这应该可以解决问题。
另请注意,目前无法使用 Watson Assistant 创建动态 goto。您唯一可以做的就是创建一个对话节点,其中包含所有需要的 goto 由其下方的某些内容决定,然后您将转到该节点。很难手动创建,但可以自动生成。要了解 WA
的更多魔力,请查看此项目:
https://github.com/IBM/watson-assistant-workbench
完全不用UI
.
也可以用WA
开发聊天机器人
我想从对话节点跳转到 ID 存储在上下文变量中的节点。
我正在尝试解决与题外话有关的问题,此处已对其进行了描述:
Conditionally return from digression in watson assistant
特别是这张图表形象化了问题:
在我看来,A.H。提出了一个非常合理和相关的问题,但没有可行的答案。
据我所见,题外话设置无法解决问题。根级节点(通过匹配意图 # Want_to_speak_to_someone 触发)设置为 'return after digression' 或者不是。
如果此离题节点的离题设置设置为 'return',它将始终 return - 无论在此离题的对话流中进一步发生什么。即使用户确认他想与某人交谈(即他不想 return),对话也会 return 到离题开始的节点。
当我从 yes-node(用户确认他想与某个人交谈)跳到任何其他节点时,甚至会发生这种情况。一旦分支(或用户跳转到的分支)结束对话 returns 到离题开始的节点。
如果此离题节点的离题设置设置为 'does not return',则 return 是不可能的 - 即使用户决定不与某人交谈并选择 return到他所在的地方。
什么A.H。我想要的是用户可以从对话流中脱离出来,并且仍然可以决定他是否想要return。我认为这是对话的一个非常自然和重要的特征。人们喜欢改变他们的决定,或者他们甚至可能无意中偏离给定的对话流程。
Akaykay 提议有两个不同的节点 - 允许 returning 的 'yes-node' 和不允许 returning 的 'no-node'。但这不起作用,因为在此之前我必须有另一个节点要求用户确认 - 并且这个 'confirmation-node' 必须设置为 'return' 或 'does not return' (产生问题如上所述)。
出于这个原因,我试图找出一个解决方法:我将对话从中退出的对话节点 ID 存储在上下文变量中。
它是一个上下文变量
"context": {
"last_node": "<? output.nodes_visited [0]?>",
...
},
在允许离题的对话流的每个节点中更新。
在示例中,如果用户想要 return,我可以跳回 $last_node,如果用户想与某个人交谈,我可以跳转到另一个(固定的)节点- 'digression node' 的离题设置不会干扰,可以设置为 'does not return'。
然后我尝试在我技能的 json 文件中编辑相应的节点(从 return 到 $last_node):
"next_step": {
"behavior": "jump_to",
"selector": "user_input",
"dialog_node": "$last_node"
},
但是当我再次重新导入 skill-json-file 时,我收到此错误消息:
我可以接受任何一种解决方案 - 使用离题设置的解决方案或允许动态设置 'jump to' 目标节点的解决方案。我非常感谢任何帮助 - 谢谢!
如果您想阻止 Watson Assistent return 离题,只需在您不希望 Watson Assistant return 离题的节点中调用 <? clearDialogStack() ?>
函数,这就是它。
在您的图表中,您可以在节点 "Ok, click here." 的输出文本中写入 "Ok, click here. <?clearDialogStack()?>"
,这应该可以解决问题。
另请注意,目前无法使用 Watson Assistant 创建动态 goto。您唯一可以做的就是创建一个对话节点,其中包含所有需要的 goto 由其下方的某些内容决定,然后您将转到该节点。很难手动创建,但可以自动生成。要了解 WA
的更多魔力,请查看此项目:
https://github.com/IBM/watson-assistant-workbench
完全不用UI
.
WA
开发聊天机器人