init
This commit is contained in:
53
backend/engines/chatgpt_tool/controller/ChatGPTController.py
Normal file
53
backend/engines/chatgpt_tool/controller/ChatGPTController.py
Normal 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",
|
||||
}
|
||||
Reference in New Issue
Block a user