我正在为Alexa开发一个简单的自定义技能。我已经启动并运行,并在AWS Lambda上托管处理程序。除了......之外,它的工作正常。
在测试用户界面中,如果我输入有效的话语,例如帮助,取消,游泳,跑步(两个自定义话语),一切运作良好;但是,如果我输入无意义的话语,例如dsfhfdsjhf,则Alexa服务始终将无意义映射到意图模式中的第一个有效意图。
在我的lambda代码中,我有一个处理未知意图的处理程序;然而,意图永远不会被人知道。这是测试界面的工件吗?还有其他事情发生了吗?
谢谢, 约翰
答案 0 :(得分:2)
根据您的方法中包含未处理的意图,听起来好像您正在使用Alexa Skills Kit SDK for Node.js。您的问题不是测试界面的工件。是的,还有其他事情正在发生。
虽然亚马逊尚未承认,但许多人都认为这是SDK中公认的问题。见this open issue。从个人经验到上述建议,如果你使用真实的话语或胡言乱语并不重要,从未调用未处理的意图。在修复此问题之前,我的建议是构建一个处理程序,它是您技能的高级提示,并为用户重申他们拥有的有效选项。把它定位为全能。希望我们能够更好地维护此SDK。
答案 1 :(得分:0)
而不是输入dsfhfdsjhf(在Alexa知道的任何语言中都不能发音),如果你的话语是布吉或摇晃会怎么样?
在现实世界中,我不认为Alexa会传递dsfhfdsjhf,因此可能很难准确计划行为是什么。
答案 2 :(得分:0)
因此,您希望将所有垃圾输入传递给单个意图。你好运。在继续之前,您应该了解一些事项。
在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语音服务必须解释您的话语并将其映射到其中一个可用的意图。如果您的话语是垃圾并且没有映射到任何特定意图,那么它当前被映射到第一个意图。
解决方案:如果您想添加垃圾意图,这应该由意图架构处理,而不是由未处理的意图处理。要添加垃圾意图,您可以按照此亚马逊文章中的说明进行操作。
https://developer.amazon.com/blogs/post/Tx3IHSFQSUF3RQP/Why-a-Custom-Slot-is-the-Literal-Solution
场景3 :我只想要一切。使用自定义插槽类型 如上所述的语法通常满足这种愿望并且能够实现 您可以通过NLP培训提高准确性。如果你还想要 一切,你可以创建一个类似的自定义插槽 “CatchAll”和相应的意图和话语:CatchAllIntent {}包罗万象。如果您使用的是相同的训练数据 对于LITERAL,你会得到相同的结果。人们通常会发现这一点 添加更多场景特定的训练数据得到改善 精度。
如果您仍未收到结果,请尝试设置CatchAll 大约20到2个单词随机短语(来自一个随机单词) 发电机 - 真的是随机的)。当用户说出某些内容时 与你的其他话语相匹配,这些意图仍将被发送。什么时候 它与任何一个都不匹配,它将落入CatchAll插槽。 如果 你走这条路,你会失去准确性,因为你不是 充分利用Alexa的NLP,你需要进行大量测试。
任何未映射到某个更具体意图的输入(例如YES
或NO
)很可能会映射到此CatchAll
意图。