BLOG

클라이언트에서 API를 사용한 Amazon Lex 세션 상태 관리
작성일: 2019-09-05

대화를 지원하는 봇의 구축을 시도해 보신 분이라면 대화 흐름 관리가 까다로운 일이라는 것을 아실겁니다. 실제 사용자(스크립트를 연습하지 않은 사람)는 대화 중간에 벗어날 수 있고, 그 현재 주제와 관련된 질문을 하거나 완전히 새로운 방향으로 대화를 나눌 수 있습니다. 자연스러운 대화는 역동적이고 종종 여러 주제를 다룹니다.

 

오늘 블로그 글에서는 API를 사용하여 새로운 의도로 전환하거나 그 전 의도로 돌아가는 등 대화 흐름을 관리하는 방법에 대해 살펴볼 예정입니다. 다음 캡쳐 이미지는 실제 사용자와 고객 서비스 에이전트가 대화를 나누는 예시를 보여줍니다.

 

위의 예시처럼 잔액에 대한 사용자 쿼리(“대기 – 카드의 총 잔액은 얼마입니까?”)는 결제의 주요 목표와는 다릅니다. 사람들은 쉽게 주제를 바꿀 수 있습니다. 봇은 여담이 발생할 때 대화 상태를 저장하고 질문에 대답한 다음 원래 의도로 돌아가서 사용자에게 대기중인 내용을 상기 시켜 줍니다.

 

예를 들어, 사용자가 카드 결제를 원한다는 것을 기억해야 하고, 그 후 결제와 관련된 데이터를 저장하며 동일한 카드에서 합계 잔액에 대한 정보를 가져 오기 위해 문장을 전환합니다. 그런 다음 사용자에게 응답한 후 결제를 계속 진행합니다. 대화를 두 부분으로 나누는 방법은 다음과 같습니다.

 

이미지2 : 주제에서 벗어난 대화와 다시 주제를 재개한 대화

 

재미있는 예로, 당신이 “튀김과 함께 제공됩니까?” 라고 몇 번이나 말했는지 생각해보고 다음 대화에 대해 생각해 보시길 바랍니다.

 

자, 명확하게 합시다. 잘 구성된 봇으로 여담이 감지 됩니다. Lambda 함수를 사용하여 서버 측에서 의도를 전환하거나 Amazon ElastiCache 또는 Amazon DynamoDB에서 대화 상태를 유지하거나 또는 미리 채워진 슬롯과 새 프롬프트를 사용하여 이전 의도로 돌아갈 수 있습니다. 이제는 이 모든 것을 할 수는 있으나, 날씨를 확인하는 것 이상을 수행하는 실제 봇에 대한 코드를 작성하고 관리해야 하므로 쉬운 일은 아닙니다. (날씨 봇을 선택하지 말고, 올바른 도시를 찾기 위해 접하고 있다는 것에 주의합니다.)

 

오늘의 주제

오늘부터 새로운 세션 상태 API를 사용하여 이러한 종류의 여담 및 기타 흥미로운 리디렉션을 처리하기 위해 Amazon Lex 봇을 구축 할 수 있습니다. 이 API를 사용하면 이제 클라이언트 애플리케이션에서 Amazon Lex 봇과의 세션을 관리하여 대화 흐름을 세부적으로 제어 할 수 있습니다.

 

대화를 구현하려면 Amazon Lex에 대한 GetSession API 호출을 발행 하여 대화에서 이전의 의도 기록을 검색합니다. 다음으로, 올바른 의도를 사용하여 PutSession 조작을 사용하여 다음 대화 조치를 설정하도록 대화 상자 관리자에게 지시 합니다. 이를 통해 대화 상태, 슬롯 값 및 속성을 관리하여 대화를 이전 단계로 되돌릴 수 있습니다.

 

이 전의 예시에서 사용자가 총 잔액에 대해 쿼리 할 때 클라이언트는 GetSession을 호출한 다음 PutSession 을 호출 하여 지불을 계속 함으로써 이탈을 처리할 수 ​​있습니다. GetSession 작업의 응답에는 사용자가 상호 작용한 마지막 세 가지 의도의 상태에 대한 요약이 포함됩니다. 여기에는 MakePayment (accountType : credit, amount : $ 100) 및 AccountBalance 의도가 포함됩니다. 다음 다이어그램은 의도 이력의 GetSession 검색을 보여줍니다 .

 

Python의 GetSession 요청 오브젝트에는 다음 속성이 포함되어 있습니다.

 

response = client.get_session(

 botName=’BankBot’,

 botAlias=’Prod’,

 userId=’ae2763c4′

)

Python의 GetSession 응답 오브젝트에는 다음 속성이 포함되어 있습니다.

 

{

 ‘recentIntentSummaryView’: [

  {

   ‘intentName’: ‘AccountBalance’,

   ‘slots’: {

    ‘accountType’: ‘credit’

   },

   ‘confirmationStatus’: ‘None’,

   ‘dialogActionType’: ‘Close’,

   ‘fulfillmentState’: ‘Fulfilled’

  },

  {

   ‘intentName’: ‘MakePayment’,

   ‘slots’: {

    ‘accountType’: ‘credit’,

    ‘amount’: ‘100’

   },

   ‘confirmationStatus’: ‘None’,

   ‘dialogActionType’: ‘ConfirmIntent’

  },

  {

   ‘intentName’: ‘Welcome’,

   ‘slots’: {},

   ‘confirmationStatus’: ‘None’,

   ‘dialogActionType’: ‘Close’,

   ‘fulfillmentState’: ‘Fulfilled’

  }

 ],

 ‘sessionAttributes’: {},

 ‘sessionId’: ‘XXX’,

 ‘dialogAction’: {

  ‘type’: ‘Close’,

  ‘intentName’: ‘AccountBalance’,

  ‘slots’: {

   ‘accountType’: ‘credit’

   },

  ‘fulfillmentState’: ‘Fulfilled’

 }

}

 

그런 다음 애플리케이션은 이전 의도를 선택하고 MakePayment의 PutSession을 호출하고Delegate를 계속합니다. 다음 이미지는 PutSession이 대화를 재개함을 보여줍니다 .

PutSession을 위한 Python에서 요청 오브젝트 MakePayment의도는 다음 속성이 포함되어 있습니다.

response = client.put_session(

 botName=’BankBot’,

 botAlias=’Prod’,

 userId=’ae2763c4′,

 dialogAction={

  ‘type’:’ElicitSlot’,

  ‘intentName’:’MakePayment’,

  ‘slots’: {

   ‘accountType’: ‘credit’

  },

  ‘message’: ‘Ok, so let’s continue with the payment. How much would you like to pay?’,

  ‘slotToElicit’: ‘amount’,

  ‘messageFormat’: ‘PlainText’

 },

 accept = ‘text/plain; charset=utf-8’

)

Python의 PutSession 응답 오브젝트에는 다음 속성이 포함되어 있습니다.

{

 ‘contentType’: ‘text/plain;charset=utf-8’,

 ‘intentName’: ‘MakePayment’,

 ‘slots’: {

  ‘amount’: None,

  ‘accountType’: ‘credit’

 },

 ‘message’: ‘Ok, so let’s continue with the payment. How much would you like to pay?’,

 ‘messageFormat’: ‘PlainText’,

 ‘dialogState’: ‘ElicitSlot’,

 ‘slotToElicit’: ‘amount’,

 ‘sessionId’: ‘XXX’

}

세션 상태 API 작업을 사용하여 대화를 시작할 수도 있습니다. 봇이 대화를 시작하도록 할 수 있습니다. 슬롯이 없는 “Welcome” 인텐트를 작성하고, “Welcome. How may I help you?” 로 사용자에게 인사하는 응답 메시지를 작성합니다. 그런 다음 PutSession 오퍼레이션을 호출하여 인텐트를 “Welcome”으로 설정하고 대화 상자 조치를 Delegate로 설정하십시오.

 

“Welcome” 의도에 대한 Python의 PutSession 요청 오브젝트 에는 다음 속성이 포함됩니다.

response = client.put_session(

  botName=’BankBot’,

  botAlias=’Prod’,

  userId=’ae2763c4′,

  dialogAction={

    ‘type’:’Delegate’,

    ‘intentName’:’Welcome’

},

  accept=’text/plain; charset=utf-8′

)

 

Python의 PutSession 응답 오브젝트에는 다음 속성이 포함되어 있습니다.

{

 ‘contentType’: ‘text/plain;charset=utf-8’,

 ‘intentName’: ‘Welcome’,

 ‘message’: ‘Welcome to the Banking bot. How may I help you?’,

 ‘messageFormat’: ‘PlainText’,

 ‘dialogState’: ‘Fulfilled’,

 ‘sessionId’: ‘XXX’

}

 

SDK를 사용하여 Session State API 작업을 사용할 수 있습니다.

 

이러한 기술을 실제 봇에 통합하는 방법에 대한 자세한 내용은 Amazon Lex 설명서FAQ 페이지를 참고해 주십시오.  Amazon Lex를 사용한 봇 설계에 대해 더욱 자세히 알고 싶으시다면 두 부분으로 구성된 자습서 및 Amazon Lex를 사용한 더 나은 봇 구축하기를 살펴봐 주세요! 팁과 요령은 Alexa 디자인 가이드를 확인해 주시면 됩니다. NET이 없는 경우에도 걱정하지 마세요. Bots Just Got Better with .NET and the AWS Toolkit for Visual Studio를 통해 봇을 구축할 수 있습니다.

 

원문 URL: https://aws.amazon.com/ko/blogs/machine-learning/managing-amazon-lex-session-state-using-apis-on-the-client/

 

** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.