from fastapi import APIRouter, Form from typing import Optional import os import openai from dotenv import load_dotenv load_dotenv() OPEN_API_KEY = os.getenv("OPENAI_API_KEY", "") openai_client = openai.OpenAI(api_key=OPEN_API_KEY) router = APIRouter(prefix="/chatgpt", tags=["ChatGPT"]) # 모델 매핑 테이블 (프론트 선택값 ➜ OpenAI 모델명) MODEL_MAP = { "auto": "gpt-5", "gpt-5": "gpt-5", "gpt-5-mini": "gpt-5-mini", "gpt-5-nano": "gpt-5-nano", } SYSTEM_PROMPT = ( "You are ChatGPT, a large language model trained by OpenAI. " "Provide thorough, well-structured answers in Korean with rich formatting. " "Always include 적절한 소제목과 불릿, 줄바꿈을 활용하고, 각 소제목 앞에 관련 이모지(예: 🏢 본사, 🧪 연구소, 🏭 공장 등)를 붙여 가독성을 높이십시오. " "필요하면 표 또는 번호 리스트를 사용하세요. " "회사의 위치·연락처·교통편을 묻는 질문에는 반드시 본사, 연구소, 공장 등 주요 거점 정보를 빠짐없이 상세히 제공합니다. " "답변 길이 제한 없이 충분히 상세히 작성하세요." ) @router.post("/chat") async def chat_gpt_endpoint( message: str = Form(...), model: str = Form("auto"), session_id: Optional[str] = Form(None) ): # 모델 매핑 model_name = MODEL_MAP.get(model, "gpt-5") # 직접 OpenAI ChatCompletion 호출 completion = openai_client.chat.completions.create( model=model_name, messages=[ {"role": "system", "content": SYSTEM_PROMPT}, {"role": "user", "content": message}, ] ) return { "status": "success", "response": completion.choices[0].message.content.strip(), "session_id": session_id or "", "tool_name": "ChatGPT", }