1

以汽车仪表板为例,我将初始的@genre 节点更改为@genre:classical。我还在上下文中添加了一个列表

"choices":["Beethoven","Mahler 9","Brahms 3rd"]

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

在此处输入图像描述

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

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

4

1 回答 1

0

所以我的问题是,是否有一个条件表达式可以匹配部分用户输入

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

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

例如,您的高级节点可以具有:

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

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

input.text.matches(context.rx)

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

于 2016-09-26T09:50:23.420 回答