首页 文章

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

提问于
浏览
7

在使用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 回答

  • 5

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

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

  • 1

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

    当您创建自定义插槽类型时,要理解的关键概念是这是Alexa的NLP(自然语言处理)的训练数据 . 您提供的值不是严格的枚举或数组,限制用户可以说的内容 . 这有两个含义1)不在您的插槽值中的单词和短语将传递给您,2)如果所述内容未知,您的代码需要执行您需要的任何验证 .

    由于您知道该插槽的可接受值,因此请始终对代码执行插槽值验证 . 通过这种方式,当你得到的不是有效的汽车制造商或者你不支持的东西时,你总能礼貌地回复

    “对不起,我不明白,你能再说一遍”

    要么

    “抱歉,我们的列表中没有 . 您能从[列表中提供一些样品]中选择一些东西吗?”

    更多信息here

相关问题