![[인공지능 챗봇] Dialogflow로 콘도 예약 챗봇 구현하기 - (2)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAuqDS%2FbtrbJbJiccg%2F9NoH0GSMWXjZE40ABGHVJK%2Fimg.png)
목표
콘도 예약 서비스를 제공하는 인공지능 챗봇을 Dialogflow로 구현하겠습니다.
목차 클릭하면 해당 목차로 이동합니다.
개요
이 전 포스팅에서 Dialogflow에 대한 배경 지식과 간단한 사용법에 대해서 알아보았습니다.
참고 : [AI Chatbot] Dialogflow로 인공지능 챗봇 구현하기 - (1)
이번 포스팅에서는 작성한 시나리오를 기반으로 인공지능 챗봇을 직접 구현해보도록 하겠습니다.
시나리오 기반 Entity 설계
우선 챗봇 설계를 하기 전에 시나리오를 확인하겠습니다.
제가 저번에 작성했던 시나리오의 일부입니다. 게시글 작성 당시보다 조금 수정되었습니다.
설계하고자 하는 챗봇은 콘도 예약 뿐 아니라 여러가지 서비스를 제공할 수 있는 챗봇입니다.
그래서 챗봇에 진입(채팅방에 입장)했을 때 어떤 서비스를 이용할 것인지 먼저 선택합니다.
그리고 콘도의 종류, 투숙 인원, 투숙 날짜, 어느 방을 이용할 것인지 순서대로 입력하고 예약을 종료합니다.
그럼 입력되는 내용들 중에서 어떤 정보가 필요한지 감이 오죠?
이렇게 필요한 정보들을 뽑아내는데 성공했다면 DB에 저장하는 것이 목표입니다.
이를 기반으로 DB에 어떤 정보들을 저장할지 생각해봐야합니다.
저는 서비스, 콘도 종류, 이용할 방, 투숙 인원, 입실 년·월·일, 퇴실 년·월·일을 DB에 저장할 필드로 결정했습니다.
챗봇의 정확성을 높이기 위해서 입실, 퇴실 날짜를 각각 년·월·일을 나눠서 저장합니다. (입력은 한 번에 합니다.)
그리고 이 때는 사용할 DB를 결정하지 않았고 어떻게 구성되어 있는지 알지 못했습니다.
Date라는 자료형을 지원하는 DB라면 한 번에 저장할 수 있겠지만 그렇지 않다면 따로 저장해서 추가적인 코드로 제어해야한다고 생각했습니다.
(아마 실무에서는 사용할 기술들을 결정해놓고 진행하지 않을까 생각합니다.)
위 표와 같이 정의된 데이터를 기준으로 Entity를 작성할 수 있습니다.
Entity명을 보면 데이터의 필드명과 일치하는 것을 볼 수 있습니다. (꼭 일치해야하는 것은 아닙니다.)
이렇게 설계된 Entity를 Dialogflow에서 구현해보겠습니다.
위와 같이 Entity를 생성했습니다. (생성 과정은 이전 포스팅에 있습니다.)
그 중 퇴실 날짜를 저장하는 Entity를 확인해보겠습니다.
보시는 것처럼 입력할 수 있는 최대한 많은 경우의 수를 다 입력해놓았습니다.
사람이 챗봇에 어떻게 입력할지 모르기 때문에 최대한 많은 경우를 학습시켜놔야합니다.
Intent 설계
이제 작성된 Entity를 어떤 식으로 입력 받아야할지 대화의 흐름을 설계해야합니다. 이를 Intent라고 합니다.
위 시나리오에서 확인한 순서대로 Intent를 설계하겠습니다.
제가 원하는 챗봇은 콘도 예약을 포함한 다양한 서비스를 제공하는 챗봇입니다.
따라서, 어떤 서비스를 입력받을지 입력하는 Intent를 작성해보도록 하겠습니다. Intent명은 "chatbot_services"입니다.
해당 Intent의 일부입니다. 한글은 띄어쓰기도 다른 단어로 인식되기 때문에 섬세한 학습이 필요합니다.
보시는 것처럼 문장을 입력하면 Dialogflow에서 자연어 처리를 통해 Entity를 찾아냅니다.
혹시 제대로 인식이 안된다면 드래그해서 범위를 조절하거나 Entity를 결정할 수 있습니다.
만약, 문장에 필요한 정보가 없다면 Action and parameters에 있는 PROMPTS에 작성된 내용을 사용자에게 출력합니다.
반대로, 문장을 잘 입력받아서 Entity에 정보를 저장하면, 사용자에게 올바른 대답도 해주어야 합니다.
Text Response는 사용자에게 문장을 출력하겠다는 의미입니다.
"Shift + Enter"를 입력하면 개행을 할 수 있고, Entity명 앞에 $를 붙이면 해당 Entity의 값을 출력할 수 있습니다.
계속해서 시나리오대로 다음 Intent를 작성해야합니다.
Follow-up Intent
Intent에는 대화의 흐름을 이어주는 Follow-up Intent가 있습니다.
해당 Intent가 끝나면 자연스럽게 다음 인텐트로 이어주는 것입니다.
생성된 Intent에 마우스를 올리면 오른쪽에 "Add follow-up Intent"가 나옵니다. 이걸 클릭하면 리스트가 나열됩니다.
"Custom"을 클릭하면 새로운 Intent가 생성됩니다. 그 Intent를 눌러서 들어가면 다음과 같이 되어 있는 것을 볼 수 있습니다.
생성된 Follow-up Intent의 Context입니다. Context는 대화의 순서를 결정해주는 역할을 한다고 했습니다.
Input Context에 "chatbot_services - followup" 과 같은 Context가 생성되었습니다.
이게 있기 때문에 해당 Intent가 실행된 후에 이 Intent가 실행되는 것입니다.
기존 Intent를 보면 Output-Context에 동일한 Context가 존재할 것입니다.
이렇게 시나리오대로 이어나가면 됩니다.
아까, "Add Follow-up Intent"를 눌러서 나오는 리스트를 보시면 Yes, No 등 다양한 Intent를 작성할 수 있습니다.
이를 활용해서 다양한 기능을 하는 챗봇을 설계할 수 있습니다.
Fallback Intent
사용자가 정상적으로 내용을 입력했을 때는 위와 같이 진행됩니다. 하지만, 사용자가 뜬금없는 내용을 입력했다면 어떻게 해야할까요?
이 때 필요한 것이 Fallback Intent 입니다. 챗봇이 사용자의 말을 이해하지 못했을 때 진행하는 Intent입니다.
시나리오 상 서비스(콘도 예약)를 입력하고 이용할 콘도의 종류를 입력해야합니다.
콘도 종류를 입력 받을 때 제대로 입력하지 않았을 경우를 대비한 condo_type - fallback Intent를 작성하겠습니다.
Follow-up Intent를 생성하는 것과 동일한 방법으로 Fallback Intent를 생성합니다.
위와 같은 Input Context를 가진 fallback Intent가 생성됩니다.
지금까지 입력한 것은 서비스밖에 없기 때문에 잘못 입력했을 경우 이 fallback Intent가 생성되는 것입니다.
제대로 작동하는지 확인해보겠습니다.
콘도를 예약하겠다고 말한 다음, 아무 말이나 입력햇습니다.
위와 같이 condo_type - fallback Intent가 실행되면서 올바른 콘도명을 입력하라고 출력됩니다.
기본적인 Intent 생성은 위와 같고, 이제 시나리오에 맞게 모든 Intent를 작성해야 합니다.
각각 시나리오에 맞는 Intent와 잘못 입력했을 때를 대비해서 Fallback Intent까지 설계합니다.
결과
이렇게 기본적인 챗봇의 설계가 완성되었습니다.
Dialogflow에서 다양한 플러그인을 제공하는데 그 중 Web Demo를 활용해 결과를 확인하겠습니다.
왼쪽 메뉴의 Integrations를 클릭하고, Web Demo를 선택하면 다음과 같은 화면이 나옵니다.
저는 이미 활성화를 시켜놔서 위와 같이 나오지만, 처음 들어가면 ENABLE을 눌러 활성화를 시켜야합니다.
그리고 해당 URL을 들어가면 챗봇을 이용할 수 있습니다.
정리
이렇게 콘도 예약을 위한 챗봇을 설계가 완성되었습니다.
다음 포스팅에서는 DB에 연동해서 실제로 작동하는지 확인하는 과정을 진행하고 마무리를 짓겠습니다.
'프로젝트 > 인공지능 챗봇(AI Chatbot)' 카테고리의 다른 글
[인공지능 챗봇] 콘도 예약 챗봇 최종 기획서 및 회고 (1) | 2021.08.18 |
---|---|
[인공지능 챗봇] Dialogflow로 인공지능 챗봇 구현하기 - (1) (0) | 2021.08.04 |
[인공지능 챗봇] 인공지능 챗봇 시나리오 작성, Decision tree란 (0) | 2021.07.15 |
[인공지능 챗봇] 인공지능 챗봇 기획, 기획서 제안 (0) | 2021.07.14 |
[인공지능 챗봇] 인공지능 챗봇의 정의, 종류, 특징 (0) | 2021.07.13 |