Alexa Skills Kit(ASK)和Utterances

时间:2016-11-14 20:58:24

标签: alexa-skills-kit alexa-skill

我正在为Alexa开发一个简单的自定义技能。我已经启动并运行,并在AWS Lambda上托管处理程序。除了......之外,它的工作正常。

在测试用户界面中,如果我输入有效的话语,例如帮助,取消,游泳,跑步(两个自定义话语),一切运作良好;但是,如果我输入无意义的话语,例如dsfhfdsjhf,则Alexa服务始终将无意义映射到意图模式中的第一个有效意图。

在我的lambda代码中,我有一个处理未知意图的处理程序;然而,意图永远不会被人知道。这是测试界面的工件吗?还有其他事情发生了吗?

谢谢, 约翰

3 个答案:

答案 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,你需要进行大量测试。

任何未映射到某个更具体意图的输入(例如YESNO)很可能会映射到此CatchAll意图。