Watson Conversation:条件匹配输入到上下文数组

Watson Conversation: condition matching input to context array

以汽车仪表板为例,我将初始@genre 节点更改为@genre:classical。我还在 contex

中添加了一个列表
"choices":["Beethoven","Mahler 9","Brahms 3rd"]

Watson 的响应是 "I have 3 selections"。下一个节点的条件是$choices.contains(input.text)。 "Found a match" 响应仅用于测试。它看起来像这样:

当我在 api 工具中测试它并键入 "Beethoven" 时,"Found a match" 和 "Great choice!..." 都会出现。其他两个选择也一样,但前提是我键入 exact 选择,例如 "Mahler 9"。输入 "Mahler" 或 "mahler" 没有匹配。我通读了 SpEL 文档,但在单行条件下看不到一种方法来解析列表以查找部分匹配项。

所以我的问题是,是否存在匹配部分用户输入的条件表达式,例如 "Mahler"?我将使用 Java SDK 对应用程序服务器进行编码,所以我想知道是否可以为此序列添加一个临时的 @entity 而不是使用上下文列表,然后在对话完成后将其删除?或者有没有办法在 MessageRequest 中构造更复杂的条件,Watson 会识别它吗?或者这不是解决这个问题的正确方法?非常感谢任何指针、示例或文档。

So my question is, is there an condition expression that would match partial user input

您不能添加临时实体或意图。添加它们会迫使 Watson 开始自我训练(即使您可以通过代码进行训练)。

但是,您可以创建非常复杂的正则表达式,将它们作为上下文变量传入。

例如你的高级节点可以有:

{
  "output": {
    "text": "Please ask me a question."
  },
  "context": {
    "rx": "fish|[0-9]+"
  }
}

然后在你的条件下你会写。

input.text.matches(context.rx)

如果此人提到数字或鱼这个词,就会触发。因此,您可以通过这种方式创建部分用户输入检查。