본문 바로가기
공부/AWS

[AWS][Lex] Amazon Lex 사용해서 챗봇 구현하기 (1)

by 웅대 2023. 4. 13.
728x90
반응형

aws 서비스 중 Amazon Lex라는 서비스는 손쉽게 챗봇을 구현할 수 있도록 도와준다.

 

이 Lex를 사용해서 간단한 챗봇 기능을 구현해보려 한다.

 

프리 티어 계정을 사용할 예정이고 다음과 같은 제한 아래에서 무료로 사용할 수 있다.

Amazon Lex 구성 요소

우선 Amazon Lex의 구성 요소부터 알아야 한다.

 

Amazon Lex의 구성 요소는 의도, 발화, 슬롯, 이행 4가지로 나뉜다.

 

날짜와 지역의 날씨를 물어볼 경우를 예시로 구성 요소를 살펴보려 한다.

 

  1. 의도 (Intents) : 사용자의 입력이 어떠한 의도를 가졌는지 ex) 날씨를 알고 싶어한다.
  2. 발화 (Utterances) : 문장 ex) 오늘 서울 날씨 알려줘, 내일 서울 날씨 어떄?
  3. 슬롯 (Slots) : 수행할 때 필요한 정보 ex) 날짜와 지역
  4. 이행 (Fulfillment) : 수행하는 방법 ex) Aws Lambda

 

Amazon Lex 동작 방식

사용자가 "오늘 날씨 알려줘" 라는 값을 입력한다면 자연어 처리를 통해 "날씨"라는 의도를 분류해낸다.

 

그 다음에 슬롯을 채우게 된다.

날짜 오늘
지역 X

필요한 슬롯이 전부 채워지지 않았다.

 

이럴 경우 "지역"에 대한 정보를 사용자에게 다시 물어본다.

 

사용자가 "서울이야"라고 답을 한다면 모든 슬롯이 전부 채워지게 되고 이행(Fulfillment) 과정으로 넘어가는 것이다.

 

Lambda를 사용한다면 Lambda에서는 날짜와 지역을 바탕으로 open api를 요청하고 받아온 값을 넘겨주게 된다.

 

Amazon Lex 연습

두 가지 의도를 구현해보려고 한다.

 

  1. 날짜와 지역을 바탕으로 날씨 정보 제공
  2. 날짜와 지역을 바탕으로 미세먼지 정보 제공

우선 Amazon Lex 콘솔에 접속한다.

 

봇을 생성한다.

 

빈 봇을 생성하는 게 아니라 예제 봇을 생성한 다음 설정을 바꿔보려고 한다. 예제 봇은 BookTrip으로 설정했다.

봇 이름을 정하고 IAM 권한은 기본으로 설정한다.

COPPA(아동 보호 관련)을 적용하고 다음으로 간다.

한국어를 선택하고 음성 기능은 사용하지 않는다.

 

만들어진 봇을 수정하면서 역할을 바꿔보려고 한다. 우선 BookHotel 의도부터 바꾼다.

 

이제 아래 슬롯 부분을 만들 차례인데 우리가 필요한 정보는 날짜와 지역이다.

 

BookTrip 예제 봇을 생성했다면 4개의 슬롯이 있을 것이다.

 

그 중 Location만 남기고 모두 지운다.

 

그리고 새로운 슬롯을 추가한다.

참고로 슬롯 유형에는 기본적으로 제공하는 유형이 있고 직접 만들 수 있는 유형이 있다.

 

아래 링크에서 기본적으로 제공해주는 유형이 있다. 우리가 사용할 슬롯은 기본적으로 제공해준다.

https://docs.aws.amazon.com/ko_kr/lex/latest/dg/howitworks-builtins-slots.html

 

내장 슬롯 유형 - Amazon Lex

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

아래와 같이 두 개의 슬롯이 있어야 한다. 참고로 모두 필수 옵션으로 체크를 해야 한다.

이제 이 슬롯을 바탕으로 샘플 표현을 입력해준다.

의도 실행 여부를 확인하는 Confirmation도 설정해준다.

나머지는 기본으로 두고 의도를 저장하고 빌드를 한다.

 

구축이 완료되면 Test를 눌러서 테스트를 해본다.

아직 Lambda 함수를 연결하지 않았기 때문에 이행한 다음에 기본 문구를 출력한다.

 

새로운 미세먼지 농도를 알려주는 의도도 만들어본다.

 

날씨 알려주는 의도와 거의 동일하며 샘플 표현만 다르게 하면 된다.

의도 저장하고 빌드를 한다.

잘 된다. 이제 이 의도를 가지고 람다 함수를 만들어서 연결하면 된다.

 

람다 함수를 만들어서 연동하는 과정은 다음 포스팅에서 해 볼 예정이다.

728x90
반응형

댓글