【问题标题】:Enforcing custom enumeration in AWS LEX for slot values在 AWS LEX 中为槽值强制执行自定义枚举
【发布时间】:2017-05-18 19:57:30
【问题描述】:

我希望能够为 LEX 尝试逼近的插槽指定有效选项的自定义列表,或者在无法逼近有效选项的情况下拒绝无效响应。

起初我试图通过自定义插槽类型来做到这一点。尽管他们的例子可能会让你相信这些是枚举,但事实并非如此。用户仍然可以输入他们喜欢的任何值。

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

自定义槽类型不等同于枚举。如果被口语理解系统识别,列表之外的值仍可能返回。尽管自定义槽类型的输入根据列表中的值加权,但它不仅限于列表中的项目。使用槽值时,您的代码仍需要包含验证和错误检查。

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

我是否缺少一些输入槽选项或自定义槽类型的配置选项的方法?有没有办法强制为一个插槽自定义选项列表? (类似于意图的话语,或内置的槽类型,如果没有匹配,它将再次询问相同的问题。)

谢谢!

【问题讨论】:

    标签: amazon-web-services amazon-lex


    【解决方案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 }
            }
        }
    

    【讨论】:

    • 我需要在 lambda 中进行此验证吗?我不能在自己的服务器上做吗?
    猜你喜欢
    • 2017-11-08
    • 2018-10-26
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    相关资源
    最近更新 更多