我的自定义插槽类型出现意外值
Posted
技术标签:
【中文标题】我的自定义插槽类型出现意外值【英文标题】:My custom slot type is taking on unexpected values 【发布时间】:2017-02-18 04:49:49 【问题描述】:在使用 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 上的文档非常清楚地表明槽只能采用交互模型中列出的值。
现在,似乎值也是动态解析的!这是一项新功能,还是我遗漏了什么?
【问题讨论】:
我注意到用户@samiles 在回答这个问题时分享了我的观察:***.com/a/34078869/1375015 【参考方案1】:实际上这是正常的(而且很好,IMO)。 Alexa 使用您提供的单词列表作为指南,而不是最终列表。
如果它没有这种灵活性,那么就无法知道用户是否使用了您没有预料到的单词。通过这种方式,您可以学习和改进您的列表和处理方式。
【讨论】:
【参考方案2】:Alexa 将提供的槽值视为 'Samples'。因此,交互模型中未提及的槽值也将被映射。
当您创建自定义插槽类型时,需要理解的一个关键概念是 这是 Alexa 的 NLP(自然语言)的训练数据 加工)。您提供的值不是严格的枚举或数组 这限制了用户可以说的内容。这有两个含义
1) 不在您的槽值中的单词和短语将传递给您,
2) 您的代码需要执行您需要的任何验证,如果是 说是未知数。
由于您知道该槽的可接受值,因此请始终对您的代码执行槽值验证。这样,当你得到不是合法的汽车制造商或你不支持的东西时,你总是可以礼貌地回应像
“对不起,我没听懂,你能重复一遍”
或
“抱歉,我们的列表中没有。请您帮忙 从[从您的列表中提供一些样本]中选择一些东西”
更多信息here
【讨论】:
以上是关于我的自定义插槽类型出现意外值的主要内容,如果未能解决你的问题,请参考以下文章