如何在 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

这是一个示例工作区。

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 个实体,则需要在应用层执行此操作。