[알토르] #10 Flask를 이용해 API 서버 만들기

Hyungjun·2024년 6월 5일
0

알토르

목록 보기
11/23

Mission

  1. Python Flask란?
  2. python Flask를 설치하고
    • /hello Get method api 만들고, 요청을 보내면 화면에 hello가 나오게 하는 실습
  3. /sendMessage API를 만들고
    - Postman을 설치 - http 테스트 위한 툴
    - message 값을 하나 전송해서 sendMessage API에서 메세지값을 받은다음 해당 메세지를 openAI 어시스턴트 API에 요!
    청을 보내서 응답을 받고 그 응답 내용을 클라이언트에 전달

배경지식

  1. Flask란?
    Falsk란 Python 기반으로 API server를 쉽게 구현해볼 수 있는 웹 개발 프레임워크다. 서버를 가볍게 구현할 수 있고, 코드가 쉽고 짧다는 것이 장점이다.
  • API server
    웹이 API 서버에게 요청했을 때 데이터베이스와 통신해서 데이터를 받아오고 가공해서 응답하게 된다.
    클라이언트는 정보에 접근하고 정보를 수정하기 위해 서버에 지속적으로 요청을 보내야 하고, 이 요청을 보내는 방법을 약속해둔 것이 바로 API인 것이다. 그 API를 제공해주는 것이 API 서버이다.
    클라이언트 요청 시 서버로부터 html 응답을 받는다.
  1. Postman이란?
    API 개발을 빠르고 쉽게 구현하고 개발된 API를 테스트하여 문서화 또는 공유할 수 있게 해주는 플랫폼.
  • 사용하는 이유
    URL을 통해 테스트는 한계가 있다. 실제 개발 경우, 응답 요청과 응답 받아 화면에 출력하는 등의 작업이 길어진다. Authorization이나 Header, Body를 수정하는건 더더욱 제한이 많다.
    하지만 포스트맨은 해당 작업을 할 수 있도록 인터페이스를 구축해둔 툴이기 때문에 쉽게 사용가능하다.

실습

#1 GET 요청을 보내면 hello가 나오는 api 만들기

코드

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def index():
	return 'Home'


@app.route('/hello')	// method 방식이 GET으로 default 되어있다.
def hello():
	return 'Hello'

app.run(port=5001, debug=True) 

결과

홈페이지에서는 Home이 출력되고, /hello로 GET 요청을 하면 Hello를 출력할 수 있다.

#2 POST 요청으로 openai에게 응답받기

  1. message 값을 하나 전송해서 sendMessage API에서 메세지값을 받는다.
  2. 해당 메세지를 openAI 어시스턴트 API에 요청을 보내서 응답을 받는다.
  3. 그 응답 내용을 클라이언트에 전달한다.

1. 코드

from flask import Flask, request, jsonify
from openai import OpenAI
from dotenv import load_dotenv
from flask_cors import CORS
import os
import time

load_dotenv()

app = Flask(__name__)
CORS(app)

client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))

@app.route('/sendMessage', methods=['POST'])
def sendMessage():
	data = request.get_json()
	user_input = data.get('user_input')

	try:
		assistant_id=os.environ.get("ASSISTANT_ID")
		thread_id=os.environ.get("THREAD_ID")
		message = client.beta.threads.messages.create(
			thread_id,
			role="user",
			content=user_input,
		)
		run = client.beta.threads.runs.create(
			thread_id=thread_id,
			assistant_id=assistant_id,
		)

		run_id = run.id

		while True:
			run = client.beta.threads.runs.retrieve(
				thread_id=thread_id,
				run_id=run_id,
			)
			if run.status == "completed":
				break
			else:
				time.sleep(2)

		thread_messages = client.beta.threads.messages.list(thread_id)
		ai_response = thread_messages.data[0].content[0].text.value

		return jsonify({"description" : ai_response})
	
	except Exception as e:
		return jsonify({"error" : str(e)})
	

if __name__ == '__main__':
	app.run(port=5001, debug=True) 

2. postman

  • body 창에서 json 형식으로 데이터를 보낼 수 있다.
  • user_input으로 질문을 넣어주면 openai assistant가 그에 맞는 대답을 해준다.
  • 이미 저번 글에서 내 이력서 챗봇 assistant와 thread를 만들어 놓았기 때문에 thread에 연결해서 새로운 메세지를 만들어 넣어준다.
  • 그 후 run을 retrieval 도구를 사용해 작동시켜주면 답변을 얻을 수 있다.

3. 결과

profile
Cloud Security Expert

0개의 댓글