|
| 1 | +from typing import List, Dict |
| 2 | +from app.prompts.fraud_example import FraudExample |
| 3 | +from app.prompts.data.fraud_examples import FRAUD_EXAMPLES |
| 4 | + |
| 5 | +def get_fraud_detection_prompt( |
| 6 | + message_content: str, |
| 7 | + additional_description: str, |
| 8 | + keywords: List[str], |
| 9 | + image_content: str, |
| 10 | + examples: List[FraudExample] = FRAUD_EXAMPLES |
| 11 | +) -> List[Dict[str, str]]: |
| 12 | + |
| 13 | + system = { |
| 14 | + "role": "system", |
| 15 | + "content": ( |
| 16 | + "당신은 사기 탐지 어시스턴트입니다. " |
| 17 | + "입력된 텍스트를 반드시 미리 정의된 사기 유형 중 하나로 분류하고, " |
| 18 | + "최소 1개에서 최대 3개의 주요 위험 키워드를 추출하며, 그 이유를 설명하고, " |
| 19 | + "위험 점수(0–100%)를 제공해야 합니다.\n" |
| 20 | + "출력은 반드시 valid JSON 객체로만 응답하세요. 아래는 응답 예시입니다:\n" |
| 21 | + "{\n" |
| 22 | + " \"estimatedFraudType\": \"복권 사기\",\n" |
| 23 | + " \"keywords\": [\"키워드1\", \"키워드2\"],\n" |
| 24 | + " \"explanation\": \"...\",\n" |
| 25 | + " \"score\": 92.4\n" |
| 26 | + "}\n" |
| 27 | + ) |
| 28 | + } |
| 29 | + |
| 30 | + example_lines = build_example_lines(examples) |
| 31 | + assistant_content = "".join(example_lines) |
| 32 | + assistant_content += ( |
| 33 | + "이제 아래 입력을 같은 형식으로 분류하세요:\n" |
| 34 | + ) |
| 35 | + |
| 36 | + assistant = { |
| 37 | + "role": "assistant", |
| 38 | + "content": assistant_content |
| 39 | + } |
| 40 | + |
| 41 | + user = { |
| 42 | + "role": "user", |
| 43 | + "content": ( |
| 44 | + f"messageContent: '{message_content}'\n" |
| 45 | + f"additionalDescription: '{additional_description}'\n" |
| 46 | + f"keywords: {', '.join(keywords) if keywords else 'None'}\n" |
| 47 | + f"imageContent: '{image_content}'" |
| 48 | + ) |
| 49 | + } |
| 50 | + |
| 51 | + return [system, assistant, user] |
| 52 | + |
| 53 | +def build_example_lines(examples): |
| 54 | + example_lines = ["사기 유형 및 예시:\n"] |
| 55 | + for idx, ex in enumerate(examples, start=1): |
| 56 | + example_lines.append(f"{idx}. {ex.type_name}:\n") |
| 57 | + example_lines.append(f" messageContent: '{ex.message_content}'\n") |
| 58 | + example_lines.append(f" additionalDescription: '{ex.additional_description}'\n") |
| 59 | + example_lines.append(f" keywords: '{ex.keywords}'\n") |
| 60 | + example_lines.append(f" imageContent: '{ex.image_content}'\n") |
| 61 | + example_lines.append(" 출력 JSON 예시:\n") |
| 62 | + example_lines.append( |
| 63 | + f" {{\"estimatedFraudType\": \"{ex.type_name}\", " |
| 64 | + f"\"keywords\": [...], \"explanation\": \"...\", \"score\": ...}}\n\n" |
| 65 | + ) |
| 66 | + |
| 67 | + return example_lines |
0 commit comments