【问题标题】:Alexa Skills Kit (ASK) and UtterancesAlexa 技能工具包 (ASK) 和话语
【发布时间】:2017-03-28 14:51:54
【问题描述】:

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

在测试 UI 中,如果我输入有效的话语,例如帮助、取消、游泳、跑步(两个自定义话语),一切正常;但是,如果我输入一个无意义的话语,例如 dsfhfdsjhf,Alexa 服务总是将无意义的内容映射到意图架构中的第一个有效意图。

在我的 lambda 代码中,我有一个处理未知意图的处理程序;但是,意图永远是未知的。这是测试接口的神器吗?有其他事情发生吗?

谢谢, 约翰

【问题讨论】:

  • 我无法回答这个问题,但我在使用测试 UI 和实际设备时遇到了类似的差异。 +1 提问。我打算带你去 Alexa Skills Kit Dev 论坛,但看起来你也已经在那里发布了这个问题。 :-)
  • 我认为这是测试接口的工件。您是否尝试在您的设备上对此进行测试?
  • @John 你找到解决方案了吗?

标签: alexa-skills-kit alexa-skill


【解决方案1】:

根据您的方法中包含未处理的意图,听起来您正在使用Alexa Skills Kit SDK for Node.js。您的问题不是测试接口的工件。是的,正在发生其他事情。

虽然亚马逊尚未承认,但这是许多人在 SDK 中公认的问题。见this open issue。从个人经验到上面的建议,不管你是用真话还是胡言乱语,未处理的意图永远不会被调用。在解决此问题之前,我的建议是构建一个处理程序,它是您技能的高级提示,并为用户重申他们拥有的有效选项。将其定位为包罗万象。希望我们能看到这个 SDK 得到更好的维护。

【讨论】:

    【解决方案2】:

    不要输入 dsfhfdsjhf(在 Alexa 知道的任何语言中都不能发音),如果你的话语是 boogie 或shake 会发生什么?

    在现实世界的场景中,我认为 Alexa 永远不会通过 dsfhfdsjhf,因此可能很难准确计划行为会是什么。

    【讨论】:

    • 这怎么没用?
    【解决方案3】:

    因此,您希望将所有垃圾输入通过管道传输到单个意图。你很幸运。在继续之前,您应该了解以下几点。

    在 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 语音服务必须解释您的话语并将其映射到可用意图之一。如果您的话语是垃圾并且未映射到任何特定意图,则它当前正在映射到第一个意图。

    解决方案:如果您想添加垃圾 Intent,则应由 Intent 架构处理,而不是由未处理 Intent 处理。要添加垃圾意图,您可以按照这篇亚马​​逊文章中的说明进行操作。

    https://developer.amazon.com/blogs/post/Tx3IHSFQSUF3RQP/Why-a-Custom-Slot-is-the-Literal-Solution

    场景 3:我什么都想要。使用自定义插槽类型 如上所述的语法通常可以满足这种愿望并实现 您可以通过 NLP 训练提高准确性。如果你还只是想要 一切,您可以创建一个自定义插槽,称为 “CatchAll”以及相应的意图和话语:CatchAllIntent {全部捕获}。如果您使用与您将使用的相同的训练数据 对于 LITERAL,您将得到相同的结果。人们通常会发现 添加更多特定场景的训练数据可以提高 准确性。

    如果您仍然没有得到结果,请尝试设置 CatchAll 值大约为 20 个 2 到 8 个单词的随机短语(来自一个随机单词 生成器——真的是随机的)。当用户说了一些 与您的其他话语相匹配,这些意图仍将被发送。什么时候 它与其中任何一个都不匹配,它将落入 CatchAll 插槽。 如果 你走这条路,你会失去准确性,因为你不是 充分利用 Alexa 的 NLP,因此您需要进行大量测试。

    任何未映射到您的更具体意图之一的输入,例如YESNO,很可能会映射到此CatchAll 意图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 2017-04-21
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多