在我们的机器人中,我们有几个意图。在其中一个意图中,我们有以下示例话语:
I {injuryType} my {bodyPart}
所以它匹配诸如I broke my leg
.
然后,在另一个意图中,我们有一个用于bodyPart
以下示例话语的槽:
I broke my {bodyPart}
我们遇到的问题是,当用户收到提示时bodyPart
,他说I broke my leg
,而不是仅仅填充插槽,而是切换到另一个意图。
有没有办法表明槽话语应该优先于意图话语?
在我们的机器人中,我们有几个意图。在其中一个意图中,我们有以下示例话语:
I {injuryType} my {bodyPart}
所以它匹配诸如I broke my leg
.
然后,在另一个意图中,我们有一个用于bodyPart
以下示例话语的槽:
I broke my {bodyPart}
我们遇到的问题是,当用户收到提示时bodyPart
,他说I broke my leg
,而不是仅仅填充插槽,而是切换到另一个意图。
有没有办法表明槽话语应该优先于意图话语?
不幸的是,我们没有办法显式地强制 Lex 保持在槽值匹配范围内,而不是尝试在意图级别进行匹配。
根据我对这个问题的经验(它经常发生,所以这是一个持续的平衡行为),当你在一个意图中时,槽值确实优先于意图话语。使用良好的机器人结构(“意图模式”),意图话语似乎只有在槽值未找到完美匹配时才会被检查。但是,Lex可能每次都检查两者并简单地提供最佳匹配,在您的情况下,这将是意图表达,因为变量少了一个。
我们实际上只有一种控制方式,即我们如何设置意图、话语、slotTypes 和 slotType 值。
以下是一些建议:
我用#3 最不成功,用#1 和#2 最成功。
就像我说的,考虑到意图的结构、不同意图中可能的 slotType 值、输入匹配的任何重叠以及自然语言用户体验,这是一个不断平衡的行为。你将不得不牺牲一个人的一些自由/结构来给另一个人更多的自由/结构。