o2o-castad-backend/app/utils/chatgpt_prompt.py

48 lines
1.5 KiB
Python

import json
import re
from openai import AsyncOpenAI
from app.utils.logger import get_logger
from config import apikey_settings
from app.utils.prompts.prompts import Prompt
# 로거 설정
logger = get_logger("chatgpt")
# fmt: on
class ChatgptService:
"""ChatGPT API 서비스 클래스
GPT 5.0 모델을 사용하여 마케팅 가사 및 분석을 생성합니다.
"""
def __init__(self):
self.client = AsyncOpenAI(api_key=apikey_settings.CHATGPT_API_KEY)
async def _call_structured_output_with_response_gpt_api(self, prompt: str, output_format : dict, model:str) -> dict:
content = [{"type": "input_text", "text": prompt}]
response = await self.client.responses.create(
model=model,
input=[{"role": "user", "content": content}],
text = output_format
)
structured_output = json.loads(response.output_text)
return structured_output or {}
async def generate_structured_output(
self,
prompt : Prompt,
input_data : dict,
) -> str:
prompt_text = prompt.build_prompt(input_data)
logger.debug(f"[ChatgptService] Generated Prompt (length: {len(prompt_text)})")
logger.info(f"[ChatgptService] Starting GPT request with structured output with model: {prompt.prompt_model}")
# GPT API 호출
response = await self._call_structured_output_with_response_gpt_api(prompt_text, prompt.prompt_output, prompt.prompt_model)
return response