我正在为Alexa开发一个简单的自定义技能。我已经将其启动并运行,并在AWS Lambda上托管处理程序。它工作得很好除了..。
在测试UI中,如果我输入一个有效的语句,例如help,cancel,swim,run (两个自定义语句),一切正常;但是,如果我输入一个无意义的语句,例如dsfhfdsjhf,Alexa服务总是将无意义映射到意图模式中的第一个有效意图。
在我的lambda代码中,我有一个处理未知意图的处理程序;然而,意图永远不是未知的。这是测试界面的工件吗?还发生了什么吗?
谢谢,约翰
发布于 2017-01-22 14:15:57
根据您的方法中包含了一个未处理的意图,看起来您正在使用Alexa Skills Kit SDK for Node.js。您的问题不是测试接口的工件。是的,有些事情正在发生。
虽然亚马逊还没有承认这一点,但这是SDK中许多人都认识到的问题。参见this open issue。从个人经验上讲,对于上面的建议,无论你是使用真实的单词还是胡言乱语,都不会调用未经处理的意图。在这个问题解决之前,我的建议是构建一个处理程序,它是对您技能的高级提示,并向用户重申他们拥有的有效选项。将其定位为包罗万象。希望我们能看到这个SDK得到更好的维护。
发布于 2017-01-18 22:26:27
而不是输入dsfhfdsjhf (在Alexa知道的任何语言中都不能发音),如果你的发音是boogie或shake会发生什么?
在现实世界的场景中,我认为Alexa永远不会通过dsfhfdsjhf,所以可能很难准确地计划行为。
发布于 2017-08-06 15:17:32
因此,您希望通过管道将所有垃圾输入传递到一个意图。你真走运。在继续之前,有几件事你应该知道。
在Node.js中,如果Alexa语音服务返回的意图在给定的MODE中不可用,则在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语音服务必须解释您的话语,并将其映射到可用意图之一。如果你的话语是垃圾,并且没有映射到任何特定的意图,那么它当前正被映射到第一个意图。
解决方案:如果您想添加垃圾意图,这应该由意图模式处理,而不是由未处理的意图处理。要添加垃圾意图,可以按照这篇amazon文章中的说明进行操作。
https://developer.amazon.com/blogs/post/Tx3IHSFQSUF3RQP/Why-a-Custom-Slot-is-the-Literal-Solution
Scenario 3:我只想要一切。如上所述,使用语法的自定义槽类型通常可以满足这一需求,并使您能够通过NLP训练来提高准确性。如果你仍然只想要所有的东西,你可以创建一个自定义的槽,叫做“CatchAll”,以及相应的意图和话语: CatchAllIntent {CatchAll}。如果您使用与文字相同的训练数据,您将获得相同的结果。人们通常会发现,添加更多特定于场景的训练数据可以提高准确性。
如果你仍然没有得到结果,试着将CatchAll的值设置为大约20个2到8个单词的随机短语(来自随机单词生成器-真的是随机的)。当用户说了一些与你的其他话语相匹配的东西时,这些意图仍然会被发送。如果你走这条路,你会失去准确性,因为你没有充分利用Alexa的优势,所以你需要进行大量的测试。
任何没有映射到您更具体的意图的输入,如YES或NO,都很可能映射到这个CatchAll意图。
https://stackoverflow.com/questions/40597707
复制相似问题