본문 바로가기
RESTFUL API 개발

[API] Chat GPT openAI api 사용해서 답변 받기 _ 포스트맨, VSCode, openai==0.28

by 처카푸 2024. 7. 26.

Chat GPT openAI api 사용해서 답변받기 _ 포스트맨, VSCode, openai==0.28

 

Chat GPT openAi API를 사용하기 위해서,

1. 액세스 키 발급받아야 한다.

 

2. 무료 크레딧이 이제는 없어져서 5달러 결제를 하고 진행했다.

- 결제를 하지 않고 한다면, 어떤 코드를 작성하든 '429 Too Many Requests' 오류코드를 볼 수 있을 것이다.

 

나는 

프런트 : 안드로이드 스튜디오

서버 : flask, VSC

로 작업하고 있는데 openai API를 서버로 요청해서 서버에서 결과를 받아 전달했다.

 

발급받은 openai KEY를 config 파일 Config 클래스에 저장해서 사용했다.

환경변수로 세팅해서 (. env) 액션즈 자동 배포까지 성공했지만,

환경변수로 중요한 키를 넣어두는 것이 좋지 못하다고 해서 Config 파일로 관리하기로 했다.

 

openai api 불러오는 코드

- try: except: 형식으로 불러오도록 했고, except에 openai.error를 불러오는데 계속 오류가 생겨서  

  openai==0.28를 지정해서 install 해주었다. ($pip install openai==0.28)

        try:
            openai.api_key = OPENAI_KEY

            response = openai.ChatCompletion.create(
                model="gpt-3.5-turbo",
                messages=[
                    {"role": "system", "content": "너는 꽃 조합을 추천해주는 플로리스트야."},
                    {"role": "user", "content": userPrompt}
                ],
                temperature=0.5,
                max_tokens=2048
            )

            responseData = response.choices[0].message['content']
            print("응답 메세지 : "+responseData)

        except openai.error.InvalidRequestError as e:
            return {'result': 'fail', 'InvalidRequestError': str(e)}, 500
        except openai.error.APIError as e:
            return {'result': 'fail', 'APIError': str(e)}, 500
        except openai.error.OpenAIError as e:
            return {'result': 'fail', 'OpenAIError': str(e)}, 500
        except Exception as e:
            return {'result': 'fail', 'error': str(e)}, 500

 

 

필요한 데이터 포스트맨으로 불러오기 및 전체 코드

from aifc import Error
from flask import jsonify, request
from flask_restful import Resource
import openai
import os

from config import Config
from mysql_connection import get_connection



class TextMassageMaker(Resource):

    def post(self):	
        
        data = request.get_json()

        if 'reason' not in data or 'package' not in data or 'combination' not in data:
            return{'result':'fail', 'error':'Bad request'},400

        # 2. DB 로 부터 데이터 가져오기
        try : 
            connection = get_connection()

            print('커넥션 실행')
            
            # 문자열 더하라는 뜻 '''+data변수명+'''
            query = '''
                    select flowerName from flower;
                    '''

            cursor = connection.cursor(dictionary=True)

            cursor.execute( query )

            # 데이터를 가져와야한다.
            result_list = cursor.fetchall()
            
            flowerName_list = []
            i = 0
            for row in result_list:
                row = result_list[i].get('flowerName')
                flowerName_list.append(row)
                i = i + 1

            # 튜플로는 보낼수 없다 그래서 커서에 dictionary=True 추가

            cursor.close()
            connection.close()

        except Error as e:
            if cursor is not None :
                cursor.close()
            if connection is not None :
                connection.close()
            return {'result':'fail', 'error':str(e)}, 500
        
        flowerNameStr = str(flowerName_list).replace('[','').replace(']','')
        print(flowerNameStr)

        reason = data['reason']
        packageItem = data['package']
        combination = data['combination']

        userPrompt = f"우리가 사용할 꽃은 ({flowerNameStr}) 이야. ({reason})을(를) 주제로 ({packageItem})를 ({combination})의 꽃을 조합해서 꽃말과 함께 추천해서 알려줘. 1개의 꽃 조합만 추천해줘야 하는데, 간단한 설명과 함께 부탁해"


        OPENAI_KEY = Config.GPT_AI_KEY

        try:
            openai.api_key = OPENAI_KEY

            response = openai.ChatCompletion.create(
                model="gpt-3.5-turbo",
                messages=[
                    {"role": "system", "content": "너는 꽃 조합을 추천해주는 플로리스트야."},
                    {"role": "user", "content": userPrompt}
                ],
                temperature=0.5,
                max_tokens=2048
            )

            responseData = response.choices[0].message['content']
            print("응답 메세지 : "+responseData)

        except openai.error.InvalidRequestError as e:
            return {'result': 'fail', 'InvalidRequestError': str(e)}, 500
        except openai.error.APIError as e:
            return {'result': 'fail', 'APIError': str(e)}, 500
        except openai.error.OpenAIError as e:
            return {'result': 'fail', 'OpenAIError': str(e)}, 500
        except Exception as e:
            return {'result': 'fail', 'error': str(e)}, 500
    

        return jsonify({"responseMessage": responseData, "result": "success"})

 


* open AI 관련 설명 공식 페이지

https://platform.openai.com/docs/api-reference/introduction