我的自定义插槽类型出现意外值

My custom slot type is taking on unexpected values

我在使用 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"

它实际上会正确解析这个!即使 "Ford" 在交互模型中从未被提及! lambda 请求是:

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

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

现在看来值也是动态解析的!这是一项新功能,还是我遗漏了什么?

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

如果它没有这种灵活性,那么就无法知道用户是否使用了您不希望使用的词。通过这种方式,您可以学习和改进您的清单和处理方式。

Alexa 将提供的插槽值视为 'Samples'。因此,交互模型中未提及的槽值也将被映射。

When you create a custom slot type, a key concept to understand is that this is training data for Alexa’s NLP (natural language processing). The values you provide are NOT a strict enum or array that limit what the user can say. This has two implications

1) words and phrases not in your slot values will be passed to you,

2) your code needs to perform any validation you require if what’s said is unknown.

既然您知道该插槽的可接受值,请始终对您的代码执行插槽值验证。通过这种方式,当您收到不是有效汽车制造商或您不支持的东西时,您可以随时礼貌地回复

"Sorry I didn't understand, can you repeat"

"Sorry we dont have in our list. can you please select something from [give some samples from your list]"

更多信息here