지원 종료 공지: 2025년 9월 15 AWS 일에는 Amazon Lex V1에 대한 지원을 중단할 예정입니다. 2025년 9월 15일 이후에는 Amazon Lex V1 콘솔 또는 Amazon Lex V1 리소스에 더 이상 액세스할 수 없습니다. Amazon Lex V2를 사용하는 경우 대신 Amazon Lex 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는
currentIntent및alternativeIntents구조를interpretations구조로 대체합니다. 각 해석에는 의도, 해당 의도에 대한 NLU 신뢰도 점수 및 선택적 센티멘트 분석이 포함됩니다. -
Amazon Lex V2는 아마존 Lex V1의
activeContexts,sessionAttributes의 기능을 통합sessionState구조로 이전합니다. 이 구조는 시작 요청 ID를 포함하여 대화의 현재 상태에 대한 정보를 제공합니다. -
Amazon Lex V2는
recentIntentSummaryView을 반환하지 않습니다. 대신sessionState구조체의 정보를 사용합니다. -
Amazon Lex V2 입력은
bot속성 내의botId및localeId를 제공합니다. -
입력 구조에는 입력 유형(텍스트, 음성 또는 DTMF)에 대한 정보를 제공하는
inputMode속성이 포함되어 있습니다.
Lambda 함수 입력 형식의 차이는 다음과 같습니다.
-
Amazon Lex V1의
activeContexts및sessionAttributes구조는 아마존 Lex V2의sessionState구조로 대체되었습니다. -
recentIntentSummaryView은 출력에 포함되지 않습니다. -
Amazon Lex V1
dialogAction구조는 두 개의 구조로 나뉘는데,dialogAction구조는sessionState구조의 일부이며,messages는dialogAction.type가ElicitIntent일 때 필요합니다. 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 구조 |
|---|---|
|
currentIntent |
sessionState.intent OR interpretations[0].intent |
|
currentIntent.name |
sessionState.intent.name OR interpretations[0].intent.name |
|
currentIntent.nluConfidenceScore |
interpretations[0].nluConfidence.score |
다이얼로그 액션
confirmationStatus 필드는 이제 sessionState 구조의 일부가 되었습니다.
| V1 구조 | V2 구조 |
|---|---|
|
currentIntent.confirmationStatus |
sessionState.intent.confirmationState OR interpretations[0].intent.confirmationState |
|
N/A |
sessionState.intent.state OR interpretations[*].intent.state |
Amazon Kendra
kendraResponse 필드는 이제 sessionState 및 interpretations 구조의 일부가 되었습니다.
| 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는 slotShape를 List로 설정하고 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 |