literal 是一个方法,而不是一个属性。 entities 包含一个 location 字段,您可以在应用程序层以编程方式使用它来解析输入文本。
如果您想在对话中将它们拉出来,您可以使用计数器来遍历实体。
例如:
在您的插槽节点“然后响应”中添加以下上下文位。
"context": {
"counter": "<? entities.size() ?>",
"literals": ""
},
接下来创建三个子节点。
节点1:创建一个虚拟节点,设置条件为真。让它跳转到第二个节点。
节点 2:对于第二个节点,将条件设置为 $counter > 0 并将以下代码添加到 JSON 部分。
"context": {
"counter": "<? $counter - 1 ?>",
"literals": "<? entities[$counter].literal + ',' + $literals ?>"
},
让它跳回节点 1。这样做的原因是对话不允许您跳到同一个节点。
节点 3:让它输出答案。例如:Literal Values: $literals
这是一个示例工作区。
https://pastebin.com/xwgnLq9n
警告
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 个实体,那么您需要在应用程序层执行此操作。