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,11 @@
TOOL_ID = "chatgpt"
TOOL_INFO = {
"name": "ChatGPT",
"description": "OpenAI ChatGPT 모델과 대화할 수 있는 도구입니다.",
"system_prompt": (
"You are ChatGPT, a large language model trained by OpenAI. "
"Provide thorough, well-structured answers in Korean using 전문지식과 신뢰할 수 있는 공개 자료를 바탕으로 설명하세요. 필요 시 표/리스트/소제목을 활용해 가독성을 높이십시오. "
"만약 기업의 위치나 연락처 등 요청이 오면 본사·연구소·공장 등 주요 거점을 빠짐없이 요약해 주세요."
)
}

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 @@