在AWS LEX中为插槽值实施自定义枚举

时间:2017-05-18 19:57:31

标签: amazon-web-services amazon-lex

我希望能够为LEX将尝试近似的插槽指定有效选项的自定义列表,或者,如果无法近似有效选项,则拒绝无效响应。

首先,我尝试通过自定义插槽类型执行此操作。虽然他们的例子可能会让你相信这些是枚举,但事实并非如此。用户仍然可以输入他们喜欢的任何值。

他们的文档可以这样说:https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/migrating-to-the-improved-built-in-and-custom-slot-types#literal

  

自定义插槽类型不等同于枚举。如果口语理解系统识别,则仍可返回列表外的值。虽然对自定义插槽类型的输入是对列表中的值进行加权,但它不仅限于列表中的项目。在使用插槽值时,您的代码仍需要包含验证和错误检查。

我知道我可以在完成完整提交后通过lambda 验证他们的提交,但到那时为时已晚。用户已提交完整的意图消息。我无法在中途抓住它并纠正它们。

我是否错过了某种方式来输入插槽选项或自定义插槽类型的配置选项?有没有办法强制一个插槽的自定义选项列表? (类似于意图的话语,或内置的插槽类型,如果没有匹配则会再次提出相同的问题。)

谢谢!

1 个答案:

答案 0 :(得分:1)

  

我无法在中途抓住它并纠正它们。

您可以在不满足意图并重新开始的情况下捕获lambda中的错误。这是我用Python验证输入的方法。

如果在lambda中检测到验证错误,则可以引出相同的插槽并传递错误消息。这允许您设置复杂的验证规则,并让您的机器人返回对用户的特定响应。

   def validate(input):
       if input not in ['foo', 'bar']:
           return elicit_slot("Your response must be foo or bar")



   def elicit_slot(error_message):
        return {
            'dialogAction': {
                'type': 'ElicitSlot',
                'intentName': current_intent,
                'slots': current_slots,
                'slotToElicit': slot_with_validation_error,
                'message': {'contentType': 'PlainText', 'content': error_message }
        }
    }