IBM Watson Assistant:如何动态设置“跳转到”目标节点(即使用上下文变量)

时间:2019-05-14 10:12:03

标签: ibm-cloud ibm-watson watson-assistant

我想从对话框节点跳转到其ID存储在上下文变量中的节点。

我正在尝试解决与题外话有关的问题,此处已对此进行了描述:

Conditionally return from digression in watson assistant

尤其是此图表将问题可视化:

我认为A.H.提出了一个非常合理和相关的问题,没有可行的答案。

据我所知,题外话设置无法解决问题。将根级别节点(通过匹配意图#Want_to_speak_to_someone触发)设置为“离题后返回”。

如果此题外话节点的题外话设置设置为“ return”,则它将始终返回-不管该题外话对话框中进一步发生的情况如何。即使用户确认他想与某人讲话(即他不想返回),该对话框也将返回到题外话的结点。

当我从yes节点(用户确认他想和某人讲话)跳到其他任何节点时,甚至会发生这种情况。分支(或用户跳转到的分支)一结束,对话框就会返回到题外话的节点。

但是,如果将此离题节点的离题设置设置为“不返回”,则即使用户决定不与某人讲话并选择返回原处,也无法返回。

我想要的A.H.是用户可以脱离对话流程,并且仍然可以决定是否要返回。我认为这是对话框非常自然且重要的功能。人们喜欢推翻他们的决定,或者他们甚至无意中偏离了给定的对话流程。

Akaykay建议有两个不同的节点-一个允许返回的“ yes-node”节点和一个不允许返回的“ no-node”节点。但这是行不通的,因为在此之前,我必须先有另一个节点要求用户进行确认-并且此“确认节点”必须设置为“返回”或“不返回”(解决上述问题) )。

由于这个原因,我试图找出一种解决方法:我将对话框从中导出的对话框节点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"
      },

但是当我再次重新导入skill-json-file时,我收到此错误消息:

Error - we could not import your skill. Can only contain word, underscore, space, ...

无论哪种解决方案都可以-一种使用离题设置的解决方案,或者一种允许动态设置“跳转到”目标节点的解决方案。我非常感谢您的帮助-谢谢!

1 个答案:

答案 0 :(得分:1)

如果要阻止Watson Assistent从题外话返回,只需在您不希望Watson Assistant从题外归来的节点中调用<? clearDialogStack() ?>函数即可。

在图表中,您将在节点“确定,单击此处”的输出文本中写入"Ok, click here. <?clearDialogStack()?>"。这应该可以解决问题。

此处在本节的文档中:https://cloud.ibm.com/docs/services/assistant?topic=assistant-dialog-runtime#dialog-runtime-digressions

还请注意,当前无法使用Watson Assistant创建动态gotos。唯一可以做的就是创建一个对话框节点,其中所有必需的gotos受其下面的条件限制,然后转到该节点。手动创建很难,但是可以自动生成。有关WA的更多信息,请查看以下项目:

https://github.com/IBM/watson-assistant-workbench

完全可以在没有WA的情况下使用UI开发聊天机器人。