PM 혹은 서비스기획자로 살아보자

카카오 챗봇 개념 공부 : (1) 엔티티 정의와 등록 방법 (feat. 사이드프로젝트 롤 챗봇)

유니 Uni 2022. 8. 16. 02:02
반응형

서론

사이드로 기존에 만들었던 챗봇을 심폐소생하려고 하는데 개념을 다 까먹어버렸다.

만들었던 당시보다 가이드가 많이 발전되어 있어서 챗봇의 기본 개념부터 익혀보고자 한다.

 

 

https://i.kakao.com/docs/getting-started-overview#%EC%B1%97%EB%B4%87-%EA%B4%80%EB%A6%AC%EC%9E%90%EC%84%BC%ED%84%B0-%EC%86%8C%EA%B0%9C

 

챗봇 관리자센터 개요 · 도움말 - 챗봇 관리자센터

<h2><a class="anchor" aria-hidden="true" id="챗봇-관리자센터-소개"></a><a href="#챗봇-관리자센터-소개" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width

i.kakao.com

위의 링크를 보고 나에게 필요한 부분을 정리해보고자 한다.

(참고로 카카오에서 챗봇을 만들기 위해서는 OBT 신청을 해야하며 기간이 꽤 소요된다. 공동작업자도 마찬가지이다. 만들 계획이 있다면 미리미리 신청해서 승인을 받아놓는 것이 좋다.)

 

이 글에서 사용되는 예시는 이번에 만드는 챗봇에 적용하기 위한 것일 수 있다.

(내가 만드는 챗봇의 주 기능은 '지금 롤 하고 있는지 알아내는 것'이다. 참고하면 이해가 더 쉬울 것...)

 

시작은 미약하지만 끝은 창대하리라

 

 

엔티티 (Entity)

엔티티 구조를 설계하는 것이 중요하다. 챗봇에서의 가장 기본적인 개념 중 하나이다.

 

- 사용자 발화 : 사용자가 봇과 커뮤니케이션하기 위해 내뱉는 말 또는 텍스트 등을 의미

- 엔티티(Entitiy) : 봇이 이해할 수 있는 용어를 체계적으로 정리한 데이터 사전

 

 

이렇게 보면 이해하기 힘들다.

아래 예시를 보자.

 

이해가 잘 된다.

역시 챗봇은 노가다의 산물이다.

csv를 통해 대규모 업데이트도 가능하다. 카카오에서 예시로 제공해준 포맷은 아래와 같다.

예시포맷

지금까지의 것들은 사용자가 직접 입력하는 '나의 엔티티' 에 대한 관리였고, 아래는 시스템에서 기본적으로 제공하는 엔티티이다.

 

예를 들어, 위 시스템 엔티티가 등록되어 있는 상황에서 사용자가 '올해 무슨 해야' 라고 발화하였다면?

챗봇은 올해를 @sys.date.period에 있는 대표엔트리(혹은 동의어)라는 것을 알아먹고 '올해[@sys.date.period] 무슨 해야'라고 이해할 수 있다. 이게 챗봇이 의미를 추출해내는 방식이다.

 

 

엔티티 입력

 

대강 이런 기능의 봇을 구현할 때 예상되는 사용자 발화를 생각해보자.

시나리오는 짜다가 말았다 아직 짤 생각이 없었다

 

 

크게 저런 케이스가 있다고 해볼 때 예상되는 사용자 발화들은 이러하다.

(사실 케이스는 지금도 무궁무진하게 떠오르지만 일단...)

 

- 지금 롤 하는지 알려줘
- 지금 게임하는지 알려줘
- 오늘 게임했는지 알려줘
- 어제 게임했는지 알려줘
- 얘 롤해?
- hideonbush 게임중?
- hideonbush 어제 게임했어?
- 롤 언제했어?

 

첨부터 닉네임을 입력해도 챗봇이 그 말이 닉네임임을 구분할 능력이 없기 때문에 여기서 엔티티로 등록해서 챗봇에게 의미를 주입시켜 주어야 하는 것은 시간 정도인 것 같다. (의식의 흐름이며 챗봇을 기획할 때는 달라질 수 있음 주의)

 

라이엇 오픈 api에서 제공하는 것은 현재하고 있는 게임 + 최근 전적 100게임까지이다.

참고...

 

이런 것을 생각해볼 때 너무 먼 과거의 경우 특정 시간을 잡더라도 대답이 어려울 수 있다.

그래서 구체적인 특정 datetime의 게임 전적 조회 기능은 제공하지 않는 것이 좋을 것 같다. (최소 스펙으로 가볍게 만들거지롱)

 

그렇다면 챗봇에서 제공할 수 있는 것은 :

1. 지금 게임 중인지 아닌지 여부 (Y/N) - @time.now

2. 마지막으로 게임한 시간 - @time.lastgame

 

이렇게 구분할 수 있겠다. 그걸 구분하기 위해 사용자 발화에 엔티티를 등록해보겠다.

 

 

관리자센터 > 시나리오에 들어가면 이렇게 발화를 등록할 수 있다.

 

아까 위에 언급한 발화를 분류해보자

- 지금 롤 하는지 알려줘 @time.now
- 지금 게임하는지 알려줘 @time.now
- 오늘 게임했는지 알려줘 @time.lastgame
- 어제 게임했는지 알려줘 @time.lastgame
- 얘 롤해? @time.now
- hideonbush 게임중? @time.now
- hideonbush 어제 게임했어? @time.lastgame
- 롤 언제했어? @time.lastgame

이런 식으로 등록할 수 있다. (노가다성 작업)

 

롤=게임=리그오브레전드로 따로 등록할까 고민하다가, 어차피 롤 묻는 용의 챗봇인데 너무 쪼개서 정확도가 떨어질까봐 그냥 목적어도 붙여서 등록했다.

 

이제 챗봇은 사용자가 지금 게임 중인지를 묻는지, 마지막 게임 시간을 묻는지를 파악할 수 있다.

(ㅋㅋㅋㅋㅋ근데 플로우 상 지금 게임 중 아니면 마지막 게임 시간을 추가 응답하는 게 자연스러운 것 같기도? 지금은 개념 공부니까 나중에 생각해보자^_^ 어케 완성되는지 많관부~)

 

 

다음글

2022.08.16 - [PM 혹은 서비스기획자로 살아보자] - 카카오 챗봇 개념 공부 (2) : 시나리오, 블록, 파라미터 설정

 

카카오 챗봇 개념 공부 (2) : 시나리오, 블록, 파라미터 설정

이제 남은 개념들 중 내게 필요한 것만 간단하게 정리하고자 한다. https://i.kakao.com/docs/key-concepts-scenario#%EC%8B%9C%EB%82%98%EB%A6%AC%EC%98%A4%EC%9D%98-%EC%A2%85%EB%A5%98 챗봇 관리자센터 개요..

kingged-uni.tistory.com

 

반응형