Kims12 commited on
Commit
c96ecc0
·
verified ·
1 Parent(s): f598c30

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +143 -0
app.py ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import gradio as gr
3
+ import openai
4
+ import requests
5
+ import logging
6
+
7
+ # 로깅 설정
8
+ logging.basicConfig(level=logging.INFO)
9
+ logger = logging.getLogger(__name__)
10
+
11
+ # OpenAI API 클라이언트 설정
12
+ openai.api_key = os.getenv("OPENAI_API_KEY")
13
+
14
+ # 요청사항에 따라 카테고리 수정
15
+ CATEGORIES = [
16
+ "공포 마케팅",
17
+ "스토리텔링"
18
+ ]
19
+
20
+ def get_category_prompt(category):
21
+ if category == "공포 마케팅":
22
+ return """
23
+ # 공포 마케팅 카피라이팅 생성 규칙
24
+ 1. 반드시 한글로 출력하라.
25
+ 2. 너는 세계 최고의 공포 마케팅 카피라이터이다.
26
+ 3. 반드시 카피라이팅은 30자 이내로 작성하고, 10개만 출력하라.(다른 내용 출력 금지)
27
+ 4. 반드시 입력된 주제로만 작성하고 예시를 참고하여 내용을 보강하라.
28
+ 5. 반드시 1 부터 10까지 번호(리스트형태)를 같이 출력하라
29
+ 6. 사람들에게 두려움을 주면서, 동시에 제품이나 서비스를 사용해야만 하는 이유를 강하게 어필하라.
30
+ 7. 사용하지 않을 때의 위험이나 손실을 강조하라.
31
+ 8. 감정적인 단어와 표현을 사용하여 독자의 불안을 증폭시키라
32
+ 9. 제품/서비스의 중요성과 그것이 없을 때의 극단적인 결과를 구체적으로 설명하라.
33
+ 예시:
34
+ - 스쿼트 할 때 이 동작 하면 무릎 부상 옵니다
35
+ - 책 안 읽는 사람이 가난할 확률 98%인 이유
36
+ - 신제품을 출시할 때 실패하는 7 가지 치명적 실수
37
+ - 소셜 미디어를 잘못 사용하면 기업이 망할 수 있는 이유
38
+ - 이 앱 안 쓰면 해킹 당할 확률 80% 증가
39
+ - 이 보험 없으면 사고 시 파산 위기 온다
40
+ - 충격! 이 선크림 안 바르면 피부암 위험 500% 증가
41
+ - 가습기 2일만 관리하지 않아도 "세균 범벅"
42
+ - 바다 환경오염, 식탁으로 되돌아온다. 플라스틱 사용 이대로 괜찮은가요?
43
+ - "맥주 한잔이라도 날마다 술이 땡긴다면? 이것 의심해야"
44
+ """
45
+
46
+ elif category == "스토리텔링":
47
+ return """
48
+ # 스토리텔링 카피라이팅 생성 규칙
49
+ 1. 반드시 한글로 출력하라.
50
+ 2. 너는 세계 최고의 스토리텔링 마케팅 카피라이터이다.
51
+ 3. 반드시 카피라이팅은 30자 이내로 작성하고, 10개만 출력하라.(다른 내용 출력 금지)
52
+ 4. 반드시 입력된 주제로만 작성하고 예시를 참고하여 내용을 보강하라.
53
+ 5. 반드시 1 부터 10까지 번호(리스트형태)를 같이 출력하라
54
+ 6. 제품/서비스와 관련된 짧고 흥미로운 이야기를 만들어라.
55
+ 7. 고객이 공감할 수 있는 상황이나 캐릭터를 설정하라.
56
+ 8. 이야기를 통해 제품/서비스의 가치를 자연스럽게 전달하라.
57
+ 예시:
58
+ - 한 어부의 꿈에서 시작된 혁신적인 낚시장비
59
+ - 100년 된 가족 레시피로 만든 수제 잼
60
+ - 우주 비행사의 아이디어로 탄생한 초경량 재킷
61
+ - 할머니의 100년 된 비밀 레시피로 만든 건강한 집밥 간식
62
+ - 히말라야 등산객의 고민에서 시작된 혁신적 초경량 배낭
63
+ - 몽골 유목민의 천년 지혜를 담은 친환경 오토캠핑 텐트
64
+ - 바다를 사랑한 해양생물학자의 혁신적인 해양 정화 기술
65
+ - 20년 불면증 환자가 직접 개발한 꿀잠 유도 스마트 베개
66
+ - 길고양이 100마리를 구조한 수의사의 반려동물 건강관리 앱
67
+ - 팔 없는 장애인 화가의 꿈을 이뤄준 첨단 그림 도구
68
+ """
69
+
70
+ def call_api_sync(content, system_message, max_tokens, temperature, top_p):
71
+ response = requests.post(
72
+ "https://api.openai.com/v1/chat/completions",
73
+ headers={"Authorization": f"Bearer {openai.api_key}"},
74
+ json={
75
+ "model": "gpt-4o-mini",
76
+ "messages": [
77
+ {"role": "system", "content": system_message},
78
+ {"role": "user", "content": content},
79
+ ],
80
+ "max_tokens": max_tokens,
81
+ "temperature": temperature,
82
+ "top_p": top_p,
83
+ }
84
+ )
85
+ result = response.json()
86
+ return result['choices'][0]['message']['content']
87
+
88
+ def generate_copywriting(categories, topic):
89
+ max_tokens = 1000
90
+ temperature = 0.8
91
+ top_p = 0.95
92
+
93
+ results = {}
94
+ for category in categories:
95
+ prompt = get_category_prompt(category)
96
+ user_content = f"주제: {topic}"
97
+ copywriting = call_api_sync(user_content, prompt, max_tokens, temperature, top_p)
98
+ results[category] = copywriting
99
+ return results
100
+
101
+ # Gradio 인터페이스 부분
102
+ with gr.Blocks() as iface:
103
+ gr.Markdown("# AI 카피라이팅 생성기")
104
+
105
+ with gr.Column():
106
+ # 선택 기능 제거
107
+ topic = gr.Textbox(lines=1, label="주제를 입력하세요")
108
+
109
+ generate_btn = gr.Button("카피라이팅 생성하기")
110
+
111
+ status = gr.Markdown("준비됨")
112
+
113
+ output_boxes = {}
114
+ with gr.Column():
115
+ for category in CATEGORIES:
116
+ output_box = gr.Textbox(label=category, visible=True)
117
+ output_boxes[category] = output_box
118
+
119
+ def validate_and_generate(topic):
120
+ try:
121
+ results = generate_copywriting(CATEGORIES, topic)
122
+ logger.debug(f"Generated results: {results}")
123
+
124
+ outputs = []
125
+ for category in CATEGORIES:
126
+ if category in results:
127
+ outputs.append(gr.update(value=results[category]))
128
+ else:
129
+ outputs.append(gr.update(value=""))
130
+
131
+ return [gr.update(value="카피라이팅 생성이 완료되었습니다.")] + outputs
132
+ except Exception as e:
133
+ logger.error(f"Error during copywriting generation: {str(e)}")
134
+ return [gr.update(value=f"오류 발생: {str(e)}")] + [gr.update(value="") for _ in CATEGORIES]
135
+
136
+ generate_btn.click(
137
+ fn=validate_and_generate,
138
+ inputs=[topic],
139
+ outputs=[status] + [output_boxes[category] for category in CATEGORIES]
140
+ )
141
+
142
+ # 인터페이스 실행
143
+ iface.launch()