머신러닝 & 딥러닝/자연어처리

대학교 AI 질의응답 챗봇 만들기 - 11. 챗봇 API 만들기(Flask API)

by seokii 2022. 7. 31.
728x90
반응형

0. 포스팅 목록 & GitHub

(깃허브 스타 버튼 눌러주시면 글 작성에 큰 도움이 됩니다!)

https://github.com/Seokii/Chatbot4Univ

 

GitHub - Seokii/Chatbot4Univ: 대학생을 위한 AI 질의응답 챗봇 만들기

대학생을 위한 AI 질의응답 챗봇 만들기. Contribute to Seokii/Chatbot4Univ development by creating an account on GitHub.

github.com

https://seokii.tistory.com/146

 

[Project] 대학생을 위한 AI 질의응답 챗봇 만들기

1. GitHub https://github.com/Seokii/Chatbot4Univ GitHub - Seokii/Chatbot4Univ: 대학교 재학생을 위한 AI 질의응답 챗봇 대학교 재학생을 위한 AI 질의응답 챗봇. Contribute to Seokii/Chatbot4Univ development by creating an account o

seokii.tistory.com

 

1. 챗봇 시스템 구조

챗봇 시스템은 아래 그림과 같은 구조로 구현합니다.

Flask로 구현할 REST API를 통해 플러터로 개발한 애플리케이션과 데이터를 주고받을 수 있도록 할 예정입니다. 이외에도, 카카오톡이나 네이버톡톡에 연동할 수 있습니다.

 

2. Flask

/chatbot_api/app.py

from flask import Flask, request, jsonify, abort, render_template
import socket
import json

# 챗봇 엔진 서버 정보
host = "127.0.0.1"      # 챗봇 엔진 서버 IP
port = 5050             # 챗봇 엔진 port

# Flask 애플리케이션
app = Flask(__name__)

# 챗봇 엔진 서버와 통신
def get_answer_from_engine(bottype, query):
    # 챗봇 엔진 서버 연결
    mySocket = socket.socket()
    mySocket.connect((host, port))

    # 챗봇 엔진 질의 요청
    json_data = {
        'Query' : query,
        'BotType' : bottype
    }
    message = json.dumps(json_data)
    mySocket.send(message.encode())

    # 챗봇 엔진 답변 출력
    data = mySocket.recv(2048).decode()
    ret_data = json.loads(data)

    # 챗봇 엔진 서버 연결 소켓 닫기
    mySocket.close()

    return ret_data

# 챗봇 엔진 query 전송 API
@app.route('/query/<bot_type>', methods=['POST'])
def query(bot_type):
    body = request.get_json()
    try:
        if bot_type == 'NORMAL':
            # 일반 질의응답 API
            ret = get_answer_from_engine(bottype=bot_type, query=body['query'])
            return jsonify(ret)
        else:
            # 정의되지 않은 bot type인 경우 404 Error
            abort(404)

    except Exception as ex:
        # 오류 발생 시 500 Error
        abort(500)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

프로젝트 루트 디렉토리에 chatbot_api 폴더를 만든 후 app.py를 생성하고 위의 코드를 구현했습니다.

 

get_answer_from_engine() 함수는 챗봇 엔진 서버에 소켓 통신으로 질문을 전달하고, 다시 답변 데이터를 받아오는 함수입니다. 이전 소켓 모듈 구현과 json 부분을 통해 내용을 다시 확인할 수 있습니다.

 

API를 통해 POST방식으로 /query/NORMAL URI를 통해 json객체의 전달을 주고 받을 수 있습니다.

 

 

3. API 테스트

크롬 확장 프로그램인 Talend API Tester를 통해 테스트를 진행했습니다.

 

chatbot.py와 app.py를 실행시킨 후 Talend API Tester를 통해 테스트 코드를 입력합니다.

{"query" : "제1공학관 위치 어디야"}

정상적으로 API가 작동하는 것을 테스트할 수 있었습니다.

 

 

728x90
반응형

댓글