Arrays 如何在IBM对话服务上使用@entity.values存储文本?

Arrays 如何在IBM对话服务上使用@entity.values存储文本?,arrays,watson,watson-conversation,slot,Arrays,Watson,Watson Conversation,Slot,我试图在Watson对话中使用对话节点上的插槽,但如果您想使用文字数组,这似乎没有什么用处。我有一个实体“@email”,它是一种模式,因此如果我想在上下文变量上存储用户发送的“真实值”,我必须使用.literal。当我尝试使用@entity.values存储用户发送的所有值时,问题就开始了。实际上,不可能存储一个文本数组,我被困在这一点上 有人为此开发了解决方法吗?文本是一种方法,而不是属性。实体包含一个位置字段,您可以通过编程在应用程序层使用该字段来解析输入文本 如果你想在对话中把它们拉出来

我试图在Watson对话中使用对话节点上的插槽,但如果您想使用文字数组,这似乎没有什么用处。我有一个实体“@email”,它是一种模式,因此如果我想在上下文变量上存储用户发送的“真实值”,我必须使用
.literal
。当我尝试使用
@entity.values
存储用户发送的所有值时,问题就开始了。实际上,不可能存储一个文本数组,我被困在这一点上


有人为此开发了解决方法吗?

文本是一种方法,而不是属性。
实体
包含一个
位置
字段,您可以通过编程在应用程序层使用该字段来解析输入文本

如果你想在对话中把它们拉出来,你可以用一个计数器遍历实体

例如:

在插槽节点“然后用”中添加以下上下文位

  "context": {
    "counter": "<? entities.size() ?>",
    "literals": ""
  },
让它跳回节点1。原因是会话将不允许您跳转到同一节点

节点3:让它输出答案。例如:
Literal值:$literals

这里是一个示例工作区

警告 Watson对话有一个内置的无止境循环检测。如果一个节点在一个请求中被命中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个实体,那么您需要在应用程序层执行此操作

非常感谢你@大卫:不用担心。如果这解决了您的问题,请不要忘记标记已回答的问题。答案允许我创建一些接近desiderata的内容。下一个要解决的问题是:我有一个节点,它有两个插槽,可以存储X和Y(实体)。您的解决方案完全适用于Y,因为用户可以指定Y的数组。当用户键入第一个输入为“blabla Y Y”所以Watson必须同时填充第二个槽X并要求用户输入X。然后用户输入X,最后流可以继续使用虚拟节点从Y中提取文字-但此时实体Y并不更有效!解决方案是强制用户先输入X,然后输入Y或同时输入X和Y。
Detected recursion when processing the node with id
[node_20_1513835954092]. This node has been already processed [50] times
in this execution step