0. 들어가기
-. 이전 포스팅에서 다룬 카카오 챗봇에 대해 조금 더 상세하게, 사용자가 입력한 채팅에 대해 대응하는 챗봇을 만들어본다.
1. 카카오챗봇 시나리오 작성
-. 카카오 챗봇은 사용자의 채팅에서 특정 문장(패턴 발화라고 부른다)을 검출해서 i) 시나리오의 진입점(entry)을 확인하고, 이어서 ii) 출력을 위한 필수 파라미터를 모두 갖추게 되면 챗봇이 출력을 하게된다. 아래 그림은 내가 이해하기 위해 그린 순서도다.
1) 시나리오 진입점 설정
-. 앞의 포스팅에서 특정 문장으로 이루어진 채팅에 대해 대응하는 시나리오를 만들었는데, 사용자가 입력할 모든 문장에 대해 발화 패턴을 만드는 것은 쉽지 않다. 단순하게 2개의 단어로 이루어진 "커피 주세요" 라는 문장에 대해, "커피"와 "주세요" 각각에 대한 동의어를 모두 구성해서 넣으려면 수십 줄의 문장을 설정해야 한다. 이를 방지하기 위해 카카오챗봇은 엔티티(entity)라고 부르는 동의어 그룹을 설정할 수 있게 했다.
-. 위는 내가 카페를 운영한다고 가정하고 만든 커피 주문을 받는 챗봇의 진입점이다. 2개의 단어 "커피"와 "주세요"로 이루어진 문장을 entry로 삼은 챗봇 시나리오를 작성했고, "커피"와 "주세요" 라는 두 단어 각각에 대해 동의어를 지정했다. 난 총 3개의 사용자 엔티티를 작성했다.
-. 3개의 엔티티 중 coffee_name은 커피 일반 (진입점에 사용)에 대한 설정, suffix.order는 주문(주세요)에 대한 동의어 처리를 위한 엔티티다. 각 엔티티의 상세 설정은 아래 그림을 참고하자.
2) 챗봇 출력 만들기
-. 챗봇이 출력을 하기 위해 반드시 필요한 변수들을 카카오챗봇에서는 필수 파라미터라고 부른다. 챗봇의 출력은 고정된 텍스트나 그림 만으로 이루어질 수도 있고, 사용자가 채팅으로 입력하는 단어들에 대해 각기 다른 반응을 출력할 수도 있다.
-. 나는 사용자가 입력한 '커피의 종류'와 '잔 수'를 포함한 출력을 구성하고 싶었고, 그래서 필수 파라미터에 coffee_name과 number(카톡 시스템 기본 제공하는 숫자/개수 대응)를 추가했다.
-. 각 필수 파라미터를 채우기 위해 챗봇은 '되묻기'라는 행동을 하는데, 해당 되묻기에 사용자가 지정한 파라미터가 포함된 답을 하지 않을 경우 반복적으로 같은 목적의 질문을 하게된다.
-. 이렇게 작성을 하면, '커피 주세요' 엔트리에 대해 아래와 같이 챗봇 대응을 구성하는 것을 확인할 수 있다.
2. (계획) 시나리오 대응 개선에 대해 공부할 내용
-. 앞에서 다룬대로, 기본적인 카톡 챗봇 대응은 가능하게 되었다. 하지만 아직 부족한 것들이 많은데, 예를들어 '숫자'를 세는 것에 대해 카톡의 sys.number는 '1, 2, 3, 4'와 '하나 둘 셋', '한잔 두잔 세잔' 모두 @sys.number에 해당하는 파라미터로 받아온다. 아래 채팅처럼.
-. 그리고 엔티티 설정을 통한 파라미터 입력 시, 동의어를 처리하여 대표 단어로 반응하는 것이 아니라, 입력된 동의어 그 자체로 출력한다.
-. 위의 두가지 사례와 같이 기괴한 대응을 하게 되는데, 이를 방지하기 위한 설정들을 조금 더 공부하여 다음 포스팅을 할 계획이다.
※ 위의 경우를 쉽게 해결하기 위해, 혹시 대표 엔트리로 출력이 가능한지 카톡 챗봇 고객센터에 물어봤는데.. 예상했지만 매크로 답변이 왔다. 그래서 조금 귀찮지만, (어차피 쓸 계획이었으니까)카톡 챗봇의 스킬을 이용해 API 서버를 거치는 응답을 사용하기로 했다. 다음 포스팅을 보자.
'python' 카테고리의 다른 글
[KAKAO + FLASK] 카카오 챗봇 만들기 (4) - 챗봇 출력 예제 (0) | 2021.12.26 |
---|---|
[KAKAO + FLASK] 카카오 챗봇 만들기 (3) - API 서버 연동 (3) | 2021.12.18 |
[KAKAO + FLASK] 카카오 챗봇 만들기 (1) - 시작 (0) | 2021.12.03 |
[KAKAO + FLASK] 이미지 업로드용 카카오챗봇 + 이미지 뷰 페이지 (0) | 2021.12.03 |
[python/메모] pandas dataframe에서 특정 값의 위치를 찾는 방법 (0) | 2021.07.08 |
최근댓글