以汽车仪表板为例,我将最初的@genre节点改为@genre:classical。我还在上下文中添加了一个列表
"choices":["Beethoven","Mahler 9","Brahms 3rd"]
并且Watson响应为"I have 3 selections"
。下一个节点上的条件是$choices.contains(input.text)
。 "发现了一场比赛"响应只是为了测试。它看起来像这样:
当我在api工具中测试它并输入" Beethoven"两个"找到一个匹配"和#34;很棒的选择!..."出现。对于其他两个选项也是如此,但仅当我键入完全选项时,例如" Mahler 9"。打字"马勒"或者" mahler"没有比赛。我仔细阅读了SpEL文档但无法在单行条件下查看解析列表以寻找部分匹配的方法。
所以我的问题是,是否有一个条件表达式可以匹配部分用户输入,例如" Mahler"?我将使用Java SDK对应用服务器进行编码,所以我想知道是否可以为此序列添加临时@entity而不是使用上下文列表,然后在对话完成后将其删除?或者有没有办法在MessageRequest中构造一个更复杂的条件,Watson会认出它吗?或者这不是正确的方法吗?任何指针,示例或文档都非常赞赏。
答案 0 :(得分:0)
所以我的问题是,是否存在一个与部分用户输入相匹配的条件表达式
您无法添加临时实体或意图。添加它们迫使Watson开始自我训练(即使你可以通过代码)。
但是,您可以创建非常复杂的正则表达式,将它们作为上下文变量传递。
例如,您的高级节点可以具有:
{
"output": {
"text": "Please ask me a question."
},
"context": {
"rx": "fish|[0-9]+"
}
}
然后在你的情况下你会写。
input.text.matches(context.rx)
如果该人提到一个数字或单词fish,则会触发此操作。因此,您可以创建以此方式检查的部分用户输入。