flask
flask 사용 이유
검색을 해보니 django보다 조금 더 가벼운 형태로 사용할 수 있다고 해서 선택하게 되었다.
실제로 사용해보니 문법도 파이썬이라서 간편하고 라우팅 하는 부분만 이해하면 간편하게 쓸 수 있었다.
개발 하는 내용
감정인식 기반의 답변 출력 챗봇 웹 형태로 제작 및 UX/UI 적용
> flask 코드
import os
import json
import numpy as np
import torch
from dialogLM.model.kogpt2 import DialogKoGPT2
from kogpt2_transformers import get_kogpt2_tokenizer
from flask import Flask,request,Response,render_template
arr=[]
app=Flask(__name__)
@app.route("/",methods='POST')
def hello():
return render_template('test.html')#test.html 페이지로 연결
@app.route("/post",methods='POST') #url에 연결 -> post로 연결
def home():
# 체크 포인트 생략
# 저장한 Checkpoint 불러오기
checkpoint = torch.load(save_ckpt_path, map_location=device)
# 필요한 모델 불러오기
model = DialogKoGPT2()
model.load_state_dict(checkpoint['model_state_dict'])
model.eval()
tokenizer = get_kogpt2_tokenizer()
count = 0
output_size = 200 # 출력하고자 하는 토큰 갯수
# 답변 출력 부분
while 1:
# for i in range(5):
sent = request.form['msg'] # '요즘 기분이 우울한 느낌이에요'
if sent.encode().isalpha():
print("한국말로 해주세용^^")
print(100 * '-')
continue
tokenized_indexs = tokenizer.encode(sent)
input_ids = torch.tensor([tokenizer.bos_token_id,] + tokenized_indexs +[tokenizer.eos_token_id]).unsqueeze(0)
# set top_k to 50
sample_output = model.generate(input_ids=input_ids)
str= tokenizer.decode(sample_output[0].tolist()[len(tokenized_indexs)+1:],skip_special_tokens=True)
answer=str.split('.')[0] # 챗봇의 답변
arr.append(sent) #내가 입력한 부분
arr.append(answer) #챗봇의 답변
return render_template('test.html',msg=arr) # test.html 페이지로 렌더링 및 arr(내 입력과 답변이 저장된 list)전달
if __name__ == '__main__':
app.run(host='-.-.-.-', port=5000)# 연결하는 ip주소와 포트 번호 설정
> 챗봇 답변 출력 html 코드 일부분
<!--반복문으로 msg list 값에서 value 라는 이름으로 출력-->
<!--짝수 홀수로 나누어 출력하기 위한 index 이용-->
<li class="me">
<div class="entete">
<h2>Me</h2>
<span class="status blue"></span></div>
<div class="triangle"></div>
<div class="message">발화<div></li>
<!--조건문 사용시 해당 태그로 닫기-->
<li class="you">
<div class="entete">
<h2>Chatbot</h2>
<span class="status blue"></span></div>
<div class="triangle"></div>
<div class="message">답변<div></li>
<!--반복문 사용시 해당 태그로 닫기-->
코드 설명
html 코드의 경우 flask코드에서 렌더링 할 때 msg라는 이름으로 데이터를 같이 전달해 주었다.
이러한 경우 jinja2라는 문법을 사용해서 값을 출력시킬 수 있다. 깃허브에서 확인할
반복문을 사용하여 출력 시킬 수 있었다. 주석을 확인해 보면 자세한 설명을 확인할 수 있다.
삽질 부분
- html 페이지를 적용 시키기 위해서는 그냥 경로에 두면 안되고
/templates/a.html
이런식으로 파일이 존재해야한다. - css 페이지를 적용 시키기 위해서는 마찬가지로 그냥 경로에 두면 안되고
/static/css/a.css
와 같은 경로애 파일이 있어야 적용 가능하다.
깃허브 링크
'Project > Python' 카테고리의 다른 글
[CSV to JSON] 공공데이터 자료 변환 후 mongoDB에 넣기 (0) | 2022.07.30 |
---|