因此,您希望将所有垃圾输入通过管道传输到单个意图。你很幸运。在继续之前,您应该了解以下几点。
在 Node.js 中,MODE
如果 Alexa 语音服务返回的意图在给定的MODE
.
一个例子MODE
是确认模式。在许多可用的意图中,是和否是唯一被接受的意图。
var ConfirmationHandlers = Alexa.CreateStateHandler(states.CONFIRMATIONMODE, {
'YesIntent': function () {
this.handler.state = states.CLOSINGCOSTSMODE;
message = ` So you will be buying this house. Great! `;
reprompt = `Please carry on with the other intents found in the house buyer skill. `;
this.emit(':ask', message, reprompt);
},
'NoIntent': function () {
this.handler.state = states.GENERALSEARCHMODE;
message = ` So you won't be buying this house. That's Ok, Continue searching for your dream house in the House buyer skill. !`;
reprompt = `Continue searching for your dream house in the House buyer skill.`;
this.emit(':ask', message, reprompt);
},
'Unhandled': function() {
console.log("UNHANDLED");
var reprompt = ` All other intents are disabled at this moment. Would you like to buy this house Yes or No? `;
this.emit(':ask', reprompt, reprompt);
}
});
但是,在到达 lambda 函数之前,Alexa 语音服务必须解释您的话语并将其映射到可用的意图之一。如果您的话语是垃圾并且未映射到任何特定意图,则它当前正在映射到第一个意图。
解决方案:如果你想添加一个垃圾意图,这应该由意图模式而不是未处理的意图来处理。要添加垃圾意图,您可以按照这篇亚马逊文章中的说明进行操作。
https://developer.amazon.com/blogs/post/Tx3IHSFQSUF3RQP/Why-a-Custom-Slot-is-the-Literal-Solution
场景3:我什么都想要。如上所述为语法使用自定义槽类型通常可以满足这一需求,并使您能够通过 NLP 训练提高准确性。如果您仍然只想要所有内容,您可以创建一个名为“CatchAll”之类的自定义插槽以及相应的意图和话语:CatchAllIntent {CatchAll}。如果您使用与 LITERAL 相同的训练数据,您将获得相同的结果。人们通常会发现添加更多特定场景的训练数据可以提高准确性。
如果您仍然没有得到结果,请尝试将 CatchAll 值设置为大约 20 个 2 到 8 个单词的随机短语(来自随机单词生成器 - 非常随机)。当用户说出与您的其他话语相匹配的内容时,仍会发送这些意图。当它与其中任何一个都不匹配时,它将落入 CatchAll 插槽。如果你走这条路,你会失去准确性,因为你没有充分利用 Alexa 的 NLP,所以你需要大量测试。
任何未映射到您的更具体意图之一的输入,例如YES
or NO
,很可能会映射到此CatchAll
意图。