일기장
article thumbnail

과제 내용

코멘토 직무부트캠프 3주차 과제

 


 

Dialogflow 환경 구축

Dialogflow에 가입 후 로그인을 한 뒤 create new agent를 선택하면 위와 같은 창이 나옵니다. 참고로 agent는 Dialogflow에서 하나의 프로젝트를 의미합니다. 챗봇을 만들기 위해 일단 위의 Agent name이라는 부분을 작성하여 프로젝트 명을 만들어주고, 그 다음 자신에게 맞는 주요 언어와 표준 시간대를 선택해주면 프로젝트를 생성할 수 있습니다.

 


 

Dialogflow 사용법

왼쪽 사이드바를 보면 여러 메뉴들을 볼 수 있습니다. 하지만 이 중 Dialogflow를 통한 챗봇 생성에 있어서 핵심이 되는 부분은 Intents와 Entities 총 두가지입니다.

 

Intents

Intents는 한국어로 직역하면 의도입니다. 즉, 챗봇으로 하여금 문장의 의도를 파악하게 하여 챗봇의 흐름을 생성합니다.

간단한 예시를 들어보겠습니다.

우리가 다른 사람들에게  '안녕'이라고 반말을 하든 '안녕하세요'라고 존댓말을 하든 'ㅎㅇ'와 같이 인터넷 용어을 사용하든 'Hello'와 같이 영어를 사용하든 듣는 사람들은 상대방이 '인사'의 의도를 가지고 발화를 하였다고 생각하고 그에 대한 응답을 할 것입니다.

 

사람들은 상대방의 발화에서 의도를 찾아내어 판단하는 과정에 익숙하지만, 챗봇은 그렇지 못합니다. 그렇기에 우리는 챗봇에게 사용자가 어떤 '의도'로 이러한 말을 했는지 판단할 수 있도록 가이드라인을 제시해주어야 합니다. 고맙게도 Dialogflow는 Intents 탭을 이용하여 굉장히 쉽게 챗봇을 학습시킬 수 있습니다.

 

Agent를 생성하였을 때 기본적으로 제공되는 Default Welcome Intent를 한번 살펴보겠습니다. Default Welcome Intent는 유저가 챗봇에게 인사말을 건네었을 때 응답을 처리합니다. 참고로 또 하나의 기본적으로 제공되는 Default Fallback Intent는 유저의 의도를 파악하지 못하였을 때 즉, 실패 응답을 처리해줍니다.

 

Intent 내부의 Training phrases 탭에서 챗봇에게 발화를 학습시킬 수 있습니다. 아래의 구들은 모두 공통된 '인사'라는 의도를 내포하고 있다는 것을 챗봇에게 학습시키는 것입니다.

 

Responses 탭에서는 챗봇이 위의 의도를 감지하였을 때 어떠한 응답을 내보낼 지를 결정합니다. 여러개의 응답이 있다면 무작위로 응답이 선택되어 챗봇이 반환시킵니다.

 

Action and parameters라는 탭은 무엇일까요? Dialogflow는 특정 Intent가 감지되었을 때 특정 동작을 수행하는 시스템입니다. 이렇게 의도가 감지되었을 때 수행되는 Action의 이름을 이 탭에서 바꿀 수 있습니다.

 

파라미터는 챗봇이 유저의 발화에서 얻어낼 수 있는 키워드를 의미합니다. 위의 Required를 체크하면 IS LIST 옆에 Prompts가 활성화 되는데, 이 경우 파라미터값을 유저와의 대화에서 필수적으로 얻어내야 하기 때문에 키워드 감지에 실패했을 경우 사용자에게 Prompts에 작성한 문장을 내보내게 됩니다. 이를 어떻게 활용할 수 있을 까요?

위와같이 value값을 이용하면 챗봇의 응답을 좀 더 유연하게 만들 수 있습니다. 

그렇다면 위에 언급된 Entity는 무엇일까요?

 

Entity

위와 같이 Intent에서 Phrases를 학습시킬 때 Entity 단위로 학습을 시킬 수 있습니다. 우리는 사전에 1번은 서울한화콘도로 정의하기로 합의를 했기 때문에 1번이 서울한화콘도임을 알고 있습니다. 그렇지만 챗봇은 1번이 왜 서울한화콘도와 같은 의미를 지니고 있는지 이해하지 못할 것입니다.

 

Entity는 이러한 점을 보완하기 위해 챗봇에게 유의어를 지정해줄 수 있습니다. 이 경우 엔티티를 학습시켰기에 챗봇은 사용자가 1이라 하든 1번이라 하든 서울이라 하든 한화라고 하든 상관없이 서울한화콘도라고 생각할 것입니다.

 


 

챗봇 서비스 구축

전주차 피드백 : 사용자에 대한 정보를 챗봇에서 받을 수 있어야 한다.

피드백 반영 : 사용자가 방옵션을 고르고 난 이후에 예약자에 대한 정보를 작성하게 한다.

 

 

엔티티 설계

챗봇을 만들기 위해 먼저 엔티티를 설계해야한다고 생각했습니다. 엔티티를 설계한다는 것은 데이터베이스에 어떠한 내용이 들어갈지 설계하는 것과 동일하기에 제가 만든 시나리오에서 어떠한 데이터가 필요한 지 파악해보았습니다.

엔티티 설명
@services 유저가 챗봇을 통해 이용할 서비스
@number_of_users 예약 인원 수
@checkin 체크인 날짜
@checkout 체크아웃 날짜
@condo_type 콘도의 종류
@condo_option 세부적인 방 옵션
@user_name 예약자 이름
@user_phone_number 예약자 전화번호

다만 Dialogflow에서 기본적으로 제공하는 엔티티들을 사용할 수 있다고 생각했습니다. 예를 들어 예약 인원 수의 경우 우리가 직접 하나하나 지정하는 것보다는 @sys.number을 사용하면 보다 간편하게 예약 인원 수를 감지할 수 있습니다.

 

이를 반영하면 아래와 같습니다.

엔티티 설명
@services 유저가 챗봇을 통해 이용할 서비스
@sys.number 예약 인원 수
@sys.date-time 체크인 날짜
@sys.date-time 체크아웃 날짜
@condo_type 콘도의 종류
@condo_option 세부적인 방 옵션
@sys.person 예약자 이름
@sys.phone-number 예약자 전화번호

 

@condo_type

 

Intents 설계

챗봇이 @Services 엔티티의 콘도 예약이라는 필드를 감지하면 Reservation 인텐트가 실행됩니다. 그 후 Add follow-up intent를 이용하여 예약인원, 체크인 날짜, 체크아웃 날짜, 머물고 싶은 콘도 종류, 방의 옵션, 예약자 정보를 순차적으로 받습니다.

 

이렇게 Add follow-up을 이용해 정보들을 순차적으로 받은 이유는 후에 챗봇 프로젝트의 크기가 커졌을 때 유저에게 필터링 된 DB 정보를 제공하기 위해서입니다. 예를 들어 예약인원과 날짜를 앞서 받으면 그 기간 동안 예약인원을 수용할 수 없는 콘도들은 제외한 상태로 유저에게 리스트를 보여줄 수 있습니다.

 

완성된 챗봇

 

 

 

'기타 > 코멘토 챗봇 직무부트캠프' 카테고리의 다른 글

코멘토 직무부트캠프 수강후기  (0) 2023.08.29
4차 과제  (0) 2023.08.22
2차 과제  (0) 2023.08.06
1차 과제  (0) 2023.07.30
profile

일기장

@공군급양

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!