안녕하세요.
교보DTS 클라우드 기술팀 박지원입니다.
Amazon Lex와 Lambda를 활용한 챗봇 시스템 구현 및 Slack과의 연동 과정을 중심으로 AI 기반 서비스를 구축하는 과정을 다뤄보도록 하겠습니다.
1. Amazon Lex
Amazon Lex란?
Amazon Lex는 자연어 처리(NLP) 기술을 활용하여 손쉽게 챗봇을 구현할 수 있도록 도와주는 AWS의 강력한 서비스입니다. Lex를 사용하면 간단한 대화형 인터페이스부터 복잡한 대화 흐름을 처리하는 지능형 챗봇까지 손쉽게 구축할 수 있습니다. 이번 시간에는 Lex를 활용하여 영화 추천 챗봇 서비스를 구현해보는 시간을 통해 Lex의 주요 기능과 사용 방법을 배워보겠습니다.
> Amazon Lex 봇 기본 지식
봇을 만들기 전에 먼저 기본적인 용어 및 개념들을 살펴보겠습니다.
Amazon Lex 구성 요소는 의도, 발화, 프롬프트, 슬롯, 이행 크게 5가지로 나뉩니다.
영화 추천을 받을 경우로 구성 요소들을 살펴보려고 합니다.
●의도(Intent) : 사용자가 수행하고자 하는 작업
예 : 사용자가 “영화 추천을 받고 싶어 한다”는 의도를 가짐
●발화(Utterance) : 사용자가 입력할 수 있는 자연어 문장으로, 의도를 트리거함.
예 : “영화 추천해줘”, “재밌는 영화 추천해줘”
● 확인 프롬프트(Prompt) : 요청된 작업을 완료하는데 필요한 데이터를 가져오도록 설계된 봇 메세지
예 : “장르를 선택해주세요”
● 슬롯(Slot) : 의도를 처리하기 위해 사용자가 입력해야 하는 데이터
예 : 프롬프트에 대한 대답으로 “액션”을 입력하면 “장르”라는 슬롯에 사용자가 입력한 “액션”이 채워짐.
● 이행(Fulfillment) : 슬롯의 데이터를 통해 사용자의 요청을 처리하고 응답을 생성하는 단계
예 : AWS Lambda를 사용해 추천 영화를 반환
2. 영화 추천 서비스 챗봇 Hands-On
> Amazon Lex 봇 구조 생성
봇이 실제로 무엇을 할 것인가를 정의하기 전에 먼저 기본 구조를 만들어야 합니다.
- AWS 콘솔에서 서울 리전의 Lex를 선택하여 접속합니다.
[Create bot]을 클릭하여 봇 설정 구성 화면으로 이동합니다.
- [Create a blank bot]을 선택하고 봇 이름에 [MovieRecommendationBot]을 입력하고,
설명 – 선택사항에 “영화 추천 Lex챗봇입니다.”를 입력합니다.
- IAM 권한 섹션에서는 런타임 역할에 [기본 Amazon Lex 권한으로 역할을 생성합니다]를 선택합니다.
이 옵션은 Amazon Lex가 다른 AWS 서비스를 호출할 수 있는 권한을 가진 IAM 역할을 생성하는 것입니다.
- 이 봇은 COPPA와 관련이 없으므로 COPPA 설정 섹션에서 [아니오]를 선택합니다.
참고 : 미국내 관련 법에 따라 미국에 기반을 둔 회사가 13세 이하 어린이를 대상으로 한 봇을 제공하고자 하는 경우 콘솔 또는 Amazon Lex API를 사용하여 childDirected필드를 true로 설정하여 봇이 어린이 온라인 개인정보 보호법(COPPA)의 적용을 받는다고 Amazon Lex에 알려야 합니다.
- Amazon Lex는 설정된 시간 동안만 세션을 유지합니다. 사용자가 유휴 상태이고 이 시간 동안 입력을 제공하지 않으면 세션은 종료됩니다.
이번 핸즈온에서는 기본값인 5분을 사용하겠습니다.
태그도 사용하지 않으므로 고급 설정 섹션은 그대로 두고 맨 아래에 있는 다음 버튼을 눌러 봇 기본 구조 생성을 완료합니다.
- 언어 추가 화면으로 이동되고, 최소 한 개 이상의 언어를 선택 해야만 합니다. 현재 Amazon Lex는 한국어를 포함해 13개 언어를 지원하고 있습니다.
이 핸즈온에서는 한국어를 사용하겠습니다.
– 언어 선택 : 한국(KR)
– 음성 상호 작용 : “없음. 이것은 텍스트 기반 응용 프로그램입니다.” 선택 (음성 상호작용이 필요 시 사용되는 옵션입니다.)
– 의도 분류 신뢰도 점수 임계값 : 0.40
>> 봇이 대화의 의도를 좀 더 엄격하게 인식하길 원한다면 1에 가까웃 숫자를 설정하면 됩니다.
이번 핸즈온에서는 기본치인 0.4를 그대로 사용하겠습니다.
- 앞서 언어 선택이 끝나면 바로 이어서 첫 번째 의도를 추가하는 화면으로 이동합니다. 좌측 메뉴에 표시된 의도 목록을 보면 이미 FallbackIntent라는 이름을 가진 기본 제공 의도가 등록되어 있는것을 볼 수 있습니다. 이 FallbackIntent는 사용자의 입력이 등록된 의도와 일치하지 않을 경우 기본으로 표시할 내용을 정의하는데 이번 실습에서는 사용하지 않습니다.
NewIntent를 클릭합니다.
- Intent 이름은 KoreanMovieRecommendation으로 하겠습니다.
- 샘플 발화(Sample Utterance) 이 의도를 호출하기 위해 사용자가 말하거나 입력할 것으로 예상되는 대표적인 구문을 설정할 수 있습니다. Amazon Lex는 발화(Utterance)과 다를 수 있는 사용자 입력을 해석하기 위해 샘플 발화(Sample Utterance)을 기반으로 의도를 추정합니다.
아래 그림과 같이 “영화 추천해줘”, “재밌는 영화 추천해줘”를 추가해줍니다.
- 이번 실습에서는 Amazon Lex의 “Initial response”옵션을 통해 의도가 인식된 후, 슬롯 값을 수집하기 전에 사용자에게 전송할 메세지를 보낼 수 있는 기능을 사용하려고 합니다.
아래 그림과 같이 “안녕하세요. 영화추천봇입니다.” 를 추가합니다.
- 다음은 Slot을 설정해야 하는데, AWS 기본적으로 제공하는 Slot 유형이 있지만 사용자가 새로 Slot 유형을 만들어 추가할 수 있습니다.
뒤로 가서 Slot types로 들어갑니다.
- Add slot type을 클릭합니다.
- Slot type name은 아래 그림과 같이 “MovieGenre”로 추가합니다
- Slot type의 값을 추가해야 하는데, 봇이 의도를 이행하는 데 필요한 정보로 영화 장르인 “액션”, “로맨스”, “코미디”, “드라마”, “공포”, 판타지”를 추가해줍니다. 추가하고 [Save Slot type]을 클릭합니다.
- Slot type을 설정하고 다시 의도 설정 단계로 갑니다.
[Required for this intent]의 체크박스는 풀지 않아야 합니다. 기본 상태로 둡니다.
Add slot을 누르고 전 단계에서 생성한 MovieGenre를 선택하고 이름은 Genre로 설정합니다.
Prompts도 추가해줘야 하는데, 이는 의도가 트리거되면 Lex가 사용자에게 보내는 메세지입니다. 추후 Lambda 코드를 통해 해당 프롬프트 메세지를 다시 설정할 것이지만 슬롯 설정 시 Prompts를 입력해야되기 때문에 아래 그림처럼 “어떤 장르를 원하시나요?”를 입력합니다.
- 다음은 이행(Fulfillment) 단계로 넘어갑니다.
오른쪽에 [Active]로 활성화하고 [Advanced options]을 클릭합니다. 의도를 이행하기 위해 Lambda를 사용한다라는 옵션을 활성화합니다.
- 마지막으로 [Code hooks] 기능을 활성화여 Lambda 함수를 코드 후크로 호출하도록 구성하고 의도를 저장합니다.
- 다음으로 Amazon Lex 봇의 [Deployment]의 Alias : TestBotAlias로 들어가 어떤 Lambda 함수를 호출할 것인지를 설정할 것입니다.
Languages에서 Korean (South Korea)를 선택합니다.
- Soure를 드롭다운해서 미리 작성해놓은 Lambda 함수 코드인 “MovieRecommendationFunction”을 선택하고 저장합니다.
- 다시 의도로 돌아가 Bulid를 하여 최종 구성을 합니다.
- 최종 Build가 되면 위 Test를 눌러 AWS Console에서 챗봇 서비스를 사용할 수 있습니다.
1) “영화 추천해줘”를 통해 의도(Intent)가 실행됨
2) 초기 대응 프롬프트가 실행되고, “장르를 선택해주세요”가 실행되어 Slot을 수집할 수 있는 메세지가 나옵니다.
3) 사용자가 “코미디” 등 장르를 입력합니다.
4) Amazon Lex는 슬롯 데이터를 전달받고 Lambda 코드가 이행(fulfillment)가 실행됩니다.
5) 추천 영화를 반환하고, 대화 종료 메세지를 반환합니다(“영화 추천 서비스를 이용해주셔서 감사합니다.”)
- 추가로 Amazon Lex와 Slack과의 연동을 통해서 사용자가 Slack에서 해당 서비스를 사용할 수 있도록 세팅할 수 있습니다.
이번 실습에서는 Slack 연동하는 과정은 생략합니다.
아래 참고 URL을 통해 Amazon Lex와 Slack과 연동을 하실 수 있습니다.
참고 URL : https://docs.aws.amazon.com/ko_kr/lex/latest/dg/slack-bot-association.html
- 아래 그림처럼 Amazon Lex와 Slack을 통합하여 Slack으로 사용자들이 해당 챗봇을 사용할 수 있습니다.
- 오늘 소개한 Amazon Lex를 활용하여 대화형 AI 챗봇을 구현하고 고객 경험을 혁신하는 방법을 함께 알아보았습니다.
자연어 처리와 음성 인식을 통해 손쉽게 챗봇을 구축하고, 다양한 비즈니스 요구 사항에 맞춰 사용자와의 상호작용을 자동화할 수 있는 환경을 제공하는 것이 핵심입니다.
기업이 날로 높아지는 고객 기대에 발맞춰 Amazon Lex와 같은 AI 기반 솔루션을 도입하고 적극 활용한다면, 차별화된 서비스 환경을 유지할 수 있을 것입니다.
본 실습을 통해 배운 내용을 토대로 대화형 AI의 새로운 가능성을 열어 보시면 좋을 것 같습니다. 감사합니다.