customer
티쳐✨
/2023.10.18/일반

카카오톡 챗봇 chatgpt api와 연동하기

조회수 : 3341

1. 챗봇 안내

현재 채널을 만들고 채널에 챗봇을 연결하였습니다. 해당 챗봇은 교사들을 위한 챗봇으로 neisapi를 이용한 정보 제공 및 교사들이 자주사용하는 질의응답을 작성하여 데이터베이스로 저장하여 해당 내용에 대한 답변을 제공하고자 합니다.

그럼에도 완벽할 수 없기에 neis api 로 해결되지 않거나, 지식데이터베이스에 관련질의응답이 저장되어 있지 않은 경우 chatgpt를 통해 답변을 제공하게 됩니다.

챗봇 링크를 클릭하여 챗봇에 접속해서 우선 사용해 보시기 바랍니다.


2. 작동원리

2-1. chatbot의 기본 작동원리

먼저 사용자가 채팅을 입력하면 먼저 블럭에 해당하는지 확인합니다.

블럭은 카카오톡챗봇의 기본 구성단위로 머신러닝을 통해 해당블럭에 해당하는 사용자의 발화를 확인합니다.

블럭에서 저장해 놓은 예상 발화와 일치할 경우 해당 블록의 내용을 수행하게 됩니다.

예를들어 입력에 다양한 인사말을 넣어두고, 그에 상응하는 답변을등록해두면 그와 유사한 사용자의 발화에 대응하여 준비된 답변을 돌려주게 됩니다.

그 답변은 텍스트, 카드, 이미지 등 여러 형태로 제시가능하며 프로그래밍 없이 쉽게 꾸며볼 수 있습니다.


neis API를 이용한 블럭

이 중 neisAPI를 이용한 블럭을 만들었습니다.

이를 위해서는 이를 처리해줄 서버가 필요한데 저는 이미 이 웹사이트를 운영하고 있기에, 이 사이트를 서버로 이용합니다.

서버가 필요한 이유는 스킬을 사용하기 위해서 입니다. 스킬은 웹주소에 요청을 보내고 처리된 응답을 받아오는 구조로 이루어지기 때문입니다.

예를들어 사용자가 ;행복중학교 급식 알려줘.; 와 같이 이야기하면 '행복중학교;와 '급식'을 제가 만들어놓은 서버로 전송하고

서버에서는 이 데이터에 해당하는 급식 정보를 찾아 다시 카카오톡으로 보내주는 구조 입니다.

이렇게 생각하면 chatgpt를 사용하는 것도 동일할거 같습니다.

하지만 문제가 있습니다.

카카오톡 챗봇은 서버로부터 응답이 5초가 지나면 타임아웃에러를 발새이킵니다.

하지만 chatgpt api에 요청하면 보통 5초 이상의 시간이 소요될 수 밖에 없습니다.

따라서 비동기 방식으로 프로그램을 설계해야 합니다.

3. 비동기 방식으로 chatgpt에게 응답요청하기

예전에 웹페이지에 챗봇을 만들 때, 비동기 방식의 필요성이 있었으나, 그때는 너무나 어렵게만 느껴졌었습니다.

코딩도 하다보니 실력이 쌓이는지, chatgpt의 실력이 좋아져서인지,

chatgpt를 이용해가며 시스템을 구축해보았습니다.

3-1. 비동기 방식에 대한 이해

먼저 어떤 구조인지 살펴보겠습니다.

1. 사용자가 카카오톡에 내용을 입력합니다.

2. 해당 내용을 처리할 블럭이나 지식데이터베이스가 없으면 폴백블럭에서 처리하게 됩니다.

3. 폴밸블럭을 chatgpt에게 요청하는 스킬과 연동하고 콜백을 설정합니다.

위 콜백설정은 ai챗봇을 신청해야 합니다. 설정에서 신청할 수 있습니다.

4. 스킬에서 엔드포인트로 지정된 url로 데이터를 전송합니다. 저는 현재 이 웹사이트가 서버라, 이 장고 웹프레임워크의 하나의 앱으로 들어오게 됩니다. 전송된 데이터에는 콜백url이 들어 있어 추후에 여기로 데이터를 보낼 수 있습니다.

5. 서버로 전송이 잘되면 우선 콜백메세지를 보냅니다. 

6. 그리고 사용자의 발화를 셀러리(비동기 프로그램)로 보냅니다. 셀러리는 redis 서버와 함께 사용됩니다. 즉 현재 장고서버와 다르게 또다른 서버가 하나 더 존재해야 합니다. 물론 컴퓨터는 한대입니다.

즉, 장고서버와 redis 서버가 함께 구동되어 있는 상태에서, 장고서버에서 카카오톡으로 '현재 답변준비중입니다.;와 같은 메세지를 보내고, redis서버에 사용자가 작성한 메세지와 콜백url등의 정보를 넘기면

redis 서버에서 chatgpt api에 요청을 보내게 되고, 응답을 받으면 콜백url로 응답을 보내주는 구조입니다.


좀 복잡하게 여겨지실 수 있으나, 응답을 기다리고 받응 응답을 보내주는 새로운 서버가 하나 더 있어서 처리해준다고 생각하면 됩니다.

4. 지식데이터베이스 작성자 모집

현재 제가 구상하는 것은 카카오톡 메세지를 통해 교사들이 필요한 질문을 던지면 즉각 답변을 얻을 수 있게 하는 채널을 만드는 것입니다.

그러기 위해 필요한 것은 정보를 잘 정리해두는 일 입니다.


하지만 이는 결코 쉬운일이 아닙니다. 여러 선생님들이 함께 해주시면 가능할 수 있다 믿습니다.

현재 채널은 개설하였고 기본적으로 몇 가지 기능들을 포함시켰습니다.

이해를 위해서 챗봇의 처리 구조부터 파악하는게 좋습니다.

사용자가 챗봇에세 질문을 합니다.

해당 질문에 일치하는 블럭(카카오톡 챗봇 기본구조)이 있다면 해당 블록에서 이를 처리합니다. 현재 neis ap를 연동하여 학교 연락처, 주소, 급식, 추가예정(시간표, 학사일정)등의 정보를 물어보면 대답을 얻을 수 있습니다. 기능상의 한계로 현재는 중고등학교만 등록되어 있고 초등은 아직 준비중입니다.

일치하는 블럭이 없으면 이제 지식데이터베이스를 머신러닝을 통해 유사한 질문을 찾습니다. 따라서 이 데이터베이스를 풍부하게 만든다면 선생님들에게 충분히 도움될 수 있는 챗봇이 될 수 있습니다. 데이터베이스에는 '질문','응답','링크' 등의 정보를 담을 수 있어, 선생님들이 작성하신 포스트나 유튜브 영상들을 링크로 달아 놓는다면 다른 선생님들에게 자연스럽게 홍보가 가능할 것으로 기대됩니다.

데이터베이스를 아무리 촘촘히 만든다해도 아마 예상치 못한 질문들은 나올 것입니다. 이를 처리하기위해 chatgpt를 용동하여 chatgpt에게 물어서 답변을 반환하도록 프로그래밍 해놓았습니다.


위와 같은 구조이며, 지금 필요한 것은 충분한 양으 데이터베이스를 구성하는 일입니다.

데이터베이스의 양식은 그리 복잡하지 않습니다. 엑셀로

'질문', '답변', '출처링크' 정도를 필수요소로 작성하면 가능하므로 교육과 관련된 포스팅이나 유튜브 영상 만드시는 분들이 힘을 모아주시면 좋을 듯합니다.


그렇다면 저는 보다 선생님들이 쾌적하게 챗봇을 이용할 수 있도록 챗봇에 설계하는일에 집중할 수 있을것 같습니다.


데이터베이스를 구성에 함께하고 싶으신 분들은 [email protected]으로 연락주시면 감사하겠습니다.!!


Leave a Reply

함께 소통하며 성장하는 문화 만들어봐요.
로그인 후 댓글을 작성하실 수 있습니다.