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

时间:2016-09-25 22:15:00

标签: watson-conversation

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

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

并且Watson响应为"I have 3 selections"。下一个节点上的条件是$choices.contains(input.text)。 "发现了一场比赛"响应只是为了测试。它看起来像这样:

enter image description here

当我在api工具中测试它并输入" Beethoven"两个"找到一个匹配"和#34;很棒的选择!..."出现。对于其他两个选项也是如此,但仅当我键入完全选项时,例如" Mahler 9"。打字"马勒"或者" mahler"没有比赛。我仔细阅读了SpEL文档但无法在单行条件下查看解析列表以寻找部分匹配的方法。

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

1 个答案:

答案 0 :(得分:0)

  

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

您无法添加临时实体或意图。添加它们迫使Watson开始自我训练(即使你可以通过代码)。

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

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

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

然后在你的情况下你会写。

input.text.matches(context.rx)

如果该人提到一个数字或单词fish,则会触发此操作。因此,您可以创建以此方式检查的部分用户输入。