在Watson Assistant中重用实体会自动填充上下文变量

时间:2018-07-20 17:48:04

标签: ibm-watson watson-conversation watson-dialog

据我所知,应该在不同的广告位之间重复使用实体,以优化您可能希望接受类似数据类型(即两个单独的广告位)的用户输入信息这一事实。您的家庭收入是多少”,“配偶的家庭收入是多少”都将使用 @ sys-currency 实体。

在我当前的对话框流中,我有两个子节点,每个节点都有一个用于检查 sys-currency 实体类型的插槽。我正在使用两个不同的上下文变量来设置广告位。

问题是,在用户输入第一个子节点的答案(“家庭收入”)之后,随后也为下一个子节点设置了上下文变量。它们具有相同的实体,但是上下文变量不同。据我了解,这不会正在发生。我可以确认该节点已处理,但是它会立即跳过提示,就好像它已经被填充并在节点中传递响应一样。

First node Second node

3 个答案:

答案 0 :(得分:0)

您告诉它跳到下一个插槽并寻找该实体。用户没有机会输入任何东西,因为他们的最后一条消息包含该实体。您应该尝试跳至并等待用户输入

答案 1 :(得分:0)

如果一个节点跳至另一节点,则会发生这种情况。原因是因为将针对流中的所有节点对在用户输入上找到的意图和实体进行评估,直到新的“等待用户输入”为止,在那里将对其进行更改。

在那种情况下,我通常会创建一个新实体,该实体的值永远都不会被找到(例如389jd8239d892d8h89hf32hdsa8hdj3),以将每个输入强制插入插槽的未找到节点,在此我使用了必要的实体情况将是@ sys-currency。这样,即使用户在先前的输入中键入了有效的货币,问题也会消失。对我来说,在处理使用大量@ sys-numbers / @ sys-currency / @ sys-date的流时非常有用,并且没有太多文本可用于区分值。

另一个选择是删除插槽并使用单个节点,并使用自己的流程来获取答案。我个人更喜欢使用插槽,因为很容易处理多种可能性。我什至会把两个问题都放在同一个节点上,只是使用条件检查是否应该评估插槽。

我一直在寻找一种方法来清除从上一个节点的输入中识别出的意图/实体,但是没有成功。

答案 2 :(得分:0)

所以...我知道这已经迟了一年零三个月了,但是如果其他人遇到这个问题,我会提供答案。

根本原因是“离婚-家庭收入”节点将input.text设置为@ sys-currency实体匹配的值,因此您跳转到基于@ sys-currency进行匹配的任何节点将自动具有其上下文变量设置为input.text而不提示用户。

不幸的是,我还没有看到IBM的任何文档,允许您将input.text设置为null。

要解决此问题,您需要用户提供其他与@ sys-currency不匹配的值。

值得庆幸的是,该解决方案易于实现,用户实际上可能更喜欢您遵循我的以下概述。

只需将“离婚-家庭收入”节点跳转到一个要求他们确认其输入的节点。诸如“是”和“否”之类的选项非常完美,因为它们会将input.text分别设置为“是”或“否”。

最后,跳至“离婚-配偶收入”节点。由于@ sys-currency与用户的input.text不匹配,因此节点将正确提示用户填充$ spouse_annual_income插槽。