如何在 Slot IBM Conversation Service 上使用 @entity.values 存储文字?
How to store literals using @entity.values on Slot IBM Conversation Service?
我正在尝试在 Watson 对话的对话节点上使用插槽,但如果您想使用文字数组,这似乎不太有用。我有一个实体“@email”,它是一个模式,所以如果我想在上下文变量上存储用户发送的 "real value",我必须使用 .literal
。当我尝试使用 @entity.values
来存储用户发送的所有值时,问题就开始了。实际上不可能存储文字数组,我被困在了这一点上。
有人为此开发了解决方法吗?
literal
是方法,不是属性。 entities
包含一个 location
字段,您可以在应用程序层以编程方式使用它来解析输入文本。
如果你想在对话中拉出它们,你可以使用计数器遍历实体。
例如:
在您的插槽节点 "Then respond with" 中添加以下上下文位。
"context": {
"counter": "<? entities.size() ?>",
"literals": ""
},
接下来创建三个子节点。
节点1:创建一个虚拟节点,设置条件为真。让它跳转到第二个节点。
节点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 个实体,则需要在应用层执行此操作。
我正在尝试在 Watson 对话的对话节点上使用插槽,但如果您想使用文字数组,这似乎不太有用。我有一个实体“@email”,它是一个模式,所以如果我想在上下文变量上存储用户发送的 "real value",我必须使用 .literal
。当我尝试使用 @entity.values
来存储用户发送的所有值时,问题就开始了。实际上不可能存储文字数组,我被困在了这一点上。
有人为此开发了解决方法吗?
literal
是方法,不是属性。 entities
包含一个 location
字段,您可以在应用程序层以编程方式使用它来解析输入文本。
如果你想在对话中拉出它们,你可以使用计数器遍历实体。
例如:
在您的插槽节点 "Then respond with" 中添加以下上下文位。
"context": {
"counter": "<? entities.size() ?>",
"literals": ""
},
接下来创建三个子节点。
节点1:创建一个虚拟节点,设置条件为真。让它跳转到第二个节点。
节点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 个实体,则需要在应用层执行此操作。