이번 프로젝트에 AI를 이용하기 위해 AI 모델을 학습 시키기 위해 데이터를 수집하고 전처리하는 시간이 필요하기에 이미 학습된 모델을 제공하는 Open AI를 이용하여 프로젝트 개발 속도를 높이는 것이 실용적이다 생각이 들었다.
API Keys
OpenAI를 이용하기 위해서는 API Keys가 필요하다. "Create new secret key" 버튼을 클릭하여 새로운 API 키를 생성하고 생성된 API 키를 복사해 .env같은 파일에 변수 저장하는 것이 좋다.
OpenAI 패키지 설치
openai 패키지를 자신의 환경에 맞게 설치하도록한다. 저는 Docker를 이용하기에 requirements.txt에 패키지를 하기에 새로 openai를 추가하였다.
코드
services.py
import openai
import os
openai.api_key = os.environ.get('OPENAI_API_KEY')
def generate_result(user_data):
prompt = (
"내용을 추가해주세요\n"
)
try:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
max_tokens=300,
temperature=0.7,
)
return response.choices[0].message["content"]
except Exception as e:
return f"AI 요청 중 오류가 발생했습니다: {e}"
변수 저장해둔 OPENAI_API_KEY 불러온 뒤 prompt = () 안에 필요한 내용을 추가 해주도록 하고 이번 프로젝트 비용절감을 위해
모델 = gpt-3.5-turbo을 선정했고 자신이 생각하는 답변길이를 고려해 max_tokens를 조절해주도록한다.
your_app/views.py
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import Your_model
from .serializers import Your_Serializer
from .services import generate_result
class Your_modelView(APIView):
def post(self, request):
user = request.user
data = request.data.copy()
data["user"] = user.id
serializer = Your_Serializer(data=data)
if serializer.is_valid():
fitplan = serializer.save(user=user)
user_data = {
"weight": Your_model.weight,
"target_weight": Your_model.target_weight,
"chest": Your_model.chest,
"waist": Your_model.waist,
"thigh": Your_model.thigh,
"period": Your_model.period,
}
ai_result = generate_result(user_data)
response_data = {
"status": "success",
"message": "메세지를 작성해주세요",
"data": serializer.data,
"AI대답": ai_result,
}
return Response(response_data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
자신의 목적에 데이터를 전달해서 AI와 소통해서 원하는 답변이 나올 수 있도록하였다.
주의할 점
API 키를 생성하고 구성을 다 하고 동작을 하기 전에 Billing 들어가 카드를 등록후 사용을 해야한다. 카드 등록을 하지 않을 시에는
"You exceeded your current quota, please check your plan and billing details." 혹은
"Your account is not active. Please check your billing information." 와 같은 메세지와 함께 요청이 거부될 수 있으니 유의하는 것이 좋다.
'프로젝트' 카테고리의 다른 글
웹소켓 Operational Error : database timeout or blocking (0) | 2024.12.30 |
---|---|
웹소켓 포트 충돌 문제 (0) | 2024.12.30 |
Docker 네트워크 오류 (1) | 2024.12.19 |
EC2 Amazon Linux 이미지 - 버전 관리 (1) | 2024.12.18 |
[팀프로젝트] 맞춤형 도시락 서비스 - Dosirock (0) | 2024.12.18 |