我的自定义插槽类型具有意外值

时间:2016-10-09 18:08:41

标签: alexa alexa-skills-kit alexa-skill alexa-slot

在使用Alexa技能套件测试我的交互模型时,我注意到了一些奇怪的事情。

我定义了一个自定义插槽类型,如下所示:

CAR_MAKERS Mercedes | BMW | Volkswagen

我的意图方案如下:

{
  "intents": [
    {
      "intent": "CountCarsIntent",
      "slots": [
        {
          "name": "CarMaker",
          "type": "CAR_MAKERS"
        },
   ...

带有样本话语,例如:

CountCarsIntent Add {Amount} cars to {CarMaker}

现在,在开发者控制台中进行测试时,我注意到我可以编写类似的内容:

"Add three cars to Ford"

它实际上会解析这个!即使"福特"从未在交互模型中提到过! lambda请求是:

  "request": {
    "type": "IntentRequest",
    ...
    "intent": {
      "name": "CountCarsIntent",
      "slots": {
        "CarMaker": {
          "name": "ExpenseCategory",
          "value": "whatever"
        },
 ...

这真让我感到惊讶,因为custom slot types上的文档非常清楚插槽只能采用交互模型中列出的值。

现在,似乎值也是动态解析的!这是一个新功能,还是我错过了什么?

2 个答案:

答案 0 :(得分:6)

实际上这是正常的(而且很好,IMO)。 Alexa使用您提供的单词列表作为指南,而不是明确的列表。

如果它没有这种灵活性,那么就无法知道用户是否使用了你并不期望的单词。这样您就可以学习并改进列表和处理。

答案 1 :(得分:1)

Alexa将提供的广告位值视为“样本” 。因此,交互模型中未提及的广告位值也将被映射。

  

创建自定义广告位类型时,需要了解的关键概念是   这是Alexa NLP(自然语言)的训练数据   处理中)。您提供的值不是严格的枚举或数组   限制了用户可以说的话。这有两个含义

     

1)不在您的广告位值中的单词和短语会被传递给您,

     

2)您的代码需要执行所需的任何验证(如果有的话)   说不明。

由于您知道该插槽的可接受值,因此请始终对代码执行插槽值验证。这样,当您得到有效汽车制造商以外的其他东西或您不支持的东西时,您总是可以礼貌地回覆,例如

  

“对不起,我听不懂,您能再说一次吗”

  

“抱歉,我们没有列出我们。您能不能   从[从列表中选择一些样品]中选择一些东西。“

更多信息here