Skip to content

Commit e190004

Browse files
committed
fix: exception and logging
1 parent 38b06f6 commit e190004

File tree

6 files changed

+19
-15
lines changed

6 files changed

+19
-15
lines changed

app/api/fraud_analysis.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ async def fraud_analysis(request: FraudRequest):
1515
answer = await call_gpt(request)
1616
response = FraudResponse.model_validate_json(answer)
1717
return response
18-
18+
except RuntimeError as e:
19+
raise HTTPException(status_code=500, detail=f"사기분석 실패: {e}") from e
1920
except Exception as e:
20-
raise HTTPException(status_code=500, detail=f"사기분석 실패: {e}")
21+
raise HTTPException(status_code=500, detail=f"응답 파싱 실패: {e}") from e

app/models/fraud_request.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
from pydantic import BaseModel
22
from typing import List
3+
from typing import Optional
34

45
class FraudRequest(BaseModel):
5-
messageContent: str
6+
messageContent: Optional[str] = None
67
keywords: List[str]
7-
additionalDescription: str
8-
imageContent: str
8+
additionalDescription: Optional[str] = None
9+
imageContent: Optional[str] = None

app/models/fraud_response.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
from pydantic import BaseModel, conint
1+
from pydantic import BaseModel, Field
22
from typing import List
33

44
class FraudResponse(BaseModel):
55
estimatedFraudType: str # 분류된 사기 유형
6-
keywords: List[str] # 주요 위험 키워드 (최대 3개)
6+
keywords: List[str] = Field(..., min_items=1, max_items=3, description="주요 위험 키워드 (최대 3개)")
77
explanation: str # 해당 유형으로 판단한 이유
8-
score: float # 위험도(0~100)
8+
score: float = Field(..., ge=0, le=100, description="위험도(0~100)")

app/prompts/fraud_prompts.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ def get_fraud_detection_prompt(
3232
assistant_content += (
3333
"이제 아래 입력을 같은 형식으로 분류하세요:\n"
3434
)
35-
print(assistant_content)
3635

3736
assistant = {
3837
"role": "assistant",
@@ -44,7 +43,7 @@ def get_fraud_detection_prompt(
4443
"content": (
4544
f"messageContent: '{message_content}'\n"
4645
f"additionalDescription: '{additional_description}'\n"
47-
f"keywords: '{keywords}'\n"
46+
f"keywords: {', '.join(keywords) if keywords else 'None'}\n"
4847
f"imageContent: '{image_content}'"
4948
)
5049
}

app/services/gpt_service.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
from app.config.setting import settings
33
from app.models.fraud_request import FraudRequest
44
from app.prompts.fraud_prompts import get_fraud_detection_prompt
5+
import logging
6+
7+
logger = logging.getLogger(__name__)
58

69
client = OpenAI(
710
api_key = settings.gpt_api_key
@@ -22,11 +25,13 @@ async def call_gpt(request: FraudRequest):
2225
temperature = 0.5, # 생성된 텍스트의 무작위성을 결정
2326
max_output_tokens = 200
2427
)
25-
print(response)
28+
logger.info(f"GPT API 호출 성공: {response}")
2629

2730
except OpenAIError as e:
28-
raise RuntimeError(f"GPT API 호출 실패: {e}")
31+
logger.error(f"GPT API 호출 실패: {e}", exc_info=True)
32+
raise RuntimeError(f"GPT API 호출 실패: {e}") from e
2933
except Exception as e:
30-
return f"서버 오류 발생: {e}"
34+
logger.error(f"서버 오류 발생: {e}", exc_info=True)
35+
raise RuntimeError(f"서버 오류 발생: {e}") from e
3136

3237
return response.output_text.strip()

requirements.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
annotated-types==0.7.0
22
anyio==4.9.0
3-
certifi==2025.7.14
43
distro==1.9.0
5-
dotenv==0.9.9
64
fastapi==0.116.0
75
h11==0.16.0
86
httpcore==1.0.9

0 commit comments

Comments
 (0)