Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -36,14 +36,74 @@ def respond_chatgpt_qna(
|
|
36 |
def merge_and_call(tone: str, ref1: str, ref2: str, ref3: str):
|
37 |
"""
|
38 |
사용자가 선택한 말투와 참조글들을 하나의 프롬프트로 합쳐 gpt-4o-mini 모델에 전달하는 함수.
|
|
|
39 |
"""
|
40 |
-
#
|
41 |
-
|
42 |
-
|
43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
max_tokens = 2000
|
45 |
temperature = 0.7
|
46 |
top_p = 0.95
|
|
|
47 |
return respond_chatgpt_qna(
|
48 |
question=question,
|
49 |
system_message=system_message,
|
@@ -55,7 +115,6 @@ def merge_and_call(tone: str, ref1: str, ref2: str, ref3: str):
|
|
55 |
with gr.Blocks() as demo:
|
56 |
gr.Markdown("# 블로그 생성기")
|
57 |
|
58 |
-
# 입력 항목 구성
|
59 |
tone_radio = gr.Radio(
|
60 |
choices=["친근하게", "일반적인", "전문적인"],
|
61 |
label="말투바꾸기",
|
|
|
36 |
def merge_and_call(tone: str, ref1: str, ref2: str, ref3: str):
|
37 |
"""
|
38 |
사용자가 선택한 말투와 참조글들을 하나의 프롬프트로 합쳐 gpt-4o-mini 모델에 전달하는 함수.
|
39 |
+
각 말투에 따라 고유의 system_message(프롬프트)가 적용되며, 아래의 기본 프롬프트 규칙을 반드시 준수한다.
|
40 |
"""
|
41 |
+
# 기본 프롬프트 규칙 (모든 말투에 공통 적용)
|
42 |
+
base_prompt = (
|
43 |
+
"너는 가장 주목받는 마케터이며 블로그 마케팅 전문가이다. "
|
44 |
+
"특히 너는 '정보성(Informative)' 전문 블로그 마케팅 전문가로서, 정보 제공에 초점을 맞추어 작성해야 한다.\n"
|
45 |
+
"다음 텍스트 작성 규칙을 반드시 준수하라:\n"
|
46 |
+
"1. 소주제를 5개로 구분하여 2000자 이상 작성하라.\n"
|
47 |
+
"2. 전체 맥락을 이해하고 문장의 일관성을 유지하라.\n"
|
48 |
+
"3. 절대로 참고글을 한 문장 이상 그대로 출력하지 말라.\n"
|
49 |
+
"4. 주제와 상황에 맞는 적절한 어휘를 선택하라.\n"
|
50 |
+
"5. 한글 어휘의 난이도는 쉽게 작성하라.\n"
|
51 |
+
"6. 절대 문장의 끝에 '답니다'를 사용하지 말라.\n"
|
52 |
+
"정보성 블로그 작성 규칙:\n"
|
53 |
+
"1. 독자가 얻고자 하는 유용하고 흥미로운 정보를 제공하라.\n"
|
54 |
+
"2. 독자의 공감을 이끌어내고 궁금증을 해결하라.\n"
|
55 |
+
"3. 독자의 관심사를 충족시키라.\n"
|
56 |
+
"4. 독자에게 이득이 되는 정보를 제공하라.\n"
|
57 |
+
"제외 규칙:\n"
|
58 |
+
"1. 반드시 비속어 및 욕설은 제외하라.\n"
|
59 |
+
"2. 반드시 참고글의 링크(URL)는 제외하라.\n"
|
60 |
+
"3. '링크를 확인해주세요' 등의 문구는 제외하라.\n"
|
61 |
+
"4. 참고글에 있는 작성자, 화자, 유튜버, 기자의 이름, 애칭, 닉네임은 반드시 제외하라.\n"
|
62 |
+
"5. 문장의 끝부분에 어색한 표현(예: '예요', '답니다', '해요', '해주죠', '됐죠', '됐어요', '고요' 등)은 사용하지 말라."
|
63 |
+
)
|
64 |
+
|
65 |
+
# 말투별 추가 프롬프트 설정
|
66 |
+
if tone == "친근하게":
|
67 |
+
tone_prompt = (
|
68 |
+
"친근하게:\n"
|
69 |
+
"1. 톤과 어조: 대화하듯 편안하고 친근한 말투를 사용하라.\n"
|
70 |
+
"2. 문장 및 어투: 반드시 '해요체'로 작성하며, '습니다'체나 '~다'로 끝나지 않도록 하라. 구어체 표현(예: '~했어요', '~인 것 같아요')을 사용하라.\n"
|
71 |
+
"3. 용어 및 설명: 전문 용어 대신 쉬운 단어를 사용하고, 비유나 은유를 통해 복잡한 개념을 설명하라.\n"
|
72 |
+
"4. 독자와의 상호작용: 독자의 의견을 묻는 질문과 댓글을 유도하는 문구를 포함하라.\n"
|
73 |
+
"주의: 너무 가벼운 톤은 피하되 주제의 중요성을 해치지 말라."
|
74 |
+
)
|
75 |
+
elif tone == "일반적인":
|
76 |
+
tone_prompt = (
|
77 |
+
"일반적인:\n"
|
78 |
+
"1. 톤과 어조: 중립적이고 객관적인 톤을 유지하며, 적절한 존댓말(예: '~합니다', '~입니다')을 사용하라.\n"
|
79 |
+
"2. 내용 구조: 명확한 주제 제시와 논리적인 전개, 소제목 및 단락 구분을 활용하라.\n"
|
80 |
+
"3. 용어 및 설명: 이해하기 쉬운 용어와 간단한 설명을 사용하고, 객관적인 정보를 제공하라.\n"
|
81 |
+
"4. 독자 상호작용: 독자의 생각을 묻는 질문과 추가 정보를 제공하는 키워드를 포함하라.\n"
|
82 |
+
"5. 마무리: 주요 내용을 간략히 요약하고 추가 정보를 안내하라."
|
83 |
+
)
|
84 |
+
elif tone == "전문적인":
|
85 |
+
tone_prompt = (
|
86 |
+
"전문적인:\n"
|
87 |
+
"1. 톤과 구조: 공식적이고 학술적인 톤을 사용하며, 명확한 서론, 본론, 결론 구조로 체계적으로 전개하라.\n"
|
88 |
+
"2. 내용 구성: 복잡한 개념을 정확하게 전달할 수 있도록 전문 용어와 심층 분석을 활용하라.\n"
|
89 |
+
"3. 데이터 활용: 통계, 연구 결과, 전문가 의견 등을 인용하여 신뢰성을 높이라.\n"
|
90 |
+
"4. 텍스트 구조화: 번호 매기기, 기울임꼴, 들여쓰기를 활용하여 논리적 구조를 강조하라.\n"
|
91 |
+
"5. 마무리: 핵심 논점을 재강조하고 향후 연구나 실무적 함의를 제시하라."
|
92 |
+
)
|
93 |
+
else:
|
94 |
+
tone_prompt = "아래의 참조글들을 참고하여 블로그 글을 생성하라."
|
95 |
+
|
96 |
+
# 최종 system_message는 tone_prompt와 base_prompt를 결합하여 구성
|
97 |
+
system_message = tone_prompt + "\n" + base_prompt
|
98 |
+
|
99 |
+
# 프롬프트에 참조글 내용을 반영 (참고글은 직접 출력하지 않도록 주의)
|
100 |
+
question = f"참조글 1: {ref1}\n참조글 2: {ref2}\n참조글 3: {ref3}\n위 내용을 참고하여 주제와 상황에 맞는 블로그 글을 작성하라. 단, 참고글의 내용을 그대로 인용하지 말라."
|
101 |
+
|
102 |
+
# 고급 설정은 코드 내부 기본값으로 지정
|
103 |
max_tokens = 2000
|
104 |
temperature = 0.7
|
105 |
top_p = 0.95
|
106 |
+
|
107 |
return respond_chatgpt_qna(
|
108 |
question=question,
|
109 |
system_message=system_message,
|
|
|
115 |
with gr.Blocks() as demo:
|
116 |
gr.Markdown("# 블로그 생성기")
|
117 |
|
|
|
118 |
tone_radio = gr.Radio(
|
119 |
choices=["친근하게", "일반적인", "전문적인"],
|
120 |
label="말투바꾸기",
|