카카오톡 챗봇 만들기 - 스킬 서버 연결(ngrok 이용)

 

[데이터사이언스캡스톤디자인] 수업에서 sLLM을 활용하여 법률 상담 챗봇을 만드는 프로젝트를 진행중이다.

모델 구현을 어떤 방식으로 할까 고민해보았을 때, 카카오톡 챗봇에 우리가 개발한 모델을 연결하는 것이 사용자들에게 가장 접근성이 좋을 것 같아 카카오톡 채널에 연결을 시도하였다.

 

하지만.. 쉽지 않았다ㅎ

일단 나는 flask나.. 웹이나 서버쪽 수업을 들은 적이 없어서 더 어렵기도 했고, 카카오톡 챗봇 만든 사례들을 찾아보면 대부분 시나리오 형식으로 특정 input을 지정해주는 경우가 많았는데, 우리는 그렇게 특정 질문만을 정해서 받을 것이 아니었기 때문에..

 

그래서 대안책으로 생각한게 요즘 새로 나온 Langserve나 모델 구현 및 데모에 많이 쓰는 Streamlit인데,

이 두 방법을 사용해서 구현해본 것도 추후 포스팅 하도록 하겠다.

 

Langserve나 Streamlit으로 구현해보고 나니 그래도 카카오톡과 연결을 해보는 것이 좋을 것 같아서 다시 시도 중이고 관련해서 겪은 오류들이나 시행착오를 포스팅해볼 예정이다!

 

 

일단 카카오톡 챗봇은

	res = {
	        "version": "2.0",
			"template": {
				"outputs": [                
					{
						"simpleText": {
							"text": text
							}
						}
					]
				}
			}

 

이런 식으로 답변 형식이 지정되어 있어야 한다. 

그래서 모델을 구현할 최종 코드 파일을 저런식으로 만들 수 있어야 한다..

 

https://docs.kakaoi.ai/skill/voice_dev/skill_response/

 

Kakao i 기술문서

개발자 및 IT 전문가를 위해 제공되는 API 레퍼런스, 개발 가이드 및 예시 코드를 확인해보세요.

docs.kakaoi.ai

자세한 사항은 여기서 확인 가능 !!

 

 

일단 우리 조는, 시나리오 형식이 아닐 때도 챗봇에서 구현이 잘 되는지 연결을 확인하기 위해서 이 분의 포스팅을 활용하였다. (감사합니다..)

https://hotel-iu.tistory.com/26

 

파이썬 카카오톡 챗봇 만들기 flask 서버 및 api 사용하기

여기저기 검색을 해보니까 카카오톡 챗봇 만들기 포스팅 대부분이 발화 패턴에 관한 정보밖에 없어서 개발자가 원하는 문장을 api에서 자체적으로 인식하고 출력하는 아주 간단한 기능을 만드

hotel-iu.tistory.com

 

저 포스팅대로 코드를 따라 작성해준 후, 실행방법은

1. vscode에서 코드 열어준 뒤에 

python test2.py 5000

이렇게 입력한다. 그럼 일단 local에서는 돌아가는건데

여기서 중요한건 !!!!!!!! 꼭 뒤에 5000 붙여주기 !!!!!!!!!!!!!!!

코드에서 이렇게 5000을 지정해줬기 때문에.. 꼭 5000을 뒤에 붙여줘야한다..

5000 안붙이고 계속

python test2.py 만 주구장창 돌렸는데 연결 안되더라...

이제 localhost에서만 연결된거고 , 이걸 남들 컴퓨터에도 볼 수 있게 공유 도메인으로 바꿔줘야한다. 

goormide를 사용하는 방법도 있는데 일단 이번에는 ngrok을 사용하는 방법을 소개하겠다.

 

 

2. cmd창(명령프롬프트) 켜서 아래 처럼 입력해준다!

ngrok http 5000

 

 

++ 추가적으로 ngrok 설치도 애먹었던 사람으로서 설명을 덧 붙이자면,

ngrok은

-> powershell을 관리자 권한으로 열어야만 실행 가능하다!!! 그냥 vscode cmd 창에서는  설치안됨!!!!!!!!

 

내가 설치한 순서는

  • 스크립트 실행 정책 변경(powershell 스크립트 실행할 수 있도록)
Set-ExecutionPolicy Bypass -Scope Process -Force
  •  Chocolatey 설치 스크립트 실행
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
  • ngrok 설치
choco install ngrok

 

이렇게 했다!

 

다시 돌아가서.. ngrok으로 실행시킬 때

참고로, 위에 처럼 간단하게 ngrok http 5000 이렇게 해도 되지만,

ngrok http --domain=본인도메인주소 5000

이렇게 해도 된다. 5000은 port번호이고,

본인 도메인 주소는 ngrok 사이트에서 

여기서 확인 가능 ~~

ngrok http --domain=joint-sawfly-relieved.ngrok-free.app 5000

이런식으루..

 

암튼 이렇게 

입력해주면,,

이렇게 뜬다!!!

그럼 저 Forwarding에 있는 링크로는 다른 사람도 접속 가능한것!

 

 

3. 그럼 이제 저 링크를! 카카오톡 챗봇에 연결하면 된다

카카오톡 챗봇 관리자 사이트에서

요렇게 !! 스킬을 새로 생성하여 URL에 저 Forwading URL을 넣어주면 된다 ~~

 

설명은 아무거나 넣어도 되고 오른쪽 위에 [저장]버튼 잊지말기!!!

 

 

4. 이제 이 스킬을 폴백 블록에 연결하면 끝!

요렇게 ~~

 

위에 파라미터 설정을 방금 만든 스킬로 지정해주고,

밑에 봇 응답을 스킬 데이터로 지정해주면 된다!

이것도 위해 저장해주기 !!

 

5. 되는지 확인

여기 봇 테스트 눌러서도 확인 가능한데, 나는 그냥 배포해서 확인해줬다.

왼쪽 탭에서 배포 들어가서 배포 해주면,

ㅎㅎ 이렇게 잘 나오는걸 확인할 수 있다!

 

비슷하게 

from flask import Flask, request, jsonify
import requests
from bs4 import BeautifulSoup
import random 

application = Flask(__name__)  

@application.route("/", methods=['POST'])
def keyword():    
	req = request.get_json()    
	text_ck = req['userRequest']['utterance']    
	text = '정보를 찾을 수 없습니다.'     

	text = text_ck*3

	# 답변 텍스트 설정    
	res = {
	        "version": "2.0",
			"template": {
				"outputs": [                
					{
						"simpleText": {
							"text": text
							}
						}
					]
				}
			}     
	
	# 답변 전송    
	return jsonify(res)  

if __name__ == "__main__":
	application.run(host='0.0.0.0', port=5000, threaded=True)

 

이런식으로 입력이 들어왔을 때 그 입력을 3번 반복하는 코드도 만들어서 똑같은 방식으로 배포 해줬을 때도

잘 나오는걸 확인할 수 있다.

저기 '안녕'이라는 입력에서 답이 안나온 이유는 

내가 전에 시나리오에서 '안녕'이라는 입력에 다른 output을 내도록 지정해놨기 때문이다!

 

 

암튼! 일단 오늘은 여기까지...

추후 goormide 컨테이너 사용해서 배포하는 방법과 

llm을 langserve랑 streamlit써서 구현하는 것도 포스팅 하겠다~~

'Deep Learning & AI > NLP' 카테고리의 다른 글

검색 증강 생성 (RAG)  (1) 2024.03.25