将 Lambda 函数从 Amazon Lex V1 迁移到 Amazon Lex V2 - Amazon Lex V1

如果您使用的是 Amazon Lex V2,请改为参阅 Amazon Lex V2 指南

 

如果您使用的是 Amazon Lex V1,我们建议您将机器人升级到 Amazon Lex V2。我们不再向 V1 添加新功能,强烈建议使用 V2 以获得全新的机器人。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 Lambda 函数从 Amazon Lex V1 迁移到 Amazon Lex V2

Amazon Lex V2 只允许机器人中的每种语言使用一个 Lambda 函数。Lambda 函数及其设置是针对您在运行时使用的机器人别名进行配置的。

如果为意图启用了对话和履行代码挂钩,则会为该语言的所有意图调用 Lambda 函数。

Amazon Lex V2 Lambda 函数的输入和输出消息格式与 Amazon Lex V1 不同。下面是 Lambda 函数输入格式的区别。

  • Amazon Lex V2 用 interpretations 结构取代了 currentIntentalternativeIntents 结构。每种解释都包含意图、意图的 NLU 置信度分数和可选的情绪分析。

  • Amazon Lex V2 将 Amazon Lex V1 中的 activeContextssessionAttributes 移至统一的 sessionState 结构。此结构提供有关对话当前状态的相关信息,包括原始请求 ID。

  • Amazon Lex V2 不会返回 recentIntentSummaryView。改用 sessionState 结构中的信息。

  • Amazon Lex V2 输入在 bot 属性中提供了 botIdlocaleId

  • 输入结构包含一个 inputMode 属性,该属性提供有关输入类型的信息:文本、语音或 DTMF。

下面是 Lambda 函数输出格式的区别:

  • Amazon Lex V1 中的 activeContextssessionAttributes 结构被 Amazon Lex V2 中的 sessionState 结构所取代。

  • recentIntentSummaryView 不包括在输出中。

  • Amazon Lex V1 dialogAction 结构分为两个结构,dialogActionsessionState 结构的一部分,messagesdialogAction.typeElicitIntent 时必需的。Amazon Lex 从此结构中选择要向用户显示的消息。

当您使用 Amazon Lex V2 API 构建机器人时,每种语言的每个机器人别名只有一个 Lambda 函数,而不是每个意图都有一个 Lambda 函数。如果要继续使用单独的函数,则可以创建一个路由器函数,为每个意图激活单独的函数。以下是您可以为应用程序使用或修改的路由器函数。

import os import json import boto3 # reuse client connection as global client = boto3.client('lambda') def router(event): intent_name = event['sessionState']['intent']['name'] fn_name = os.environ.get(intent_name) print(f"Intent: {intent_name} -> Lambda: {fn_name}") if (fn_name): # invoke lambda and return result invoke_response = client.invoke(FunctionName=fn_name, Payload = json.dumps(event)) print(invoke_response) payload = json.load(invoke_response['Payload']) return payload raise Exception('No environment variable for intent: ' + intent_name) def lambda_handler(event, context): print(event) response = router(event) return response

已更新的字段列表

下表提供了有关 Amazon Lex V2 Lambda 请求和响应中更新字段的详细信息。您可以使用这些表在版本之间映射字段。

请求

以下字段已经以 Lambda 函数请求格式进行了更新。

活动的上下文

activeContexts 结构现在是 sessionState 结构的一部分。

V1 结构 V2 结构

activeContexts

sessionState.activeContexts

activeContexts[*].timeToLive

sessionState.activeContexts[*].timeToLive

activeContexts[*].timeToLive.timeToLiveInSeconds

sessionState.activeContexts[*].timeToLive.timeToLiveInSeconds

activeContexts[*].timeToLive.turnsToLive

sessionState.activeContexts[*].timeToLive.turnsToLive

activeContexts[*].name

sessionState.activeContexts[*].name

activeContexts[*].parameters

sessionState.activeContexts[*].contextAttributes

替代意图

从索引 1 到 N 的解释列表包含 Amazon Lex V2 预测的替代意图列表及其置信度分数。recentIntentSummaryView 已从 Amazon Lex V2 的请求结构中删除。要从 recentIntentSummaryView 中查看详细信息,请使用 GetSession 操作。

V1 结构 V2 结构

alternativeIntents

interpretations[1:*]

recentIntentSummaryView

不适用

机器人

Amazon Lex V2 中,机器人和别名都有标识符。机器人 ID 是代码挂钩输入的一部分。包含别名 ID,但不包含别名名称。Amazon Lex V2 支持同一个机器人的多个区域设置,因此包含了区域设置 ID。

V1 结构 V2 结构

自动程序

自动程序

bot.name

bot.name

不适用

bot.id

bot.alias

不适用

不适用

bot.aliasId

bot.version

bot.version

不适用

bot.localeId

当前意图

sessionState.intent 结构包含活动意图的详细信息。Amazon Lex V2 还会返回 interpretations 结构中所有意图(包括替代意图)的列表。解释列表中的第一个元素始终与 sessionState.intent 相同。

V1 结构 V2 结构

currentIntent

sessionState.intent 或 interpretations[0].intent

currentIntent.name

sessionState.intent.name 或 interpretations[0].intent.name

currentIntent.nluConfidenceScore

interpretations[0].nluConfidence.score

对话操作

confirmationStatus 字段现在是 sessionState 结构的一部分。

V1 结构 V2 结构

currentIntent.confirmationStatus

sessionState.intent.confirmationState 或 interpretations[0].intent.confirmationState

不适用

sessionState.intent.state 或 interpretations[*].intent.state

Amazon Kendra

kendraResponse 字段现在是 sessionStateinterpretations 结构的一部分。

V1 结构 V2 结构

kendraResponse

sessionState.intent.kendraResponse 或 interpretations[0].intent.kendraResponse

情绪

sentimentResponse 结构已移至新 interpretations 结构。

V1 结构 V2 结构

sentimentResponse

interpretations[0].sentimentResponse

sentimentResponse.sentimentLabel

interpretations[0].sentimentResponse.sentiment

sentimentResponse.sentimentScore

interpretations[0].sentimentResponse.sentimentScore

Slots

Amazon Lex V2 在 sessionState.intent 结构中提供了一个 slots 对象,其中包含用户所说内容的解析值、解释值和原始值。Amazon Lex V2 还通过将 slotShape 设置为 List 和设置 values 列表来支持多值插槽。value 字段支持单值插槽,假设它们的形状为 Scalar

V1 结构 V2 结构

currentIntent.slots

sessionState.intent.slots 或 interpretations[0].intent.slots

currentIntent.slots[*].value

sessionState.intent.slots[*].value.interpretedValue 或 interpretations[0].intent.slots[*].value.interpretedValue

不适用

sessionState.intent.slots[*].value.shape 或 interpretations[0].intent.slots[*].shape

不适用

sessionState.intent.slots[*].values 或 interpretations[0].intent.slots[*].values

currentIntent.slotDetails

sessionState.intent.slots 或 interpretations[0].intent.slots

currentIntent.slotDetails[*].resolutions

sessionState.intent.slots[*].resolvedValues 或 interpretations[0].intent.slots[*].resolvedValues

currentIntent.slotDetails[*].originalValue

sessionState.intent.slots[*].originalValue 或 interpretations[0].intent.slots[*].originalValue

其他

Amazon Lex V2 sessionId 字段与 Amazon Lex V1 中的 userId 字段相同。Amazon Lex V2 还会发送呼叫方的 inputMode:文本、DTMF 或语音。

V1 结构 V2 结构

userId

sessionId

inputTranscript

inputTranscript

invocationSource

invocationSource

outputDialogMode

responseContentType

messageVersion

messageVersion

sessionAttributes

sessionState.sessionAttributes

requestAttributes

requestAttributes

不适用

inputMode

不适用

originatingRequestId

响应

以下字段已经以 Lambda 函数响应消息格式进行了更新。

活动的上下文

activeContexts 结构已移至 sessionState 结构。

V1 结构 V2 结构

activeContexts

sessionState.activeContexts

activeContexts[*].timeToLive

sessionState.activeContexts[*].timeToLive

activeContexts[*].timeToLive.timeToLiveInSeconds

sessionState.activeContexts[*].timeToLive.timeToLiveInSeconds

activeContexts[*].timeToLive.turnsToLive

sessionState.activeContexts[*].timeToLive.turnsToLive

activeContexts[*].name

sessionState.activeContexts[*].name

activeContexts[*].parameters

sessionState.activeContexts[*].contextAttributes

对话操作

dialogAction 结构已移至 sessionState 结构。现在,您可以在对话框操作中指定多条消息,genericAttachments 结构现在是 imageResponseCard 结构。

V1 结构 V2 结构

dialogAction

sessionState.dialogAction

dialogAction.type

sessionState.dialogAction.type

dialogAction.slotToElicit

sessionState.intent.dialogAction.slotToElicit

dialogAction.type.fulfillmentState

sessionState.intent.state

dialogAction.message

messages

dialogAction.message.contentType

messages[*].contentType

dialogAction.message.content

messages[*].content

dialogAction.responseCard

messages[*].imageResponseCard

dialogAction.responseCard.version

不适用

dialogAction.responseCard.contentType

messages[*].contentType

dialogAction.responseCard.genericAttachments

不适用

dialogAction.responseCard.genericAttachments[*].title

messages[*].imageResponseCard.title

dialogAction.responseCard.genericAttachments[*].subTitle

messages[*].imageResponseCard.subtitle

dialogAction.responseCard.genericAttachments[*].imageUrl

messages[*].imageResponseCard.imageUrl

dialogAction.responseCard.genericAttachments[*].buttons

messages[*].imageResponseCard.buttons

dialogAction.responseCard.genericAttachments[*].buttons[*].value

messages[*].imageResponseCard.buttons[*].value

dialogAction.responseCard.genericAttachments[*].buttons[*].text

messages[*].imageResponseCard.buttons[*].text

dialogAction.kendraQueryRequestPayload

dialogAction.kendraQueryRequestPayload

dialogAction.kendraQueryFilterString

dialogAction.kendraQueryFilterString

意图和插槽

作为 dialogAction 结构一部分的意图和插槽字段现在已成为 sessionState 结构的一部分。

V1 结构 V2 结构

dialogAction.intentName

sessionState.intent.name

dialogAction.slots

sessionState.intent.slots

dialogAction.slots[*].key

sessionState.intent.slots[*].key

dialogAction.slots[*].value

sessionState.intent.slots[*].value.interpretedValue

不适用

sessionState.intent.slots[*].value.shape

不适用

sessionState.intent.slots[*].values

其他

sessionAttributes 结构现在是 sessionState 结构的一部分。recentIntentSummaryReview 结构已删除。

V1 结构 V2 结构

sessionAttributes

sessionState.sessionAttributes

recentIntentSummaryView

不适用