如何在Slot IBM Conversation Service上使用@ entity.values存储文字?

时间:2017-12-20 22:06:24

标签: arrays watson watson-conversation slot

我正在尝试在Watson对话的对话节点上使用插槽,但如果你想使用文字数组,这似乎没有用。我有一个实体“@email”,这是一个模式,所以如果我想将用户发送的“真实值”存储在一个上下文变量上,我必须使用.literal。当我尝试使用@entity.values存储用户发送的所有值时,麻烦就开始了。实际上是不可能存储一系列文字,我现在卡住了。

有人为此制定了解决方法吗?

1 个答案:

答案 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

这是一个示例工作区。

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