【发布时间】:2019-10-01 08:06:58
【问题描述】:
我想从一个对话节点跳转到一个其 ID 存储在上下文变量中的节点。
我正在尝试解决一个与题外话有关的问题,此处已对此进行了描述:
Conditionally return from digression in watson assistant
尤其是这张图表将问题可视化:
在我看来,A.H. 提出了一个非常合理且相关的问题,但没有得到可行的答案。
据我所知,题外话设置无法解决问题。根级节点(由匹配意图 #Want_to_speak_to_someone 触发)设置为“离题后返回”,或者不是。
如果此题外话节点的题外话设置设置为“返回”,它将始终返回 - 无论在此题外话的对话流程中进一步向下发生什么。即使用户确认他想和一个人说话(即他不想返回),对话也会返回到离题开始的节点。
当我从“是”节点(用户确认他想与某人交谈)跳到任何其他节点时,甚至会发生这种情况。一旦分支(或用户跳转到的分支)结束,对话框就会返回到离题开始的节点。
如果此离题节点的离题设置设置为“不返回”,则无法返回 - 即使用户决定不与某人交谈并选择返回他所在的位置。
A.H. 和我想要的是,用户可以脱离对话流程,仍然可以决定是否要返回。我认为这是对话的一个非常自然和重要的特征。人们喜欢改变他们的决定,或者他们甚至可能无意中偏离了给定的对话流程。
Akaykay 建议有两个不同的节点——一个允许返回的“是节点”和一个不允许返回的“无节点”。但这不起作用,因为在此之前我必须有另一个节点要求用户确认 - 并且这个“确认节点”必须设置为“返回”或“不返回”(产生上述问题)。
出于这个原因,我试图找出一个解决方法:我将对话离题的对话节点 ID 存储在上下文变量中。
这是一个上下文变量
"context": {
"last_node": "<? output.nodes_visited [0]?>",
...
},
在允许离题的对话流的每个节点中更新。
在示例中,如果用户想要返回,我可以跳回 $last_node,如果用户想要与人交谈,我可以跳转到另一个(固定)节点 - “离题节点”的离题设置会不干扰,可以设置为“不返回”。
然后我尝试在我的技能的 json 文件中编辑相应的节点(从中返回 $last_node):
"next_step": {
"behavior": "jump_to",
"selector": "user_input",
"dialog_node": "$last_node"
},
但是当我再次重新导入技能 json 文件时,我收到以下错误消息:
我可以使用任何一种解决方案——一种使用离题设置,或者一种允许动态设置“跳转到”目标节点。我非常感谢任何帮助 - 谢谢!
【问题讨论】:
标签: ibm-cloud ibm-watson watson-assistant