본문 바로가기

내 이야기/프로젝트

점심 메뉴 추천 챗봇(Google Dialogflow 엔진)

2020.05, 혼자

개요

프로젝트와 관련되어 간략한 챗봇 개념 및 기술을 소개하는 자리가 있었다.

소개하며 겸사겸사 여러 엔진의 챗봇을 사용해보며 국내 여러 기술사의 레퍼런스를 많이 봤다.

구글 엔진이 당연히 제일 인기 많을 줄 알았는데 오히려 제일 말이 많았다...

 

왜 그럴까 하는 생각도 있었고 재밌을 것 같아서 Dialogflow 엔진을 활용해서 챗봇을 만들어봤다.

결론부터 말하자면, Entity가 인식이 잘 안됐다... (ㄴㄴ 같은 걸 자꾸 못알아들어서 힘들었다)

학습을 할 때 밥 > 밤 이런 부분들도 밥을 밤으로 오타친 걸로 인식하고...

 

그래도 다양한 옵션과 커스터마이징이 가능했고 무엇보다도 특정 Entity를 요구하는 시나리오를 설계하면

되물어서 특정 Entity를 알아내오도록 하는 부분은 굉장히 맘에 들었다

(다른 엔진에서는 직접 개발해야했었는데 여기서는 기본적으로 설정 가능했다)

 

예를 들어, 점심 메뉴 추천 -> 카테고리 까지 이어져야 답변을 줄 수 있는 시나리오가 있다고 가정했을 경우

카테고리(Category entity) 를 받을 때 까지 되물을 수 있었다.

 

여튼 각설하고 Google Dialogflow 엔진을 써서 성수 근처의 점심을 추천하는 챗봇을 만들게 되었다.

(성수에는 IT산업벨리도 있고 여러 직장들도 많아서 점심 때 다들 고민이 많을 것 같다...)


구현

 

기능 소개

 

전체 시나리오
기술 아키텍처
기술 Flow 

 

구현하며 어려웠던 점

챗봇 질문을 어떻게 웹 서버로 가지고 올지

웹 후킹이라는 기술을 알지 못했는데 webhooks 라이브러리를 통해 웹에서 날린 request를 다른 서버에서 가로챌 수 있었다(후킹). 이를 통해 내가 구축한 웹 서버로 가지고 와서 발화의도를 파악하고 이에 맞는 답을 제공했다.

 

식당 추천 알고리즘?

추천 알고리즘 자체를 구현하지는 못했다. 단순히 선호도만을 통해 랜덤에 가깝지만 선호도와 날씨를 약간은 고려한 추천을 해줬다.

 

실제 존재하는 식당인지 판단 여부

네이버 지도 API를 통해 실제 존재하는 식당인지를 판단한다. 원래 하루에 한 번 배치를 통해서 만약 폐업한 식당의 경우 데이터를 날려줄려고 했는데 이까지 구현할 여유가 없어 이는 구현하지 못했다. 

 

배포는 어떻게?

AWS EC2를 활용해 윈도우 서버에 해당 서버를 업로드했다.

그리고 로컬 서버를 업로드한 다음 이를 ngrok 솔루션을 통해 외부 포트로 이어질 수 있도록 연동했다. 

Ngrok 관련 링크

 

Ngrok 로컬 네트워크 연결

우리의 로컬 주소를 Ngrok를 통해 연동하여 외부에서 접근할 수 있도록 할 수 있다 너무 간단하고 유용하여 정식 배포할 프로젝트가 아닐 때 이용하면 유용할 듯하다 #1 Ngrok 다운로드하기 https://ng

woongsin94.tistory.com

 


완성

https://bot.dialogflow.com/swyoon94

 

성수_점심추천봇

 

bot.dialogflow.com

#1 점심 추천받기
오늘 뭐먹지, 뭐먹을까, 점심 추천좀, 밥추천, 밥, 뭐먹? 등으로 대화시작
(카테고리는 없음, 한식, 일식, 밥류, 면류, 양식 등 다양하게 준비되어 있으며 당연히 유사어도 가능!)

#2 밥집 추가하기
밥집 추가, 맛집 등록, 나도 추천해줄게 등으로 대화시작
검색어를 입력(실제 네이버 지도 API를 통해 성수지역에 존재하는 음식점으로 검색)

#3 관리자메뉴
메뉴리스트 초기화(이건 내가 사용할 기능)

 

다음과 같이 이용 가능하며 운용하다가 서버를 내릴 예정이다(AWS 프리티어가 다 될 때까지..).

(프리티어가 만료되어 서버는 내리게 되었습니다..)

재미로 만들어봤기에 실용성은 잘 모르겠다.

 

사실 매번 점심 메뉴를 고민해도 의논을 하면 만족도가 높은 메뉴가 나오는 것 같다...

그래도 Ngrok, Webhooks, flask 등 처음 접해본 기술들도 있었고 업무 등 여러모로 도움이 많이 되는 경험이었다!