amazon lex 와 lambda 를 이용한 services bootcamp... · 2017-05-31 · lex에 미 구성해서...

26
Amazon Web Services – AI Services Bootcamp Lab guide May 2017 Page 1 of 26 Amazon Lex 와 Lambda 를 이용한 CoffeeBot 만들기 2017. 5. 25 김용우 ([email protected]) Partner Solutions Architect

Upload: others

Post on 15-Mar-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 1 of 26

Amazon Lex 와 Lambda 를 이용한

CoffeeBot 만들기

2017. 5. 25

김용우 ([email protected])

Partner Solutions Architect

Page 2: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 2 of 26

실습 목차

1. 실습개요 ............................................................................................................................................................................... 3

2. Lex ChatBot 구성 흐름도 ............................................................................................................................................ 4

3. 단계 0 : 어떤 용도의 ChatBot 을 만들것인지 구상 ........................................................................................... 4

4. 단계 1: CoffeeBot 시나리오 작성 ............................................................................................................................ 5

5. 단계 2: Intent 및 Slot 구성 ........................................................................................................................................... 6

6. 단계 3: Build 및 테스트/에러수정 ........................................................................................................................... 12

7. 단계 4: 에러(표현/이해에 대한) 처리 및 주문사항 확인 ................................................................................ 14

8. 단계 5: 좀더 똑똑한 Bot 으로 개선 ......................................................................................................................... 16

9. 단계 6: 배포 (Publish) – 추가(Optional) 실습..................................................................................................... 21

Page 3: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 3 of 26

실습 개요

본 실습은 Amazon LEX 를 통해 음성과 텍스트를 사용하는 대화형 인터페이스를 구축해 보실수

있도록 구성하였습니다. Amazon Lex 는 음성을 텍스트로 변환하는 자동 음성 인식(ASR)과 텍스트의

의도를 이해하는 자연어 처리(NLU)라는 첨단 딥 러닝 기능을 제공하므로, 상당히 매력적인 사용자

경험과 생생한 대화형 인터페이스를 갖춘 애플리케이션을 구축할 수 있습니다. 이번 실습을 통해

커피숍에서 주문을 대신 받아줄수 있는, 음성 및 텍스트 모두를 지원하는, CoffeBot 을 구성해 보실수

있으며, Mobile Hub 와의 연동으로 손쉽게 샘플 모바일 App 을 생성하여, 콘솔에서 뿐만 아니라 모바일

기기에서도 손쉽게 테스트 해 보실수 있습니다.

CoffeeBot 모바일 실행화면

실습 준비

이 랩을 수행하려면 다음이 필요합니다.

1. 실습을 위한 AWS 계정

2. 반드시 Amazon Lex 가 지원되는 리전 사용 (US East-1)

3. 본 실습에서 사용되는 코드 (Download)

Page 4: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 4 of 26

Lex ChatBot 구성 흐름도

단계 0. 어떤 용도의 ChatBot 을 만들 것인지 구상

ChatBot 을 만들때 가장 처음 해야할 일은 어떤 용도로 사용할 Bot 인지를 결정하는 일 입니다.

여행 예약용이 될수도 있고, 음식점 예약, 날씨나 교통상황과 같은 정보 제공 또는 심심풀이용

Bot 일수도 있습니다. 이번 실습에서는 손님들의 Coffee 주문을 대신 받아주는 CoffeeBot 을 예로,

Lex 기반의 ChatBot 을 만드는 과정을 단계별로 따라해 보도록 하겠습니다.

* Amazon Lex 는 현재 영어만 지원 되므로 ChatBot 의 대화 흐름은 모두 영어를 기반으로

구성됩니다.

Page 5: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 5 of 26

단계 1. CoffeeBot 시나리오 작성

새로운 Bot 을 만들때 가장 좋은 방법은 해당 역할을 수행하는 사람간의 자연스런 대화의 흐름을

먼저 떠올려 보는 것입니다. CoffeeBot 을 만들때는, 여러분이 실제 커피숍에가서 커피를 주문할때

종업원과의 일반적인 대화 흐름을 상기시켜 보시면 됩니다. 아래의 예시는 주문할때의 대화

흐름과, 사람별로 주문이 가능한 옵션, 그리고 상점에 따라서 제공하는 옵션들을 구분하여 나열한

내용입니다.

Live Conversation Phase of Conversation Intents and Alternatives

Hi – what can I get you today?

> Oh hi! Can I get a large non-fat mocha please?

Greetings & initial request

– Beverage type: mocha

– Beverage size: large

– Creamer: non-fat

Could start with just the drink type or another combination.

Would you like that iced?

> No thanks.

Configure

– Beverage temp: hot

Just hot or iced? What are the

other values?

What kind of chocolate?

> Dark

Configure

– Chocolate type: dark

All drinks don’t allow

chocolate. Only mocha?

Any whip?

> No, thanks.

Configure

– Whipped cream: no

Are there different types of

whipped cream?

Maybe change to a different drink

or size?

Okay, one large single dark non-fat

mocha, no whip.

> Oh, can you add a pump of toffee?

Confirm → Configure

– Flavor: 1 pump toffee

Could have just accepted

here. Two kinds of flavors? Is

there a limit?

Sure! One large single dark non-fat

mocha, no whip with 1 pump of

toffee. What’s your name?

> Jenny

Confirm → Label

– Name: Jenny Store name as preference in app

Thanks, Jenny! Your drink will be on the

right in just a few. That’ll be $4.17. Can I

get you anything else?

> No, thanks.

Check out Charge options for this

Page 6: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 6 of 26

Out of five. Here’s your change. Have a

great day!

> Yeah – you too!

Check out → Done

placeOrder: name,

beverageConfig

– places back-end Order

– send email confirmation?

– earn points?

사람간의 대화는 실제로는 훨씬더 복잡하고, 변동성이 있으며 때로는 불명확 할 수 있습니다.

예를들어 주문중에 메뉴에 없는 커피를 주문할수도 있고, 아메리카노에 우유를 섞어 달라고 요청을

한다고나, 주문시의 말투나 단어 선택이 불분명 할수도 있습니다. 잘 만들어진 Bot 의 척도는

이러한 예외상황, 다양한 사용자의 요청(Input)을 얼마나 자연스럽게 처리할수 있도록 구성

되었느냐에 달려 있습니다. 이러한 불분명한 요청(Input)을 처리할수 있는 방법으로 Lex 는

Lambda 를 이용한 Validation 및 예외 처리 방법을 제공합니다. (*뒤쪽에 추가 설명됨)

단계 2. Intent 및 Slot 구성 (ChatBot 을 구성할 핵심 구성요소 결정)

Bot 과의 대화를 자연스럽게 하려면 다양하고 풍부한 대화의 흐름을 추가하는 것이 좋습니다.

예를들어 그날 날씨에 맞는 인사나, 가벼운 농담등이 사용자의 친밀도를 높여줄수 있지만,

결국에는 해당 ChatBot 의 용도, 즉 Bot 이 수행해야하는 최종 역할(예약, 주문 등)을 처리하기 위한

옵션들을 사용자들로 하여금 반드시 알아 내야 합니다. 이번 단계에서는 Coffee 주문에 따라

손님들이 선택할수 있는 옵션들을 상세화 합니다.

이제부터 Lex 콘솔을 통해 하나씩 단계별로 구성을 시작해 보도록 하겠습니다.

1) 콘솔에서 Amazon LEX 를 선택하고, Bots 메뉴에서 Create 버튼을 클릭합니다.

2) 기본적으로 3 가지의 Sample Bot 들이 제공되고 용도에 따라 손쉽게 해당 Bot 들의 구성내용을

살펴보실수 있습니다. 이번 단계에서는 Custom Bot 을 클릭하고 Bot name 에 CoffeeBot 을

Page 7: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 7 of 26

그리고, Output voice 로 원하는 Voice 를 골라줍니다. Lex 는 Polly 와 연동되어 텍스트 뿐아니라

음성 대화도 가능하도록 구성됩니다. 세션 Timeout 은 10 min 으로 설정합니다.

3) LEX 가 사용할 IAM Role 은 자동적으로 생성되고, 이후 선택해야하는 옵션은 미국의 ‘온라인 아동

정보 보호법’에 따른 선택이며, 해당사항이 없을시 No 를 선택하시면 Create 버튼이 활성화

됩니다.

4) CoffeeBot 을 생성하면 다음과 같은 CoffeeBot 콘솔 화면이 나타나게됩니다. CoffeeBot 에 대한

기본적인 설정은 본 화면에서 모두 하실수 있습니다.

Page 8: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 8 of 26

5) 제일 먼저 화면 좌측의 메뉴에서 Intent 의 더하기 표시(+)를 클릭하고 Intent 를 생성합니다.

Create new intent 를 클릭하고 cafeOrderBeverageIntent 를 입력합니다. Bot 에따라 여러가지

역할의 Intent 를 가질수 있지만 이번 실습에서는 한가지 역할의 Intent 만 생성해 봅니다.

(Intent 나 Slot 등은, 특정 Bot 에서만 사용되는것이 아니라 추후 다른 Bot 을 만들때에도 해당

용도의 Intent 가 필요하다면 불러서 연동할수 있는 공통의 자원이 됩니다.)

Page 9: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 9 of 26

6) 생성한 Intent 에 구체적인 Value 역할을 하는 Slot 을 생성합니다. Slot 은 사용자가 Utterance, 즉

음성/텍스트 요청을 통해 CafeOrderBeverageIntent 를 호출했을때 해당 요청을 실제로

수행(Fulfil) 하기위해 사용자로 하여금 얻어내야 하는 구체적인 옵션 값들 입니다.

(예, 커피사이즈, 커피종류, Hot 또는 Iced 등)

콘솔화면 좌측의 SlotTypes 에서 (+) 기호를 클릭하고 아래 표의 SlotType 및 각각에 대항하는 Slot

Value 들을 넣어주세요. Value 입력시에는 하나의 입력상자에 하나의 값만을 넣어주며, 한가지

항목 입력후 엔터키를 치시면 다음항목을 입력할수 있습니다. Slot 타입을 추가할 때마다

(+)기호를 클릭하여 아래 Slot Type 및 Slot Value 들을 추가해 주세요.

Slot Type Slot Values

cafeBeverageType coffee; cappuccino; latte; mocha; chai; espresso; smoothie

cafeCreamerType two percent; skim milk; soy; almond; whole; non-fat; skim; half and

half

cafeStrength single; double; triple; quad; quadruple

cafeFlavor vanilla; almond; French vanilla; caramel; hazelnut

cafeBeverageSize kids; small; medium; large; extra large; short; six ounce; eight ounce;

twelve ounce; sixteen ounce; twenty ounce

cafeBeverageTemp kids; hot; iced

cafeBeverageExtras half sweet; semi sweet

Slot 구성을 모두 마치면 다음과 같은 화면이 만들어 집니다.

Page 10: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 10 of 26

7) 다음 단계로 Intent 를 호출하는 고객의 요청, 즉 Utterance 를 생성해 줍니다. 카페에서 손님이

커피를 주문하는 요청을 하는 표현은 다양할수 있습니다. Utterance 는 이러한 다양한 표현들을

Lex 에 미리 구성해서 알려주고, 학습하도록 하는 과정입니다. 또한 이과정을 통해 최종 단계에서

요청 수행(Fulfil)을 위해 필요한 주문옵션, 즉 (Slot Value)들을 파악합니다. 아래의 예시를

입력하시고, 필요시 더 많은 표현들을 입력해 주셔도 됩니다. Utterance 가 많은면 많을수록 Bot 이

고객의 요청을 더 잘 응대할수 있습니다.

콘솔화면의 Sample Utterances 에 아래의 표현들을 추가해 주세요.

I would like a {BeverageSize} {BeverageType}

Can I get a {BeverageType}

May I have a {BeverageSize} {Creamer} {BeverageStrength} {BeverageType}

Can I get a {BeverageSize} {BeverageTemp} {Creamer} {BeverageStrength} {BeverageType}

Let me get a {BeverageSize} {Creamer} {BeverageType}

8) 다음은 아래있는 Slots 항목에서 Name 을 다음 그림과 같이 넣어줍니다. 이름을 넣어주면

Utterance 에서 { 괄호 } 로 넣어준 Value 들이 색상별로 Highlight 됩니다. 이때 주의해야 할

사항은 Slot Type 은 Slot 생성과정에서 자동으로 만들어지는데, Name 과 기 생성되어 있는

Type 을 알맞게 매핑해야 합니다. 만약 순서가 제시된 예시와 다를때는 Priority 항목의 화살표를

사용해서 순서를 변경할수 있습니다.

Page 11: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 11 of 26

9) 계속해서 Slots 항목에서 Prompt 란에 아래와 같이 Bot 이 사용자의 입력에대해 응답을 주는

메시지를 정의합니다. 이때, 단계 1 에서 정의한 전체 시나리오를 참고하여 Bot 이 수행하는 역할상

대화의 초기에 먼저 나와야 하는 질문/응답을 생각하며 Slots 의 Priority(순서)를 구성합니다.

Required Name Slot type Prompt

Yes BeverageType cafeBeverageType What kind of beverage would you like?

For example, mocha, chai, etc.

Yes BeverageSize cafeBeverageSize What size? small, medium, large?

No Creamer cafeCreamerType What kind of milk or creamer?

Yes BeverageTemp cafeBeverageTemp Would you like that iced or hot?

No BeverageStrength cafeBeverageStrength Single or double?

No BeverageFalvor cafeFlavor What flavor?

No BeverageExtras cafeBeverageExtras extras?

본 실습의 Slots 에서는 cafeBeverageType 과 연결된 BeverageType 이 가장 높은 Priority 를

가지고, Prompt 는 사용자로 하여금 어떤 음료를 원하는지 BeverageType 을 알아낼수 있는

메시지(Prompt)를 작성합니다. 이를위한 첫번째 메시지는 (What kind of beverage would you

like? For example, mocha, chai, etc.) 입니다. 이와 마찬가지로 나머지 항목들도, Priority, Name,

SlotType 및 Prompt 가 모두 연관성있게 매핑되어 있는지 확인합니다.

Page 12: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 12 of 26

10) Slots 구성의 마지막으로 Required 즉, 요청의 최종수행(Fulfil)을 위해 꼭 필요한 항목들을 체크해

줍니다. Bot 은 해당 되는 Slot 들에 대한 정보만 확인하면 수행단계로 넘어갑니다. 본 실습에서는

BeverageType, BeverageSize 그리고 BeverageTemp 의 체크박스에만 체크를 하도록 하겠습니다.

단계 3. Build 및 테스트/에러 수정

11) 여기까지 구성을 마치셨다면 기본적인 Lex ChatBot 구성을 모두 마친것입니다. 이제 테스트를

위해 맨 아래있는 Save Intent 버튼을 클릭하고, 우측 상단에 있는 Build 버튼을 눌러 ChatBot 을

Build 합니다. 만약 구성상에 문제가 있을때는 Build 단계에서 해당 이슈에 대한 메시지가 콘솔에

나타나며 빌드가 되지 않습니다.

이때, 이슈 해결을 위해 Slot 항목들을 클릭해 보면 선택이 되지 않는데, 이는 현재 Save 되고 Build

단계에 있는 Intent 에 Version 이 변경되어 (매 빌드/시도시 +1 증가) 수정할수가 없는 것입니다.

11-1) 이때는 아래 화면과 같이 Intent 이름 옆의 숫자 를 누르면 현재 버전들과 Latest 라는 항목이

나오는데, 기존 항목수정, Slot 정보 추가등을 할때는 항상 Latest 를 골라야 해당 작업을 수행할수

있습니다. 그리고 수정사항이 있을때는 Build 전, 반드시 Save Intent 를 눌러주셔야 합니다.

수정사항이 있을경우에는 항상 Latest 버전을 골라주셔야 수정이 가능해 집니다.

Page 13: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 13 of 26

12) 정상적으로 Build 를 마치게되면 우측 하단에서 바로 대화상자가 Popup 되며 즉시 Build 한 Bot 을

테스트 해 보실수 있습니다.

13) Test Bot 에서 Coffee 를 주문해 봤습니다. 그런데, 아래 보시는 것처럼 우리가 Utterance 에

정의하지 않았던 “I wanna mocha”를 통해서도 cafeOrderBeverageIntent 실행시켜 실제로는 “I

want a {BeverageType: Mocha} 의 의도로 해석되었습니다. 이후, Lex 는 BeverageSize 에 대한

정보를 얻기위해 What Size? Small, medium, large? 를 물었고, 마지막으로 Iced 인지 Hot 을

원하는지를 물었습니다.

*체크박스(Required)설정은 Chatbot 이 사용자로 하여금 반드시 받아야 하는 Slot 을 의미합니다.

Required 체크박스에 설정된 Slot 들이 모두 충족되면 Chatbot 은 Fulfilment 단계로 넘어갑니다.

Page 14: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 14 of 26

위의 설정에서 3 가지 항목을 “Required” 로

설정하였으며, 이 세가지가 충족된 후엔 현재

Default 설정으로 구성되어 있는 Fulfillment

방법인 Return Parameters to Client 대로

선택된 값들이 Return 되었습니다.

(* 추후에는 Lambda 로처리)

단계 4. 에러(표현/이해에 대한) 처리 및 주문사항 확인

사용자의 입력에 따라서 Lex 가 잘 이해하지 못하는 경우 이를 다시묻는 ‘되묻기’ 에 대한 고려도

필요합니다. 사람 사이의 일반적인 대화에서 잘 못알아 들었을 경우 다시한번 말해 달라고 하듯이,

Lex 도 사용자가 불분명한 요청, 대답을 했을때 이를 Clarify(명확히) 하는 추가 질문이 사용될 수

있습니다. 또한, Max try 이후에도 이해할수 없을경우에는 대화를 종료하는 구문을 사용합니다.

1) 콘솔의 왼쪽 화면에서 Error Handling 을 선택하고 화면과 같이 Error Handling 항목을

채우신후 Save 버튼을 눌러주세요.

Page 15: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 15 of 26

2) Build 이후 에러 처리가 제대로 되는지(되묻기를 하는지), 한번 확인해 보세요.

3) 다시 Intents 메뉴로 돌아와서 실제 요청 수행(Fulfillment)하기전, 고객으로 부터 받은 사항들에

대해 확인(Confirmation) 하는 기능을 설정하고 Save Intent 를 누릅니다.

4) Build 후 아래 좌측과 같이 Order 를 수행전 주문내역 확인(Confirmation)이 나오는지

확인합니다. 우측 테스트 창은 Small Mocha 에서 Large Mocha 로 주문사항을 변경하는

부분인데, 이는 추가적인 설정 없이도 Lex 에서 사용자의 의도를 해석해서 변경한 것입니다.

Page 16: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 16 of 26

단계 5. 좀더 똑똑한 Bot 으로 개선

단계 4 까지의 구성에서 여러분은 간단한 커피 주문을 받아줄수 있는 Interactive ChatBot 을

만들어 보셨습니다. 그런데, 대화에는 언제나 모호성이 존재합니다. 조금더 복잡한 대화로

진행되길 원하거나, 질문에 대한 답변이 고객에 의도는 같은데 Yes, 또는 No 로 나뉠수도 있습니다.

또는 Small 을 Sball 로 적을수도 있는데, 아직까지 이를 제대로 판단할수 있는 로직이 적용되진

않았습니다. 이는 특히 음성 챗봇일 경우에는 대화의 중단까지 올수 있으므로, 이런 모호성을 잘

제대로 처리하는 것이 필요합니다. 이러한 것을 처리할수 있는 방법으로 Lex 에서는 Validation

Code hook 이라는 기능을 제공합니다. 이는 사용자의 특정 입력에 대해 검증 하거나, 조건을 걸어

사용자에 별도의 메시지를 전달하거나 하는 좀더 지능화된 로직을 처리할수 있는 방법입니다.

콘솔의 Sample Utterance 아래, Lambda Initialization and validation 이라는 항목이 있는데

이를 확장해 보면 Lambda Function 을 고르는

상자가 나옵니다. 아직 우리는 이를 처리하는

Lambda 를 생성하지 않았기 때문에 먼저

Lambda 를 만들어야하는데, 먼저 동일한

Lambda 함수를 사용하도록 구성된 Fulfilment

에 대해 확인해 보도록 하겠습니다 . Validation

hook 과 Fulfillment 는 개별적인 Lambda

함수가 사용될수도 있고, 하나의 Lambda

함수가 두가지 기능을 수행하도록 구성할 수도

있습니다.

IAM Role 생성

Lambda 함수를 만들기 전에 함수에 대한 IAM 역할(Role)을 생성해야 합니다. Role 은

Lambda 함수가 특정 서비스/자원에 접근할수 있도록 권한을 부여합니다. 이번단계에서 두개의

Role 을 만드는데, 하나는 Lex 가 Lambda 를 호출할수 있도록 권한을 부여하는 것이고, 다른

하나는 Lambda 가 다른 Log 를 기록하는 등의 다른 자원에 대한 접근 권한을 부여하는 Role

입니다.

1) IAM 콘솔에서 Role 을 선택하고 Create New role 버튼을 클릭합니다.

2) Select role type 에서 AWS Service Role 에 나열된 서비스들중 AWS Lambda 를 Select 합니다.

3) Attach Policy 화면에서는 아무 Policy 도 선택하지 않은채로 Next Step 를 클릭합니다.

4) Role Name 에서 CoffeeBot_app_role 이라고 이름 짓습니다.

Page 17: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 17 of 26

5) Role 에서 생성한 CoffeeBot_app_role 을 선택하고, Inline Policies 항목에서 Click Here 를

누릅니다.

6) Set Permissions 에서 Custom Policy 를 선택하고 Select 버튼을 누릅니다.

7) 아래 상자에 있는 내용을 Copy & Paste 해서 상자 안에 넣고, 임의이 Policy Name 을 만든후

Apply Policy 를 누릅니다. (또는 다운받은 Text 파일에서 복사)

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "lambda:InvokeFunction", "polly:SynthesizeSpeech" ], "Effect": "Allow", "Resource": "*" } ] }

8) 이 Role 은또한, Amazon Lex 의 Service principal 을 Trust 해야 하는데, 이는 Role 의

Permissions 탭 옆에 Trust Relationships 라는 탭을 클릭해서 설정할수 있습니다. Edit Trust

Relationship 버튼을 클릭하고 lambda.amazonaws.com 을 lex.amazonaws.com 으로

변경합니다.

위의 단계 1) ~ 7) 까지를 반복하여 아래 주어진 내용대로 CoffeeBot_Lambda_role 을 생성합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"

Page 18: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 18 of 26

], "Resource": [ "*" ] } ] }

Lambda 함수 생성

1) Lambda 콘솔에서 Create new Lambda 버튼을 클릭하고, Select blueprint 에서 Blank

Function 을 선택합니다.

2) Trigger 선택화면 에서 아무것도 선택하지 않고 Next 버튼을 누릅니다.

3) Configuration Function 에서 아래와 같이 cafeOrderCoffee 라고 이름 짓고 Runtime 은

Node.js 4.3 을 선택합니다.

4) Code entry type 을 “Edit code inline”으로 선택하고, 아래 NodeJS 코드를 붙여 넣습니다.

//cafeOrderCoffee NodeJS code

http://bit.ly/2qDPLGj : 지면관계상 Link 로 처리

// 제공되는 코드에서 Lex 에 구성한 Intent 명이 Code 에 있는 cafeOrderBeverageIntent 와

동일한지 다시한번 확인합니다.

if (name === 'cafeOrderBeverageIntent') {

return orderBeverage(intentRequest, callback);

5) Lambda function handler and Role 에서 이전 단계에서 생성한 CoffeeBot Lambda Role 을

선택해 주고 나머지 옵션들은 그대로 둔채 Next 를 눌러 Lambda 함수를 를 생성해줍니다.

위에 제공된 Lambda 함수는 입력값을 검증(Validation)해서 특정 입력값이 들어오면 메시지를

전달합니다. 특히 예시로, 현재 Caffee 에서 이용 가능한 음료가 Mocha 밖에 없다고 가정 했을때

아래의 Code 가 mocha 이외의 주문이 들어왔을때 이를 처리하는 로직이 구성되어 있습니다.

//cafeOrderCoffee 의 일부 Code 내용

if (! (beverageType && (beverageType === 'mocha'))) {

Page 19: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 19 of 26

callback(elicitSlot(outputSessionAttributes, intentRequest.currentIntent.name,

slots, 'BeverageType', buildMessage('Sorry, but we can only make a mocha today. What

kind of beverage would you like?')));

}

그리고, 마지막으로 주문에 대한 처리 (Fulfillment) 를 수행하는데, 제공된 예시는 간단하게 수행

결과를 알리는 메시지로 이를 대신합니다. 만약, 실제 카페에서 사용된다면 주문사항들이 해당

카페 주문 관리 시스템으로 연동되어 해당 주문을 처리하는 바리스타가 시스템에 들어온 주문을

처리하는 프로세스가 가능할 것입니다.

6) 다시 Lex 콘솔로 돌아와서, Lambda initialization and validation 과 Fulfillment 에 조금전

생성한 cafeOrderCoffee 를 선택하고 Save Intent 버튼을 누릅니다. 만약 드롭다운 목록에

해당 Lambda 함수가 표시되지 않을시에는 현재의 Cafébot 콘솔에서 나갔다가 다시 들어오면

생성된 Lambda 함수를 선택할수 있습니다.

7) 모든 구성을 완료하면 Save Intent 버튼을 누른후 Build 이후 Bot 을 테스트 해 봅니다.

8) 만약, Lambda 와의 연동에 문제가 있다면 다음과 같은 에러가 나타나게 되는데 대부분

ChatBot 이름이나, Intent 또는 Slot 명이 Lambda 함수에 설정되어 있는 이름들과 일치하지

않아서 이므로, 다시한번 잘 확인하시기 바랍니다. (*Intent 명 대소문자 구분)

Page 20: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 20 of 26

9) Build 가 정상적으로 종료되면 잘 동작하는지를 다시한번 테스트 해 봅니다. 정상적으로

수행된다면 모호성제거 (Validation Hook)와 요청 처리(Fulfillment)를 모두 수행해 보세요.

(사용자 응답에 대한 Validation : 질문반복) ( 필수 정보가 수집되면 수행 : Fulfillment)

10) 사용자 응답에 대하 Validation 기능으로 인해 모호한 답변이 왔을때 질문을 반복하게 되는데,

만약 사용자가 해당 질문 표현을 이해하지 못해서 모호한 답변을 준 것이라면 결국 전체

대화를 완료하지 못한채 프로세스가 종료되거나, 사용자가 사용을 중지하게 될 것입니다.

이러한 상황을 해결하기 위해, 사용자에게 같은 질문이라도 다양한 방식으로 할수있는 설정이

가능합니다. 아래와 같이 Slot 의 특정 Prompt 항목중 추가 표현을 원하는 항목의 톱니바퀴(*)

모양의 아이콘을 눌러, 오른쪽과 같은 화면을 통해 추가적인 질문을 생성합니다.

11) 변경사항 저장후 Build 를 클릭하고 테스트 해 봅니다. 오른쪽 화면과 같이 모호한, 잘못된

응답이 나왔을때 질문을 반복수행 하는데, 같은 질문이 나오는 대신, 전단계에서 추가한 다른

표현의 질문이 나옵니다.

Page 21: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 21 of 26

단계 6. 배포 (Publish) – 추가(Optional) 실습

Bot 의 모든 구성및 테스트를 마치면 배포(Publish) 단계에 들어가며, 우측 상단에 Publish 버튼을

누르면 다음과 같은 Alias 설정 상자가 나옵니다. Alias 는 Bot 별로 참조할수 있는 별칭으로,

하나의 Bot 을 여러개의 별칭을 통해, 다양한 버전의 ChatBot 을 구성할수 있습니다.

1) 구성한 Bot 에대한 Alias 설정 : CoffeeBotTest

다음 단계에서는 모바일 App 또는 기존의 SNS 채팅서비스와 연동을 위한 설정페이지로 넘어가게

됩니다.

Page 22: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 22 of 26

Go to Channels 를 클릭하시면 Facebook, Twilio, Slack 등과 연동할수 있는 페이지가 나옵니다만,

이번실습에서는 다루지 않습니다. 대신 Channels 아래 Learn more 라는 URL 을 따라가시면 설정

방법이 한글로 상세하게 설명되어 있으니 추후 직접 테스트 해보시기 바랍니다.

2) 이번 실습에서는 Mobile HUB 와의 연동을 통해 쉽고 빠르게 모바일에서 여러분이 생성한

CoffeeBot 을 테스트 해 보도록 하겠습니다. 이를위해 Publish 화면에서, Integrate with Mobile

Hub 항목을 클릭합니다.

3) 다음으로 바로 MobileHub 프로젝트 화면으로 이동하는데, 화면에 프로젝트 이름,

CoffeeBotTest 라고 이름 짓고, CoffeeBot 체크박스를 선택한 후 Create Project 를 클릭합니다.

4) 화면 중간에 위치한 Conversational Bots 을 클릭하고, 다음 화면에서 Import a bot 을

선택합니다. 이후, 화면하단에 여러분이 만드신 CoffeeBot 이름이 나오는데 이를 선택하고

Import 버튼을 클릭합니다.

Page 23: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 23 of 26

5) 이후 나오는 화면에서 좌측하단에, 테스트를 원하시는 모바일 OS 를 선택 할수 있는데

여러분이 테스트를 원하시는 OS 를 선택해 줍니다. 실습에서는 Android 를 선택하고 진행해

보도록 하겠습니다.

6) 이후 화면에서 Download the sample app 을 클릭하시면, 여러분이 만드신 CoffeeBot 이

포함된 Sample App 이 압축파일의 형태로, 제공됩니다. 테스트를 위해 해당 압축파일을 특정

폴더에 풀어 놓습니다.

Sample App 의 빌드 및 테스트를 위해서는 다음사항들이 필요합니다.

Gradle : https://gradle.org/install#with-scoop

Android Studio : https://developer.android.com/studio/index.html

Android Studio 에서 Andriod 가상 디바이스 생성

Android Studio 설치가 완료되면 아래의 링크에 나온 절차에 따라 테스트에 사용할 Android

에뮬레이터를 설정해 줍니다.

http://docs.aws.amazon.com/ko_kr/pinpoint/latest/developerguide/getting-started-android-

virtual-device.html

7) 설치된 Android Studio 를 열고 Import project (Eclipse ADT, Gradle, etc)를 선택합니다.

Page 24: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 24 of 26

8) .zip 파일을 압축 해제한 폴더를 열고 MySampleApp 폴더를 선택합니다. Android Studio 가

프로젝트를 가져와 Gradle 을 사용하여 빌드합니다.

9) Gradle 플러그인 업데이트를 권장하는 대화 상자가 표시되면 Don't remind me again for this

project 를 선택합니다. Build 가 모두 완료되면 여러분의 휴대폰(USB 케이블 필요) 또는

이전단계에서 생성해 놓은 가상 디바이스(에뮬레이터)에서 테스트 해 볼수 있습니다.

10) Build 완료후 테스트를 위해 위해 도구모음에서 Run(실행) 아이콘을 클릭합니다.

11) Select Deployment Target 에서 미리 실정해둔 가상 디바이스를 클릭합니다.

12) 만약 USB 케이블과 Andriod 폰이 있다면 여러분의 휴대폰에서 직접 테스트 해 보실수

있습니다. 이는 개발자 모드(Debug 모드) 설정이 필요하며 자세한 부분은 인터넷 검색을 통해

확인하시기바랍니다.

Page 25: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 25 of 26

13) 음성 테스트를 위해서는 Voice to Voice Demo 를 선택하시면 우측과 같은 화면을 통해 Polly

와 연동된 음성 ChatBot 을 테스트 해 보실 수 있습니다.

.

Page 26: Amazon Lex 와 Lambda 를 이용한 Services Bootcamp... · 2017-05-31 · Lex에 미 구성해서 알려주고, 학습하도록 하는 과정니다 . 또한 이과정을 통해 최종

Amazon Web Services – AI Services Bootcamp Lab guide May 2017

Page 26 of 26

14) 여러분의 Android 폰에서 직접 CoffeeBot 을 설치하고 테스트 해 보시려면 아래 URL 을

모바일폰 브라우저에 입력하여 APK 파일을 다운로드 받으세요.

http://bit.ly/2rq7AKa

고생하셨습니다!

Amazon Lex 와 Lambda 를 이용한 CoffeeBot 만들기 실습을 실습을 모두 마치셨습니다.

*본 실습은 AWS AI Blog 에 포스팅된 내용을 손쉽게 따라 하실수 있도록 단계별로 각색되어

만들어졌습니다. (원문링크)