在 Aws Lex 中 - 我们可以使用 lambda 更改槽值吗?
Posted
技术标签:
【中文标题】在 Aws Lex 中 - 我们可以使用 lambda 更改槽值吗?【英文标题】:In Aws Lex - using lambda can we change the slot values? 【发布时间】:2022-01-21 11:17:59 【问题描述】:例如,意图中存在一个非必需的插槽,我在 Lex 上输入的值是 A,然后我需要将插槽的值更改为 B。
【问题讨论】:
【参考方案1】:可以通过使用您的自定义 Lambda 函数来实现。
我的建议是使用sessionAttributes
来存储修改后的槽值。使用您的 Lambda 函数更改槽的原始值,然后将其保存到 sessionAttributes
。
确保您在 Lambda 函数的响应中正确设置这些 sessionAttributes
。
有关请求和响应格式的完整架构,请参阅开发人员指南。
Lambda Function Input Event and Response Format
如果您想编辑原始值,您也可以这样做。以下是我支持 V1 Lex 机器人的 Python Lambda 函数的 sn-p:
if first_name is not None:
originalValue = event['currentIntent']['slotDetails']['firstName']['originalValue']
originalValue = originalValue.replace("-"," ")
slot_values["firstName"] = originalValue
然后我将修改后的slot_values
包含在对 Lex 的响应中:
'dialogAction':
'type': 'ElicitSlot',
'intentName': ...,
'slots': slot_values,
'slotToElicit': ...,
'message': ...
您可以通过为type
设置正确的值来修改响应以执行所需的对话操作。
【讨论】:
如何更改原始值,我尝试设置如下内容: event["sessionState]["intent"]["slot"] = value 但它不起作用 我已经更新了原始答案以包含一个代码 sn-p,希望能提供更多的清晰度。 我试过之后没有任何改变以上是关于在 Aws Lex 中 - 我们可以使用 lambda 更改槽值吗?的主要内容,如果未能解决你的问题,请参考以下文章