我正在尝试在Watson对话的对话节点上使用插槽,但如果你想使用文字数组,这似乎没有用。我有一个实体“@email”,这是一个模式,所以如果我想将用户发送的“真实值”存储在一个上下文变量上,我必须使用.literal
。当我尝试使用@entity.values
存储用户发送的所有值时,麻烦就开始了。实际上是不可能存储一系列文字,我现在卡住了。
有人为此制定了解决方法吗?
答案 0 :(得分:0)
literal
是方法,而不是属性。 entities
包含location
字段,您可以在应用程序层以编程方式使用该字段来解析输入文本。
如果您想在对话中将它们拉出来,您可以使用计数器来浏览实体。
例如:
在您的广告位节点"然后回复"添加以下上下文位。
"context": {
"counter": "<? entities.size() ?>",
"literals": ""
},
接下来创建三个子节点。
节点1 :创建一个虚拟节点,将条件设置为true。让它跳转到第二个节点。
节点2 :对于第二个节点,将条件设置为$counter > 0
并将以下代码添加到JSON部分。
"context": {
"counter": "<? $counter - 1 ?>",
"literals": "<? entities[$counter].literal + ',' + $literals ?>"
},
让它跳回节点1.原因是Conversation不允许你跳转到同一个节点。
节点3 :输出答案。例如:Literal Values: $literals
这是一个示例工作区。
Watson Conversation内置无限循环检测功能。如果一个节点在一个请求中被击中50次,则会抛出以下错误:
Detected recursion when processing the node with id
[node_20_1513835954092]. This node has been already processed [50] times
in this execution step
此时节点将失败,您将不会得到任何结果。因此,如果您期望超过50个实体,那么您需要在应用程序层执行此操作。