This commit is contained in:
dsyoon
2025-12-27 14:06:26 +09:00
parent 23f5388c56
commit 46460b77f8
33 changed files with 4600 additions and 1 deletions

View File

@@ -0,0 +1,53 @@
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",
}

View File

@@ -0,0 +1 @@