Amazon Lex V1에서 Amazon Lex V2로 Lambda 함수 마이그레이션 - Amazon Lex V1

Amazon Lex V2를 사용하는 경우 Amazon Lex V2 가이드를 대신 참조하십시오.

 

Amazon Lex V1을 사용하는 경우 봇을 Amazon Lex V2로 업그레이드하는하는 것이 좋습니다. 더 이상 V1에 새로운 기능을 추가하지 않으므로 모든 새 봇에 V2를 사용할 것을 강력히 권장합니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Lex V1에서 Amazon Lex V2로 Lambda 함수 마이그레이션

Amazon Lex V2는 봇의 각 언어에 대해 하나의 Lambda 함수 만 허용합니다. Lambda 함수 및 해당 설정은 런타임 시 사용하는 봇 별칭에 맞게 구성됩니다.

Lambda 함수는 해당 의도에 대해 대화상자 및 이행 코드 후크가 활성화된 경우 해당 언어의 모든 의도에 대해 호출됩니다.

Amazon Lex V2 Lambda 함수는 Amazon Lex V1과 다른 입력 및 출력 메시지 형식을 사용합니다. Lambda 함수 입력 형식의 차이는 다음과 같습니다.

  • Amazon Lex V2는 currentIntentalternativeIntents 구조를 interpretations 구조로 대체합니다. 각 해석에는 의도, 해당 의도에 대한 NLU 신뢰도 점수 및 선택적 센티멘트 분석이 포함됩니다.

  • Amazon Lex V2는 아마존 Lex V1의 activeContexts, sessionAttributes의 기능을 통합 sessionState 구조로 이전합니다. 이 구조는 시작 요청 ID를 포함하여 대화의 현재 상태에 대한 정보를 제공합니다.

  • Amazon Lex V2는 recentIntentSummaryView을 반환하지 않습니다. 대신 sessionState 구조체의 정보를 사용합니다.

  • Amazon Lex V2 입력은 bot 속성 내의 botIdlocaleId를 제공합니다.

  • 입력 구조에는 입력 유형(텍스트, 음성 또는 DTMF)에 대한 정보를 제공하는 inputMode 속성이 포함되어 있습니다.

Lambda 함수 입력 형식의 차이는 다음과 같습니다.

  • Amazon Lex V1의 activeContextssessionAttributes 구조는 아마존 Lex V2의 sessionState 구조로 대체되었습니다.

  • recentIntentSummaryView은 출력에 포함되지 않습니다.

  • Amazon Lex V1 dialogAction 구조는 두 개의 구조로 나뉘는데, dialogAction 구조는 sessionState 구조의 일부이며, 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에서 예측한 대체 의도 목록과 해당 신뢰도 점수가 포함되어 있습니다. Amazon Lex V2의 요청 구조에서 recentIntentSummaryView가 제거되었습니다. recentIntentSummaryView에서 세부 정보를 보려면 GetSession 작업을 사용하십시오.

V1 구조 V2 구조

alternativeIntents

interpretations[1:*]

recentIntentSummaryView

N/A

Amazon Lex V2에서는 봇과 별칭에 식별자가 있습니다. 봇 ID는 코드후크 입력의 일부입니다. 앨리어스 ID는 포함되지만 앨리어스 이름은 포함되지 않습니다. Amazon Lex V2는 동일한 봇에 대해 여러 로케일을 지원하므로 로케일 ID가 포함됩니다.

V1 구조 V2 구조

bot

bot

bot.name

bot.name

N/A

bot.id

bot.alias

N/A

N/A

bot.aliasId

bot.version

bot.version

N/A

bot.localeId

현재 의도

sessionState.intent 구조에는 활성 의도의 세부 정보가 포함됩니다. 또한 Amazon Lex V2는 대체 의도를 포함하여 interpretations 구조에 있는 모든 의도의 목록을 반환합니다. 해석 목록의 첫 번째 요소는 항상 sessionState.intent와 동일합니다.

V1 구조 V2 구조

current의도

sessionState.의도 OR interpretations[0].의도

current의도.name

sessionState.의도.name OR interpretations[0].의도.name

current의도.nluConfidenceScore

interpretations[0].nluConfidence.score

다이얼로그 액션

confirmationStatus 필드는 이제 sessionState 구조의 일부가 되었습니다.

V1 구조 V2 구조

interpretations[0].nluConfidence.score

sessionState.의도.confirmationState OR interpretations[0].의도.confirmationState

N/A

sessionState.의도.state OR interpretations[*].intent.state

Amazon Kendra

kendraResponse 필드는 이제 sessionStateinterpretations 구조의 일부가 되었습니다.

V1 구조 V2 구조

kendraResponse

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

Sentiment

sentimentResponse 구조가 새로운 interpretations 구조로 이동되었습니다.

V1 구조 V2 구조

sentimentResponse

interpretations[0].sentimentResponse

sentimentResponse.sentimentLabel

interpretations[0].sentimentResponse.sentiment

sentimentResponse.sentimentScore

interpretations[0].sentimentResponse.sentimentScore

슬롯

Amazon Lex V2는 해석된 값, 해석된 값 및 사용자가 말한 원래 값을 포함하는 sessionState.intent 구조 내에 단일 slots 객체를 제공합니다. Amazon Lex V2는 slotShapeList로 설정하고 values 목록을 설정하여 다중 값 슬롯도 지원합니다. value 필드는 단일 값 슬롯을 지원하며 그 모양은 Scalar와 같이 가정합니다.

V1 구조 V2 구조

currentIntent.slots

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

currentIntent.slots[*].value

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

N/A

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

N/A

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

currentIntent.slotDetails

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

currentIntent.slotDetails[*].resolutions

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

currentIntent.slotDetails[*].originalValue

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

기타

아마존 Lex V2 sessionId 필드는 아마존 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

N/A

inputMode

N/A

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

N/A

dialogAction.responseCard.contentType

messages[*].contentType

dialogAction.responseCard.genericAttachments

N/A

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

N/A

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

N/A

sessionState.intent.slots[*].values

기타

이제 sessionAttributes 구조가 sessionState 구조의 일부입니다. recentIntentSummaryReview 구조가 제거되었습니다.

V1 구조 V2 구조

sessionAttributes

sessionState.sessionAttributes

recentIntentSummaryView

N/A