챗봇 만들기 - 상태관리

이동근·2021년 4월 12일
0

Project

목록 보기
19/20
post-thumbnail

저번 단계 까지 해서 내가 원하는 영화관의 영화제목별 시간까지 모두 완성을 했다.

단순한 큰 FLOW는 완성을 하다보니 단순하게 사용자와 원하는 대답들만들 얻을 수 있으면 여기서 완성시킬 수 있었다.

하.지.만

Chatbot을 사용하는 사용자가 우리가 원하는 대로 답변을 항상 주는 것이 아니기 때문에 어떠한 상황에도 대처할 수 있도록 상황을 쪼개서 관리를 해줘야 한다.

첫 사진 처럼 단순히 대화를 구현하는 것을 더욱 세분화 시켜서 각각의 상황을 8개의 단계로 나눠주었다.

  1. START : chatbot을 시작하면 가지게 되는 상태로서 다음 상태는 무조건 RANK_OR_THEATER을 가진다.

  2. RANK_OR_THEATER : 챗봇을 시작하면 가지게 되는 상태로서 아직 RANKTHEATER 중 아무것도 고르지 않은 사용자가 가지게 되는 상태이다. 챗봇을 사용하게 되면 사용자의 첫 상태는 START가 되고, 다음 상태는 RANK_OR_THEATER이 된다.

  3. RANK : 현재 상태가 RANK_OR_THEATER에서 순위를 입력하게 되면 넘어가게 되는 상태로 BOX OFFICE 10위 까지의 채팅 내용을 가지고 올 수 있는 단계 이다.

  4. THEATER: 현재 상태가 RANK_OR_THEATER인 상태에서 영화관이라는 단어를 입력하게 되면 얻게 되는 상태로 내 주변의 CGV를 검색해서 알려준다.

물론 RANK 단계와, THEATER 상태는 서로서로 왔다 갔다가 가능하다.

  1. SELECT : THEATER 단계 에서 검색한 영화관을 선택하는 단계로 알고싶기를 원하는 CGV를 선택하면 된다.

  2. TIME : SELECT 단계에서 고른 영화관의 상영하는 영화제목과 시간을 보여주는 단계이다.

  3. CGV : 예매를 위해 웹페이지로 연결이 되는 단계

  4. BAD REQUEST : 그 상황에서 원하는 단어를 얻지 못했을 때 가지게 되는 상태로서 이 단계는 RANKTHEATER 단계로 돌아 갈 수 있다.

이렇게 8개의 상태로 나누어 주었다.

코드

이런식으로 단순히 원하는 메세지가 오면 reponse를 보내는 상태에서

이렇게 세분화 해서 상태를 관리를 해주게 되었다.

이렇게 상태를 세분화해서 해주게 되다 보니 메세지를 보내는데 있어서도 바뀌게 되었다.

처음의 START 상태와 다음 상태인 RANK_OR_THEATER를 가지게 되다 보니 메세지를 보내는 것은 현재 상태보다 다음 상태를 기준으로 가지는데 더욱 좋을 것 같았다.

그리고 상태를 데이터베이스에 저장을 해줌으로서 관리를 해주었다.

데이터베이스

챗봇을 시작하고 '안녕'을 입력하게 되면
user 테이블에 어떤 User가 사용하게 되는지 저장이 된다.

이 User테이블과 message 테이블은 One To Many로 연결이 되어있다.
그리고 messages 테이블을 보게 되면

current_state : START
next_state : RANK_TEATER

요런식으로 현재상태는 어떤 단계인지, 그리고 다음상태가 어떤지에 대해 저장을하게 된다.

그래서 만약 다음 상태가 RANK_OR_THEATER이면

이런 응답을 할 수 있도록 각각 함수로 만들어 주었다.

응답별로 함수를 만들어 준 이유는 - 모든 응답을 하나의 함수로 만들어 주게 되면 오류가 생겼을때 응답을 내보내는 함수 전체를 수정해줘야 하기 때문에 부담이 되고, 오류가 났을 때 어디서 어떻게 오류가 났는지에 대해서 빠르게 대처할 수 있기 때문이다.

그래서 다음 상태를 기준으로 내가 응답을 할 수 있도록 구성했다.

이렇게 다음 상태가 어떨때 어떤 응답을 보내는 Process_message 함수를 통해 답변을 보냈다.

어느 정도의 챗봇을 진행시킨 후 데이터베이스를 보게 되면

현재 id가 1인 사용자가 어떤 텍스트를 보냈고, 그 사용자가 어떤 상태인지 그리고 다음 상태는 어떨지 데이터베이스에 저장을 해두는 방식으로 상태관리를 해주었다.

추가

추가적으로 endpoint를 만들어주는 View를 보게 되면


chatbot을 만들면서 가장 큰 Blocker 였다... 처음에는 상태관리를 왜 해주는지에 대한 의문이 생겨서 굳이 만들어 주지 않았지만, 점점 만들어 갈수록 사용자를 관리해줘야 한다는 생각이 들었다.

profile
하루하루 1cm 자라는 개발자

0개의 댓글