ssboost commited on
Commit
07558d5
ยท
verified ยท
1 Parent(s): 86582c0

Create travel_blog.py

Browse files
Files changed (1) hide show
  1. travel_blog.py +1030 -0
travel_blog.py ADDED
@@ -0,0 +1,1030 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import random
3
+ import re
4
+ import requests
5
+ import logging
6
+ import tempfile
7
+ from bs4 import BeautifulSoup
8
+ from datetime import datetime
9
+ from zoneinfo import ZoneInfo
10
+ import html
11
+ from PIL import Image
12
+ from urllib.request import urlopen
13
+ import markdown2
14
+ import gradio as gr
15
+
16
+ # ๋กœ๊น… ์„ค์ • (INFO ๋ ˆ๋ฒจ)
17
+ logging.basicConfig(level=logging.INFO)
18
+
19
+ # ์ƒ์ˆ˜ ์ •์˜
20
+ TARGET_CHAR_LENGTH = 4000
21
+ MIN_SECTION_LENGTH = 600
22
+ MAX_TOKENS = 15000
23
+ TEMPERATURE = 0.75
24
+ TOP_P = 0.95
25
+
26
+ # API ๊ด€๋ จ ์„ค์ •
27
+ gemini_api_key = os.getenv("GEMINI_API_KEY")
28
+
29
+ # --- Google Gemini SDK ์ดˆ๊ธฐํ™” ---
30
+ from google import genai
31
+ from google.genai import types
32
+ client = genai.Client(api_key=gemini_api_key)
33
+
34
+ # -------------------------------
35
+ # ๊ธฐ๋ณธ ๋„์šฐ๋ฏธ ํ•จ์ˆ˜๋“ค
36
+ # -------------------------------
37
+
38
+ def remove_unwanted_phrases(text):
39
+ """๋ถˆํ•„์š”ํ•œ ํ‘œํ˜„ ์ œ๊ฑฐ ํ•จ์ˆ˜"""
40
+ unwanted_phrases = [
41
+ '์—ฌ๋Ÿฌ๋ถ„', '์ตœ๊ทผ', '๋งˆ์ง€๋ง‰์œผ๋กœ', '๊ฒฐ๋ก ์ ์œผ๋กœ', '๊ฒฐ๊ตญ',
42
+ '์ข…ํ•ฉ์ ์œผ๋กœ', '๋”ฐ๋ผ์„œ', '๋งˆ๋ฌด๋ฆฌ', '๋์œผ๋กœ', '์š”์•ฝ',
43
+ 'ํ•œ ์ค„ ์š”์•ฝ', '์ •๋ฆฌํ•˜์ž๋ฉด', '์ด์ •๋ฆฌ', '๊ธ€์„ ๋งˆ์น˜๋ฉฐ',
44
+ '์ด์ƒ์œผ๋กœ', '์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค', '์ฐธ๊ณ ํ•˜์„ธ์š”', '๋„์›€์ด ๋˜์…จ๊ธธ',
45
+ '์ข‹์€ ํ•˜๋ฃจ ๋˜์„ธ์š”', '๋‹ค์Œ ๊ธ€์—์„œ', '๋„์›€์ด ๋˜์—ˆ๊ธธ',
46
+ '์ฆ๊ฑฐ์šด ํ•˜๋ฃจ ๋˜์„ธ์š”', '๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค'
47
+ ]
48
+
49
+ # ๋ฌธ๋‹จ๋ณ„๋กœ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌ
50
+ lines = text.split('\n')
51
+ result_lines = []
52
+
53
+ for line in lines:
54
+ if "๋‹ค์Œ ์„น์…˜์—์„œ๋Š”" in line:
55
+ parts = line.split("๋‹ค์Œ ์„น์…˜์—์„œ๋Š”")
56
+ if parts[0].strip():
57
+ result_lines.append(parts[0].strip())
58
+ else:
59
+ # ๋ถˆํ•„์š”ํ•œ ํ‘œํ˜„ ์ œ๊ฑฐ (๊ตฌ๋‘์  ํฌํ•จ)
60
+ for phrase in unwanted_phrases:
61
+ # ๋ถˆํ•„์š”ํ•œ ํ‘œํ˜„ ์•ž๋’ค์˜ ๊ตฌ๋‘์ ๊ณผ ๊ณต๋ฐฑ๊นŒ์ง€ ํฌํ•จํ•˜์—ฌ ์ œ๊ฑฐ
62
+ pattern = rf'(\b{re.escape(phrase)}\b[\s,.!?]*)|([,.!?]*\b{re.escape(phrase)}\b)'
63
+ line = re.sub(pattern, '', line)
64
+
65
+ # ๋ฌธ์žฅ ๋‚ด ์ž”์—ฌ ๊ณต๋ฐฑ ๋ฐ ๊ตฌ๋‘์  ์ •๋ฆฌ
66
+ line = re.sub(r'\s{2,}', ' ', line) # ์—ฐ์† ๊ณต๋ฐฑ ์ œ๊ฑฐ
67
+ line = line.strip() # ์•ž๋’ค ๊ณต๋ฐฑ ์ œ๊ฑฐ
68
+ result_lines.append(line)
69
+
70
+ return '\n'.join(result_lines)
71
+
72
+ def convert_to_html(text):
73
+ """๋งˆํฌ๋‹ค์šด ํ˜•์‹์„ HTML๋กœ ๋ณ€ํ™˜"""
74
+ text = re.sub(r'^\s*[-*]\s+', '', text, flags=re.MULTILINE)
75
+ text = re.sub(r'^\s*\d+\.\s+', '', text, flags=re.MULTILINE)
76
+ text = re.sub(r'^\s*#{1,6}\s+', '', text, flags=re.MULTILINE)
77
+ return markdown2.markdown(text)
78
+
79
+ def format_blog_post(blog_post, query="", with_title=False):
80
+ """๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ ํฌ๋งทํŒ… ํ•จ์ˆ˜ - ์†Œ์ œ๋ชฉ ๊ฐ•ํ™” ๋ฒ„์ „"""
81
+ blog_post = re.sub(r'^#+\s+', '', blog_post, flags=re.MULTILINE)
82
+ blog_post = re.sub(r'^\d+\.\s+', '', blog_post, flags=re.MULTILINE)
83
+ blog_post = re.sub(r'^[\*\-]\s+', '', blog_post, flags=re.MULTILINE)
84
+
85
+ # ์ฒซ ์ค„(์›๋ณธ ์ œ๋ชฉ)๊ณผ ๋น„์Šทํ•œ ํŒจํ„ด์ด ์žˆ๋‹ค๋ฉด ์ œ๊ฑฐ
86
+ lines = blog_post.split('\n')
87
+ if lines and len(lines) > 0:
88
+ first_line = lines[0].strip()
89
+ # ์ฒซ ์ค„์ด ์ œ๋ชฉ์ธ ๊ฒฝ์šฐ, ๋น„์Šทํ•œ ๋‚ด์šฉ์˜ ๋ผ์ธ์„ ๋ชจ๋‘ ์ œ๊ฑฐ
90
+ if first_line and len(first_line) > 5:
91
+ # ์ฒซ ์ค„๊ณผ ์œ ์‚ฌํ•œ ๋‚ด์šฉ์„ ๊ฐ€์ง„ ๋ผ์ธ ์ฐพ์•„ ์ œ๊ฑฐ
92
+ filtered_lines = []
93
+ for line in lines:
94
+ # ์ฒซ ์ค„๊ณผ ์œ ์‚ฌํ•˜๋ฉด ์ œ๊ฑฐ
95
+ if line.strip() and (first_line in line or line in first_line):
96
+ continue
97
+ filtered_lines.append(line)
98
+ lines = filtered_lines
99
+
100
+ # ๋„์ž…๋ถ€, ๊ฒฐ๋ก  ์†Œ์ œ๋ชฉ ํŒจํ„ด
101
+ intro_pattern = r'(?i)๋„์ž…๋ถ€\s*[:]?\s*(.*?)$'
102
+ conclusion_pattern = r'(?i)๊ฒฐ๋ก \s*[:]?\s*(.*?)$'
103
+
104
+ # ๋„์ž…๋ถ€, ๊ฒฐ๋ก  ์†Œ์ œ๋ชฉ ์ œ๊ฑฐ
105
+ filtered_lines = []
106
+ for line in lines:
107
+ if re.match(intro_pattern, line) or re.match(conclusion_pattern, line):
108
+ continue
109
+ filtered_lines.append(line)
110
+ lines = filtered_lines
111
+
112
+ # ๋ณธ๋ก  ์†Œ์ œ๋ชฉ ํŒจํ„ด ๊ฐ•ํ™”
113
+ section_patterns = [
114
+ r'^๋ณธ๋ก \d+\s*[:]?\s*(.*?)$', # ๋ณธ๋ก 1: ๋‚ด์šฉ ํŒจํ„ด
115
+ r'^.{5,50}์˜ [๊ฐ€-ํžฃ\s]+$', # ~์˜ ~ ํŒจํ„ด
116
+ r'^[๊ฐ€-ํžฃ\s]{5,30}(์ด๋ž€|์ด๋ž€\?|์ด๋ž€\s๋ฌด์—‡์ธ๊ฐ€|์ด๋ž€\s๋ฌด์—‡์ผ๊นŒ)[\?\s]*$', # ~์ด๋ž€? ํŒจํ„ด
117
+ r'^[๊ฐ€-ํžฃ\s]{5,50}\s[-โ€“]\s.{5,30}$', # ๊ฐ•์กฐ ํ‘œํ˜„ ํŒจํ„ด (์˜ˆ: ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ• - ์‹ค์ฒœํ•˜๊ธฐ)
118
+ r'^[๊ฐ€-ํžฃA-Za-z\s]{10,50}[\.!\?]$', # ๊ธด ๋ฌธ์žฅ์œผ๋กœ ๋œ ์†Œ์ œ๋ชฉ ํŒจํ„ด
119
+ ]
120
+
121
+ formatted_lines = []
122
+ in_paragraph = False
123
+
124
+ # ๋ณธ๋ก  ์„น์…˜ ๋ฒˆํ˜ธ ์ถ”์ 
125
+ section_number = 1
126
+
127
+ for i, line in enumerate(lines):
128
+ line = line.strip()
129
+ if not line:
130
+ if in_paragraph:
131
+ formatted_lines.append("</p>")
132
+ in_paragraph = False
133
+ formatted_lines.append("<br>")
134
+ continue
135
+
136
+ # ๋‹ค์Œ ์ค„๊ณผ ์ด์ „ ๏ฟฝ๏ฟฝ์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ
137
+ prev_empty = i == 0 or not lines[i-1].strip()
138
+ next_empty = i == len(lines) - 1 or not lines[i+1].strip()
139
+
140
+ # ์†Œ์ œ๋ชฉ์ธ์ง€ ์ฒดํฌ
141
+ is_subtitle = False
142
+ clean_subtitle = line
143
+
144
+ # ํŒจํ„ด ๋งค์นญ์œผ๋กœ ์†Œ์ œ๋ชฉ ํ™•์ธ
145
+ for pattern in section_patterns:
146
+ if re.match(pattern, line):
147
+ is_subtitle = True
148
+ # ๋ณธ๋ก X: ํŒจํ„ด์ธ ๊ฒฝ์šฐ ์ •๋ฆฌ
149
+ if "๋ณธ๋ก " in line:
150
+ clean_subtitle = re.sub(r'^๋ณธ๋ก \d+\s*[:]?\s*', '', line)
151
+ break
152
+
153
+ # ํŒจํ„ด์— ๋งค์นญ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ๋‹ค์Œ ๊ทœ์น™์œผ๋กœ ์†Œ์ œ๋ชฉ์œผ๋กœ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
154
+ if not is_subtitle:
155
+ # ์•ž๋’ค ์ค„์ด ๋น„์–ด์žˆ๊ณ , ๊ธธ์ด๊ฐ€ ์งง์€(5-50์ž) ๋ฌธ์žฅ์€ ์†Œ์ œ๋ชฉ์œผ๋กœ ์ฒ˜๋ฆฌ
156
+ if prev_empty and next_empty and 5 <= len(line) <= 50:
157
+ is_subtitle = True
158
+ # ์ด์ „์— ์žˆ๋˜ ์†Œ์ œ๋ชฉ๋“ค๊ณผ ๋น„์Šทํ•œ ๊ธธ์ด๋ฅผ ๊ฐ€์ง„ ๊ฒฝ์šฐ๋„ ์†Œ์ œ๋ชฉ์œผ๋กœ ๊ฐ„์ฃผ
159
+ elif section_number > 1 and prev_empty and 5 <= len(line) <= 50:
160
+ is_subtitle = True
161
+
162
+ if is_subtitle and clean_subtitle.strip():
163
+ if in_paragraph:
164
+ formatted_lines.append("</p>")
165
+ in_paragraph = False
166
+
167
+ # ์†Œ์ œ๋ชฉ์ด ์—†๊ฑฐ๋‚˜ ๋„ˆ๋ฌด ์งง์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์†Œ์ œ๋ชฉ ์‚ฌ์šฉ
168
+ if not clean_subtitle.strip() or len(clean_subtitle.strip()) < 2:
169
+ clean_subtitle = f"์ฃผ์š” ํฌ์ธํŠธ {section_number}"
170
+
171
+ # ์†Œ์ œ๋ชฉ ํ˜•์‹ ๊ฐ•ํ™” - ํ•ญ์ƒ ๋ณผ๋“œ์ฒ˜๋ฆฌ์™€ ์Šคํƒ€์ผ๋ง ์ ์šฉ
172
+ formatted_lines.append(
173
+ f'<h2 style="font-size: 1.4em; margin-top: 30px; margin-bottom: 15px; font-weight: bold; color: #333; border-bottom: 1px solid #eee; padding-bottom: 8px;">{html.escape(clean_subtitle)}</h2>'
174
+ )
175
+ section_number += 1
176
+ else:
177
+ # ์ผ๋ฐ˜ ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ
178
+ if not in_paragraph:
179
+ formatted_lines.append("<p>")
180
+ in_paragraph = True
181
+ content = html.escape(line)
182
+ bold_content = re.sub(r'\*\*(.*?)\*\*', r'<strong>\1</strong>', content)
183
+ formatted_lines.append(bold_content)
184
+
185
+ if in_paragraph:
186
+ formatted_lines.append("</p>")
187
+
188
+ return '\n'.join(formatted_lines)
189
+
190
+ # -------------------------------
191
+ # ์Šคํƒ€์ผ ๋ฐ ํ”„๋กฌํ”„ํŠธ ๊ฐ€์ด๋“œ ํ•จ์ˆ˜
192
+ # -------------------------------
193
+
194
+ def get_style_prompt(style="์นœ๊ทผํ•œ"):
195
+ """๋ธ”๋กœ๊ทธ ๊ธ€์˜ ์Šคํƒ€์ผ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋ฐ˜ํ™˜"""
196
+ prompts = {
197
+ "์นœ๊ทผํ•œ": """
198
+ [์นœ๊ทผํ•œ ์—ฌํ–‰ ๋ธ”๋กœ๊ทธ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ]
199
+ 1. ํ†ค๊ณผ ์–ด์กฐ
200
+ - ๋Œ€ํ™”ํ•˜๋“ฏ ํŽธ์•ˆํ•˜๊ณ  ์นœ๊ทผํ•œ ๋งํˆฌ ์‚ฌ์šฉ
201
+ - ์—ฌํ–‰์ง€์— ๋Œ€ํ•œ ๊ด€์‹ฌ๊ณผ ํ˜ธ๊ธฐ์‹ฌ์„ ๋‹ด์€ ํ‘œํ˜„ ์‚ฌ์šฉ
202
+ - ์‹ค์ œ ์—ฌํ–‰์„ ๊ฒฝํ—˜ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ƒ์ƒํ•œ ๋ฌ˜์‚ฌ
203
+ 2. ๋ฌธ์žฅ ๋ฐ ์–ดํˆฌ
204
+ - ๋ฐ˜๋“œ์‹œ 'ํ•ด์š”์ฒด'๋กœ ์ž‘์„ฑ, ์ ˆ๋Œ€ '์Šต๋‹ˆ๋‹ค'์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง ๊ฒƒ
205
+ - '~์š”'๋กœ ๋๋‚˜๋„๋ก ์ž‘์„ฑ, '~๋‹ค'๋กœ ๋๋‚˜์ง€ ์•Š๊ฒŒ ํ•˜๋ผ
206
+ - ๊ตฌ์–ด์ฒด ํ‘œํ˜„ ์‚ฌ์šฉ (์˜ˆ: "~ํ–ˆ์–ด์š”", "~์ธ ๊ฒƒ ๊ฐ™์•„์š”")
207
+ - ์ ์ ˆํ•œ ๊ฐ์ • ํ‘œํ˜„๊ณผ ๊ณต๊ฐ๋Œ€ ํ˜•์„ฑ
208
+ 3. ์šฉ์–ด ๋ฐ ์„ค๋ช… ๋ฐฉ์‹
209
+ - ์—ฌํ–‰ ๊ด€๋ จ ์ „๋ฌธ ์šฉ์–ด๋Š” ์‰ฌ์šด ๋‹จ์–ด๋กœ ํ’€์–ด์„œ ์„ค๋ช…
210
+ - ๋น„์œ ๋‚˜ ์€์œ ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์žฅ์†Œ์™€ ๊ฒฝํ—˜ ๋ฌ˜์‚ฌ
211
+ - ์ˆ˜์‚ฌ์˜๋ฌธ๋ฌธ ํ™œ์šฉํ•˜์—ฌ ๋…์ž์™€ ์†Œํ†ตํ•˜๋Š” ๋А๋‚Œ ์ฃผ๊ธฐ (์˜ˆ: "์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์„ธ์š”?", "์ด๋Ÿฐ ๊ฒฝํ—˜ ์žˆ์œผ์‹ ๊ฐ€์š”?")
212
+ - ๊ตฌ์ฒด์  ์‚ฌ๋ก€์™€ ์‹ค์ œ ๊ฒฝํ—˜์— ๊ธฐ๋ฐ˜ํ•œ ํŒ ์ œ๊ณต
213
+ 4. ์ •๋ณด ์ „๋‹ฌ ๋ฐฉ์‹
214
+ - ๊ฐœ์ธ์ ์ธ ๊ด€์ ์— ๋…น์—ฌ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ •๋ณด ์ „๋‹ฌ
215
+ - ์‹ค์ œ ์—ฌํ–‰์ž์˜ ์‹œ์„ ์œผ๋กœ ์žฅ์†Œ์™€ ๊ฒฝํ—˜ ๋ฌ˜์‚ฌ
216
+ - ๋…์ž๊ฐ€ ์‹ค์ œ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์šฉ์  ์ •๋ณด ์ œ๊ณต (๊ตํ†ต, ๋น„์šฉ, ์‹œ๊ฐ„, ์ถ”์ฒœ ์ฝ”์Šค ๋“ฑ)
217
+ 5. ๋…์ž์™€์˜ ์ƒํ˜ธ์ž‘์šฉ
218
+ - ๋…์ž์˜ ์˜๊ฒฌ์„ ๋ฌผ์–ด๋ณด๋Š” ์งˆ๋ฌธ ํฌํ•จ
219
+ - ์‹ค์ œ ์—ฌํ–‰์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŒ์ด๋‚˜ ์กฐ์–ธ ์ œ๊ณต
220
+ ์ฃผ์˜์‚ฌํ•ญ: ์ž์—ฐ์Šค๋Ÿฌ์šด ๋Œ€ํ™”์ฒด๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์ •๋ณด์˜ ์งˆ๊ณผ ๋‚ด์šฉ์˜ ๊นŠ์ด๋ฅผ ์žƒ์ง€ ์•Š๋„๋ก ํ•œ๋‹ค
221
+ """,
222
+ "์ผ๋ฐ˜": """
223
+ [์ผ๋ฐ˜์ ์ธ ์—ฌํ–‰ ๋ธ”๋กœ๊ทธ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ]
224
+ 1. ํ†ค๊ณผ ์–ด์กฐ
225
+ - ์ค‘๋ฆฝ์ ์ด๊ณ  ๊ฐ๊ด€์ ์ธ ํ†ค ์œ ์ง€
226
+ - ์ ์ ˆํ•œ ์กด๋Œ“๋ง ์‚ฌ์šฉ (์˜ˆ: "~ํ•ฉ๋‹ˆ๋‹ค", "~์ž…๋‹ˆ๋‹ค")
227
+ - ์—ฌํ–‰ ์ •๋ณด ์ „๋‹ฌ ์ค‘์‹ฌ์˜ ๋ช…ํ™•ํ•œ ์–ดํˆฌ
228
+ 2. ๋‚ด์šฉ ๊ตฌ์กฐ ๋ฐ ์ „๊ฐœ
229
+ - ๋ช…ํ™•ํ•œ ์—ฌํ–‰์ง€ ์†Œ๊ฐœ๋กœ ์‹œ์ž‘
230
+ - ๋…ผ๋ฆฌ์ ์ธ ์ˆœ์„œ๋กœ ์ •๋ณด ์ „๊ฐœ (๊ตํ†ต โ†’ ์ˆ™๋ฐ• โ†’ ๊ด€๊ด‘์ง€ โ†’ ์Œ์‹ ๋“ฑ)
231
+ - ํ•ต์‹ฌ ํฌ์ธํŠธ๋ฅผ ๊ฐ•์กฐํ•˜๋Š” ์†Œ์ œ๋ชฉ ํ™œ์šฉ
232
+ - ์ ์ ˆํ•œ ๊ธธ์ด์˜ ๋‹จ๋ฝ์œผ๋กœ ๊ตฌ์„ฑ
233
+ 3. ์šฉ์–ด ๋ฐ ์„ค๋ช… ๋ฐฉ์‹
234
+ - ์ผ๋ฐ˜์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์šฉ์–ด ์„ ํƒ
235
+ - ํ•„์š”์‹œ ์ง€์—ญ ํŠน์œ ์˜ ์šฉ์–ด์— ๊ฐ„๋‹จํ•œ ์„ค๋ช… ์ถ”๊ฐ€
236
+ - ๊ฐ๊ด€์ ์ธ ์—ฌํ–‰ ์ •๋ณด ์ œ๊ณต์— ์ค‘์ 
237
+ - ๊ท ํ˜• ์žกํžŒ ์‹œ๊ฐ์—์„œ ์—ฌํ–‰์ง€์˜ ์žฅ๋‹จ์  ์ œ์‹œ
238
+ 4. ์ •๋ณด ์ „๋‹ฌ ๋ฐฉ์‹
239
+ - ์—ฌํ–‰์ง€์˜ ๊ธฐ๋ณธ ์ •๋ณด์™€ ํŠน์ง• ๋ช…ํ™•ํ•˜๊ฒŒ ์ œ๊ณต
240
+ - ๊ตฌ์ฒด์ ์ธ ์˜ˆ์‹œ์™€ ์ถ”์ฒœ ์ฝ”์Šค ํฌํ•จ
241
+ - ์ตœ์‹  ์—ฌํ–‰ ์ •๋ณด์™€ ๋™ํ–ฅ ์ฐธ๊ณ 
242
+ 5. ๋…์ž ์ƒํ˜ธ์ž‘์šฉ
243
+ - ์ ์ ˆํžˆ ๋…์ž์˜ ์ƒ๊ฐ์„ ๋ฌป๋Š” ์งˆ๋ฌธ ํฌํ•จ
244
+ - ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ํ‚ค์›Œ๋“œ ์ œ์‹œ
245
+ - ์‹ค์šฉ์ ์ธ ์—ฌํ–‰ ํŒ ์ œ๊ณต
246
+
247
+ ์ฃผ์˜์‚ฌํ•ญ: ๊ฐ๊ด€์  ์ •๋ณด ์ œ๊ณต์„ ์ค‘์‹ฌ์œผ๋กœ ํ•˜๋˜, ๋…์ž์˜ ์—ฌํ–‰ ๊ณ„ํš๊ณผ ์‹คํ–‰์„ ๋„์šธ ์ˆ˜ ์žˆ๋Š” ๋งฅ๋ฝ๊ณผ ์„ค๋ช…์„ ์ถฉ๋ถ„ํžˆ ์ œ๊ณตํ•œ๋‹ค
248
+ """,
249
+ "์ „๋ฌธ์ ์ธ": """
250
+ [์ „๋ฌธ์ ์ธ ์—ฌํ–‰ ๋ธ”๋กœ๊ทธ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ]
251
+ 1. ํ†ค๊ณผ ๊ตฌ์กฐ
252
+ - ๊ณต์‹์ ์ด๊ณ  ์ „๋ฌธ์ ์ธ ํ†ค ์‚ฌ์šฉ
253
+ - ๊ฐ๊ด€์ ์ด๊ณ  ๋ถ„์„์ ์ธ ์ ‘๊ทผ ์œ ์ง€
254
+ - ๋ช…ํ™•ํ•œ ์„œ๋ก (์—ฌํ–‰์ง€ ๊ฐœ์š”), ๋ณธ๋ก (์ƒ์„ธ ๋ถ„์„), ๊ฒฐ๋ก (์ข…ํ•ฉ ํ‰๊ฐ€) ๊ตฌ์กฐ
255
+ - ์ฒด๊ณ„์ ์ธ ์—ฌํ–‰ ์ •๋ณด ์ „๊ฐœ
256
+ - ์„ธ๋ถ€ ์„น์…˜์„ ์œ„ํ•œ ๋ช…ํ™•ํ•œ ์†Œ์ œ๋ชฉ ์‚ฌ์šฉ
257
+ 2. ๋‚ด์šฉ ๊ตฌ์„ฑ ๋ฐ ์ „๊ฐœ
258
+ - ์—ฌํ–‰์ง€์˜ ์—ญ์‚ฌ์  ๋ฐฐ๊ฒฝ, ๋ฌธํ™”์  ํŠน์ง•, ํ˜„์žฌ ๋™ํ–ฅ ๋“ฑ ์‹ฌ์ธต์  ์ •๋ณด ํฌํ•จ
259
+ - ๋…ผ๋ฆฌ์  ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ์ „ํ™˜์–ด ํ™œ์šฉ
260
+ - ์—ฌํ–‰ ์šฉ์–ด ์ ์ ˆํžˆ ํ™œ์šฉ (ํ•„์š”์‹œ ๊ฐ„๋žตํ•œ ์„ค๋ช… ์ œ๊ณต)
261
+ - ์‹ฌ์ธต์ ์ธ ๋ถ„์„๊ณผ ๋น„ํŒ์  ํ‰๊ฐ€ ์ œ๊ณต
262
+ - ๋‹ค์–‘ํ•œ ๊ด€์ ์—์„œ ์—ฌํ–‰์ง€ ๋ถ„์„
263
+ 3. ๋ฐ์ดํ„ฐ ๋ฐ ๊ทผ๊ฑฐ ํ™œ์šฉ
264
+ - ํ†ต๊ณ„, ์‹œ์ฆŒ๋ณ„ ์ •๋ณด, ์‹ค์ œ ์‚ฌ๋ก€ ๋“ฑ ๊ฐ๊ด€์  ๋ฐ์ดํ„ฐ ํ™œ์šฉ
265
+ - ์—ฌํ–‰์ง€ ๋ถ„์„์„ ์œ„ํ•œ ์ฒด๊ณ„์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ ์ œ์‹œ
266
+ - ๊ฐ๊ด€์  ์ •๋ณด์™€ ์ „๋ฌธ๊ฐ€ ๊ด€์ ์˜ ๊ท ํ˜•
267
+ 4. ์ „๋ฌธ์  ์ •๋ณด ์ œ๊ณต
268
+ - ์ตœ์‹  ์—ฌํ–‰ ๋™ํ–ฅ ๋ฐ ๋ณ€ํ™” ๋ถ„์„
269
+ - ๋ฌธํ™”, ์—ญ์‚ฌ์  ๋งฅ๋ฝ์—์„œ์˜ ์—ฌํ–‰์ง€ ๋ถ„์„
270
+ - ์—ฌํ–‰ ๊ด€๋ จ ์Ÿ์ ๊ณผ ๊ณ ๋ ค์‚ฌํ•ญ ์†Œ๊ฐœ
271
+ - ์ฒด๊ณ„์ ์ธ ์—ฌํ–‰ ๊ณ„ํš ์ ‘๊ทผ๋ฒ• ์ œ์‹œ
272
+ ์ฃผ์˜์‚ฌํ•ญ: ์ „๋ฌธ์„ฑ๊ณผ ๊นŠ์ด๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์ดํ•ด ๊ฐ€๋Šฅํ•œ ์šฉ์–ด์™€ ์„ค๋ช…์„ ํ†ตํ•ด ์ ‘๊ทผ์„ฑ์„ ๋†’์ธ๋‹ค
273
+ """
274
+ }
275
+ return prompts.get(style, prompts["์นœ๊ทผํ•œ"])
276
+
277
+ def get_category_outline_prompt(category="์—ฌํ–‰ ๋‹จ์ผ"):
278
+ """์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์•„์›ƒ๋ผ์ธ ์ƒ์„ฑ ํ”„๋กฌํ”„ํŠธ"""
279
+ prompts = {
280
+ "์—ฌํ–‰ ๋‹จ์ผ": """
281
+ [์—ฌํ–‰ ๋‹จ์ผ์ง€์  ์†Œ์ฃผ์ œ(Outline) ์ƒ์„ฑ ๊ทœ์น™]
282
+ [์‹œ์Šคํ…œ ์—ญํ• ]
283
+ ๋‹น์‹ ์€ ์ˆ˜๋…„๊ฐ„์˜ ๊ฒฝํ—˜์„ ๊ฐ€์ง„ ์ „๋ฌธ ์—ฌํ–‰ ๋ธ”๋กœ๊ฑฐ์ž…๋‹ˆ๋‹ค. ํŠน์ • ๋ช…์†Œ, ์ถ•์ œ, ์ด๋ฒคํŠธ ๋“ฑ ๋‹จ์ผ ์—ฌํ–‰ ์ฝ”์Šค์— ๋Œ€ํ•œ ์ƒ์ƒํ•œ ๊ฒฝํ—˜๊ณผ ์œ ์šฉํ•œ ์ •๋ณด๋กœ ๋งŽ์€ ๋…์ž๋“ค์˜ ์‹ ๋ขฐ๋ฅผ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
284
+
285
+ [๋ถ„์„ ๋‹จ๊ณ„]
286
+ 1.์ฐธ๊ณ  ์ž๋ฃŒ 3๊ฐœ๋ฅผ ์ฒ ์ €ํžˆ ๋ถ„์„ํ•˜์—ฌ ํ•ด๋‹น ๋ช…์†Œ/์ถ•์ œ์˜ ํ•ต์‹ฌ ํŠน์ง•๊ณผ ์ค‘์š” ์ •๋ณด ํŒŒ์•…
287
+ 2. ์—ฌํ–‰ ๋ช…์†Œ/์ถ•์ œ์˜ ์œ ํ˜•๊ณผ ํŠน์„ฑ ์‹๋ณ„ (๊ณ„์ ˆ ์ถ•์ œ, ๋ฌธํ™” ํ–‰์‚ฌ, ์ž์—ฐ ๋ช…์†Œ, ์—ญ์‚ฌ ์œ ์ ์ง€ ๋“ฑ)
288
+ 3. ํฌ์ŠคํŒ…์˜ ํ•ต์‹ฌ์ด ๋  5๊ฐ€์ง€ ์ฃผ์š” ์š”์†Œ ํŒŒ์•… (ํ–‰์‚ฌ ํŠน์ง•, ๋ณผ๊ฑฐ๋ฆฌ, ์ฆ๊ธธ๊ฑฐ๋ฆฌ, ๋ฐฉ๋ฌธ ํŒ, ๊ตํ†ต/ํŽธ์˜์‹œ์„ค ๋“ฑ)
289
+
290
+ [์•„์›ƒ๋ผ์ธ ๊ตฌ์„ฑ ์›์น™]
291
+ 1. ๋„์ž…๋ถ€(1๊ฐœ) - ํ•ด๋‹น ๋ช…์†Œ/์ถ•์ œ์˜ ๋งค๋ ฅ์„ ์ง‘์•ฝํ•œ ํฅ๋ฏธ๋กœ์šด ์ œ๋ชฉ์œผ๋กœ ์‹œ์ž‘
292
+ 2. ๋ณธ๋ก (4-5๊ฐœ) - ์ฐธ๊ณ  ์ž๋ฃŒ ๋ถ„์„์„ ํ†ตํ•ด ๋ฐœ๊ฒฌํ•œ ๋ช…์†Œ/์ถ•์ œ์˜ ํ•ต์‹ฌ ํŠน์ง•๊ณผ ๋ฐฉ๋ฌธ ์ •๋ณด๋ฅผ ๋‹ด์€ ์†Œ์ œ๋ชฉ
293
+ - ๋ช…์†Œ/์ถ•์ œ์˜ ์ฃผ์š” ํŠน์ง•๊ณผ ์—ญ์‚ฌ์ /๋ฌธํ™”์  ์˜๋ฏธ
294
+ - ๋ฐ˜๋“œ์‹œ ๋†“์น˜์ง€ ๋ง์•„์•ผ ํ•  ํ•ต์‹ฌ ๋ณผ๊ฑฐ๋ฆฌ์™€ ์ฆ๊ธธ๊ฑฐ๋ฆฌ
295
+ - ๋ฐฉ๋ฌธ ์‹œ๊ธฐ, ์‹œ๊ฐ„๋Œ€, ๊ณ„์ ˆ๋ณ„ ํŠน์ง•
296
+ - ๊ตํ†ต, ์ž…์žฅ๋ฃŒ, ์ฃผ์ฐจ, ํŽธ์˜์‹œ์„ค ๋“ฑ ์‹ค์šฉ์  ์ •๋ณด
297
+ - ๋ฐฉ๋ฌธ ์‹œ ์œ ์šฉํ•œ ๊ฟ€ํŒ๊ณผ ์ฃผ์˜์‚ฌํ•ญ
298
+ - (์œ„ ํ•ญ๋ชฉ๋“ค์€ ์˜ˆ์‹œ์ผ ๋ฟ, ์ฐธ๊ณ  ์ž๋ฃŒ ๋ถ„์„์„ ํ†ตํ•ด ์ž์œ ๋กญ๊ฒŒ ๊ฒฐ์ •)
299
+ 3. ๊ฒฐ๋ก (1๊ฐœ) - ์ „์ฒด ๊ฒฝํ—˜์„ ์š”์•ฝํ•˜๊ณ  ๋ฐฉ๋ฌธ ๊ฐ€์น˜๋ฅผ ๊ฐ•์กฐํ•˜๋Š” ์ œ๋ชฉ
300
+
301
+ [ํ•ต์‹ฌ ์ง€์นจ]
302
+ 1. ์™„์ „ํžˆ ํ•œ๊ตญ์–ด๋กœ๋งŒ ์ž‘์„ฑํ•  ๊ฒƒ
303
+ 2. ์†Œ์ œ๋ชฉ์€ ์ตœ๋Œ€ 30์ž ์ด๋‚ด๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑ
304
+ 3. ๋…์ž์˜ ํ˜ธ๊ธฐ์‹ฌ๊ณผ ๋ฐฉ๋ฌธ ์š•๊ตฌ๋ฅผ ์ž๊ทนํ•˜๋Š” ํ‘œํ˜„ ์‚ฌ์šฉ (์˜ˆ: "๋†“์น˜๋ฉด ํ›„ํšŒํ• ", "์ˆจ๊ฒจ์ง„ ์ฆ๊ธธ๊ฑฐ๋ฆฌ", "ํ˜„์ง€์ธ๋„ ์ถ”์ฒœํ•˜๋Š”")
305
+ 4. ๋ช…์†Œ/์ถ•์ œ์˜ ๊ฐ€์žฅ ๋…ํŠนํ•˜๊ณ  ๋งค๋ ฅ์ ์ธ ํŠน์ง•์ด ์†Œ์ œ๋ชฉ์— ๋ฐ˜์˜๋˜๋„๋ก ๊ตฌ์„ฑ
306
+ 5. ํ‚ค์›Œ๋“œ๋Š” ์†Œ์ œ๋ชฉ ๊ฒฐ์ •์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ (๋ณธ๋ฌธ ์ž‘์„ฑ ์‹œ ์ฐธ๊ณ ์‚ฌํ•ญ์œผ๋กœ๋งŒ ํ™œ์šฉ)
307
+ 6. ์ „์ฒด ์•„์›ƒ๋ผ์ธ์€ ๋„์ž…๋ถ€(1) + ๋ณธ๋ก (์ตœ๋Œ€ 5๊ฐœ) + ๊ฒฐ๋ก (1)์œผ๋กœ ๊ตฌ์„ฑ
308
+
309
+ [์ถœ๋ ฅ ํ˜•์‹]
310
+ 1. ์ฐธ๊ณ  ์ž๋ฃŒ ๋ถ„์„์„ ํ†ตํ•ด ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ๋ช…์†Œ/์ถ•์ œ ํŠน์ง•๊ณผ ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•˜์—ฌ ์ž์œ ๋กญ๊ฒŒ ์•„์›ƒ๋ผ์ธ ๊ตฌ์„ฑ
311
+ 2. ํ•˜์ง€๋งŒ ๋ฐ˜๋“œ์‹œ ๋‹ค์Œ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•  ๊ฒƒ:(๊ฐ ํ•ญ๋ชฉ๋‹น 1๋ฒˆ ์—”ํ„ฐ๋ฅผ ์ ์šฉํ•˜์—ฌ ๋นˆ์นธ์ด ๋‚˜์˜ค์ง€ ์•Š๋„๋กํ•˜๋ผ.)
312
+ 3. ๋„์ž…๋ถ€: 1๊ฐœ (๋ช…์†Œ/์ถ•์ œ์˜ ๋งค๋ ฅ์„ ๋‹ด์€ ํฅ๋ฏธ๋กœ์šด ์ œ๋ชฉ)
313
+ 4. ๋ณธ๋ก : 4-5๊ฐœ (๋ช…์†Œ/์ถ•์ œ์˜ ํ•ต์‹ฌ ํŠน์ง•๊ณผ ์‹ค์šฉ ์ •๋ณด๋ฅผ ๋ฐ˜์˜ํ•œ ์ œ๋ชฉ)
314
+ 5. ๊ฒฐ๋ก : 1๊ฐœ (์ „์ฒด ๊ฒฝํ—˜ ์š”์•ฝ ๋ฐ ๋ฐฉ๋ฌธ ๊ฐ€์น˜ ๊ฐ•์กฐ ์ œ๋ชฉ)
315
+ 6. ์†Œ์ œ๋ชฉ์€ ํ•ด๋‹น ๋ช…์†Œ/์ถ•์ œ์˜ ์‹ค์ œ ํŠน์ง•๊ณผ ๋ฐฉ๋ฌธ ์ •๋ณด์— ๋งž๊ฒŒ ์ž์œ ๋กญ๊ฒŒ ๊ตฌ์„ฑ
316
+ 7. ํ‚ค์›Œ๋“œ์— ๋งž์ถ”์ง€ ๋ง๊ณ , ์ฐธ๊ณ  ์ž๋ฃŒ ๋ถ„์„์„ ํ†ตํ•ด ๋ฐœ๊ฒฌํ•œ ํ•ต์‹ฌ ๊ฐ€์น˜์™€ ์ •๋ณด ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์„ฑ
317
+ 8. ์˜ˆ์‹œ ํ˜•์‹ (์ฐธ๊ณ ์šฉ์ผ ๋ฟ, ๋‚ด์šฉ์€ ์ฐธ๊ณ  ์ž๋ฃŒ์— ๋”ฐ๋ผ ์™„์ „ํžˆ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ):
318
+ - ๋„์ž…๋ถ€: [๋ช…์†Œ/์ถ•์ œ์˜ ๋งค๋ ฅ ์†Œ๊ฐœ ์ œ๋ชฉ]
319
+ - ๋ณธ๋ก 1: [ํ•ต์‹ฌ ํŠน์ง•/์—ญ์‚ฌ์  ์˜๋ฏธ ๊ด€๋ จ ์ œ๋ชฉ]
320
+ - ๋ณธ๋ก 2: [์ฃผ์š” ๋ณผ๊ฑฐ๋ฆฌ/์ฆ๊ธธ๊ฑฐ๋ฆฌ ๊ด€๋ จ ์ œ๋ชฉ]
321
+ - ๋ณธ๋ก 3: [์ตœ์ ์˜ ๋ฐฉ๋ฌธ ์‹œ๊ธฐ/์‹œ๊ฐ„ ๊ด€๋ จ ์ œ๋ชฉ]
322
+ - ๋ณธ๋ก 4: [๊ตํ†ต/ํŽธ์˜์‹œ์„ค ์ •๋ณด ๊ด€๋ จ ์ œ๋ชฉ]
323
+ - ๋ณธ๋ก 5: [๋ฐฉ๋ฌธ ๊ฟ€ํŒ/์ฃผ์˜์‚ฌํ•ญ ๊ด€๋ จ ์ œ๋ชฉ] (ํ•„์š”์‹œ)
324
+ - ๊ฒฐ๋ก : [๊ฒฝํ—˜ ์š”์•ฝ ๋ฐ ๋ฐฉ๋ฌธ ๊ฐ€์น˜ ๊ฐ•์กฐ ์ œ๋ชฉ]
325
+ """,
326
+ "์—ฌํ–‰ ์ฝ”์Šค": """
327
+ [์—ฌํ–‰ ์ฝ”์Šค ์†Œ์ฃผ์ œ(Outline) ์ƒ์„ฑ ๊ทœ์น™]
328
+ [์‹œ์Šคํ…œ ์—ญํ• ]
329
+ ๋‹น์‹ ์€ ์ˆ˜๋…„๊ฐ„์˜ ๊ฒฝํ—˜์„ ๊ฐ€์ง„ ์ „๋ฌธ ์—ฌํ–‰ ์ฝ”์Šค ๊ธฐํš์ž์ž…๋‹ˆ๋‹ค. ํšจ์œจ์ ์ด๊ณ  ๋งค๋ ฅ์ ์ธ ์—ฌํ–‰ ์ฝ”์Šค ์„ค๊ณ„์™€ ์‹ค์šฉ์ ์ธ
330
+ ์—ฌํ–‰ ํŒ์œผ๋กœ ๋งŽ์€ ๋…์ž๋“ค์˜ ์‹ ๋ขฐ๋ฅผ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
331
+
332
+ [๋ถ„์„ ๋‹จ๊ณ„]
333
+ 1. ์ฐธ๊ณ  ์ž๋ฃŒ 3๊ฐœ๋ฅผ ์ฒ ์ €ํžˆ ๋ถ„์„ํ•˜์—ฌ ํ•ด๋‹น ์ง€์—ญ์˜ ํ•ต์‹ฌ ๋ช…์†Œ์™€ ์—ฌํ–‰ ์ •๋ณด ํŒŒ์•…
334
+ 2. ์—ฌํ–‰ ์ง€์—ญ์˜ ์œ ํ˜•๊ณผ ํŠน์„ฑ ์‹๋ณ„ (๋„์‹œ ์—ฌํ–‰, ์ž์—ฐ ์—ฌํ–‰, ๋ฌธํ™” ํƒ๋ฐฉ, ๋ง›์ง‘ ํˆฌ์–ด ๋“ฑ)
335
+ 3. ํฌ์ŠคํŒ…์˜ ํ•ต์‹ฌ์ด ๋  5๊ฐ€์ง€ ์ฃผ์š” ์š”์†Œ ํŒŒ์•… (์—ฌํ–‰ ๊ธฐ๊ฐ„, ์ฃผ์š” ๋ช…์†Œ, ์ด๋™ ๋ฐฉ๋ฒ•, ์ˆ™๋ฐ• ์˜ต์…˜, ์˜ˆ์‚ฐ ๋“ฑ)
336
+
337
+ [์•„์›ƒ๋ผ์ธ ๊ตฌ์„ฑ ์›์น™]
338
+ 1. ๋„์ž…๋ถ€(1๊ฐœ) - ํ•ด๋‹น ์ง€์—ญ์˜ ๋งค๋ ฅ๊ณผ ์ฝ”์Šค์˜ ํŠน์ง•์„ ์ง‘์•ฝํ•œ ํฅ๋ฏธ๋กœ์šด ์ œ๋ชฉ์œผ๋กœ ์‹œ์ž‘
339
+ 2. ๋ณธ๋ก (4-5๊ฐœ) - ์ฐธ๊ณ  ์ž๋ฃŒ ๋ถ„์„์„ ํ†ตํ•ด ์„ค๊ณ„ํ•œ ์—ฌํ–‰ ์ฝ”์Šค์˜ ์ฃผ์š” ์ผ์ •๊ณผ ์ •๋ณด๋ฅผ ๋‹ด์€ ์†Œ์ œ๋ชฉ
340
+ 3. ์ฝ”์Šค ๊ฐœ์š”์™€ ์—ฌํ–‰ ๊ธฐ๊ฐ„๋ณ„ ์ถ”์ฒœ ์ผ์ •
341
+ 4. ์ผ์ฐจ๋ณ„ ๋˜๋Š” ํ…Œ๋งˆ๋ณ„ ์„ธ๋ถ€ ์ฝ”์Šค ๊ตฌ์„ฑ
342
+ 5. ํšจ์œจ์ ์ธ ์ด๋™ ๋ฐฉ๋ฒ•๊ณผ ๊ตํ†ต ์ •๋ณด
343
+ 6. ์ˆ™์†Œ ๋ฐ ์‹๋‹น ์ถ”์ฒœ๊ณผ ์˜ˆ์•ฝ ํŒ
344
+ 7. ์—ฌํ–‰ ์˜ˆ์‚ฐ๊ณผ ๋น„์šฉ ์ ˆ์•ฝ ๋ฐฉ๋ฒ•
345
+ 8. (์œ„ ํ•ญ๋ชฉ๋“ค์€ ์˜ˆ์‹œ์ผ ๋ฟ, ์ฐธ๊ณ  ์ž๋ฃŒ ๋ถ„์„์„ ํ†ตํ•ด ์ž์œ ๋กญ๊ฒŒ ๊ฒฐ์ •)
346
+ 9. ๊ฒฐ๋ก (1๊ฐœ) - ์ „์ฒด ์ฝ”์Šค์˜ ํŠน์ง•์„ ์š”์•ฝํ•˜๊ณ  ์—ฌํ–‰ ๊ณ„ํš ์ˆ˜๋ฆฝ์— ๋„์›€์„ ์ฃผ๋Š” ์ œ๋ชฉ
347
+
348
+ [ํ•ต์‹ฌ ์ง€์นจ]
349
+ 1. ์™„์ „ํžˆ ํ•œ๊ตญ์–ด๋กœ๋งŒ ์ž‘์„ฑํ•  ๊ฒƒ
350
+ 2. ์†Œ์ œ๋ชฉ์€ ์ตœ๋Œ€ 30์ž ์ด๋‚ด๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑ
351
+ 3. ๋…์ž์˜ ์—ฌํ–‰ ๊ณ„ํš ์ˆ˜๋ฆฝ์„ ๋•๋Š” ์‹ค์šฉ์ ์ธ ํ‘œํ˜„ ์‚ฌ์šฉ (์˜ˆ: "์™„๋ฒฝํ•œ 3๋ฐ• 4์ผ ์ฝ”์Šค", "ํšจ์œจ์ ์ธ ๋™์„  ์„ค๊ณ„", "ํ˜„์ง€์ธ์ด ์•Œ๋ ค์ฃผ๋Š” ๊ฟ€์ฝ”์Šค")
352
+ 4. ์ฝ”์Šค์˜ ํšจ์œจ์„ฑ๊ณผ ๋งค๋ ฅ์ ์ธ ํŠน์ง•์ด ์†Œ์ œ๋ชฉ์— ๋ฐ˜์˜๋˜๋„๋ก ๊ตฌ์„ฑ
353
+ 5. ํ‚ค์›Œ๋“œ๋Š” ์†Œ์ œ๋ชฉ ๊ฒฐ์ •์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ (๋ณธ๋ฌธ ์ž‘์„ฑ ์‹œ ์ฐธ๊ณ ์‚ฌํ•ญ์œผ๋กœ๋งŒ ํ™œ์šฉ)
354
+ 6. ์ „์ฒด ์•„์›ƒ๋ผ์ธ์€ ๋„์ž…๋ถ€(1) + ๋ณธ๋ก (์ตœ๋Œ€ 5๊ฐœ) + ๊ฒฐ๋ก (1)์œผ๋กœ ๊ตฌ์„ฑ
355
+
356
+ [์ถœ๋ ฅ ํ˜•์‹]
357
+ 1. ์ฐธ๊ณ  ์ž๋ฃŒ ๋ถ„์„์„ ํ†ตํ•ด ๊ฐ€์žฅ ํšจ์œจ์ ์ด๊ณ  ๋งค๋ ฅ์ ์ธ ์—ฌํ–‰ ์ฝ”์Šค๋ฅผ ์„ค๊ณ„ํ•˜์—ฌ ์ž์œ ๋กญ๊ฒŒ ์•„์›ƒ๋ผ์ธ ๊ตฌ์„ฑ
358
+ 2. ํ•˜์ง€๋งŒ ๋ฐ˜๋“œ์‹œ ๋‹ค์Œ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•  ๊ฒƒ:(๊ฐ ํ•ญ๋ชฉ๋‹น 1๋ฒˆ ์—”ํ„ฐ๋ฅผ ์ ์šฉํ•˜์—ฌ ๋นˆ์นธ์ด ๋‚˜์˜ค์ง€ ์•Š๋„๋กํ•˜๋ผ.)
359
+ 3. ๋„์ž…๋ถ€: 1๊ฐœ (์ง€์—ญ ๋งค๋ ฅ๊ณผ ์ฝ”์Šค ํŠน์ง•์„ ๋‹ด์€ ํฅ๋ฏธ๋กœ์šด ์ œ๋ชฉ)
360
+ 4. ๋ณธ๋ก : 4-5๊ฐœ (ํšจ์œจ์ ์ธ ์—ฌํ–‰ ๋™์„ ๊ณผ ์‹ค์šฉ ์ •๋ณด๋ฅผ ๋ฐ˜์˜ํ•œ ์ œ๋ชฉ)
361
+ 5. ๊ฒฐ๋ก : 1๊ฐœ (์ „์ฒด ์ฝ”์Šค ์š”์•ฝ ๋ฐ ๊ณ„ํš ์ˆ˜๋ฆฝ ๋„์›€ ์ œ๋ชฉ)
362
+ 6. ์†Œ์ œ๋ชฉ์€ ํ•ด๋‹น ์ง€์—ญ์˜ ์‹ค์ œ ํŠน์ง•๊ณผ ์ฝ”์Šค ์ •๋ณด์— ๋งž๊ฒŒ ์ž์œ ๋กญ๊ฒŒ ๊ตฌ์„ฑ
363
+ 7. ํ‚ค์›Œ๋“œ์— ๋งž์ถ”์ง€ ๋ง๊ณ , ์ฐธ๊ณ  ์ž๋ฃŒ ๋ถ„์„์„ ํ†ตํ•ด ๋ฐœ๊ฒฌํ•œ ํ•ต์‹ฌ ์ฝ”์Šค์™€ ์ •๋ณด ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์„ฑ
364
+ 8. ์˜ˆ์‹œ ํ˜•์‹ (์ฐธ๊ณ ์šฉ์ผ ๋ฟ, ๋‚ด์šฉ์€ ์ฐธ๊ณ  ์ž๋ฃŒ์— ๋”ฐ๋ผ ์™„์ „ํžˆ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ):
365
+ - ๋„์ž…๋ถ€: [์ง€์—ญ ๋งค๋ ฅ๊ณผ ์ฝ”์Šค ํŠน์ง• ์†Œ๊ฐœ ์ œ๋ชฉ]
366
+ - ๋ณธ๋ก 1: [์—ฌํ–‰ ๊ธฐ๊ฐ„๋ณ„ ์ถ”์ฒœ ์ผ์ • ๊ด€๋ จ ์ œ๋ชฉ]
367
+ - ๋ณธ๋ก 2: [์ผ์ฐจ๋ณ„/ํ…Œ๋งˆ๋ณ„ ์„ธ๋ถ€ ์ฝ”์Šค ๊ด€๋ จ ์ œ๋ชฉ]
368
+ - ๋ณธ๋ก 3: [๊ตํ†ต/์ด๋™ ๋ฐฉ๋ฒ• ๊ด€๋ จ ์ œ๋ชฉ]
369
+ - ๋ณธ๋ก 4: [์ˆ™์†Œ/์‹๋‹น ์ถ”์ฒœ ๊ด€๋ จ ์ œ๋ชฉ]
370
+ - ๋ณธ๋ก 5: [์˜ˆ์‚ฐ/๋น„์šฉ ์ ˆ์•ฝ ํŒ ๊ด€๋ จ ์ œ๋ชฉ] (ํ•„์š”์‹œ)
371
+ - ๊ฒฐ๋ก : [์ฝ”์Šค ์š”์•ฝ ๋ฐ ๊ณ„ํš ์ˆ˜๋ฆฝ ๋„์›€ ์ œ๋ชฉ]
372
+ """
373
+ }
374
+ return prompts.get(category, prompts["์—ฌํ–‰ ๋‹จ์ผ"])
375
+
376
+ def get_category_blog_prompt(category="์—ฌํ–‰ ๋‹จ์ผ"):
377
+ """์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋ธ”๋กœ๊ทธ ๊ธ€ ์ƒ์„ฑ ํ”„๋กฌํ”„ํŠธ"""
378
+ prompts = {
379
+ "์—ฌํ–‰ ๋‹จ์ผ": """
380
+ [์—ฌํ–‰ ๋‹จ์ผ์ง€์  ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ ๊ฐ€์ด๋“œ]
381
+ 1. ๋„ˆ๋Š” ์ตœ๊ณ ์˜ ์—ฌํ–‰ ๋ธ”๋กœ๊ทธ ์ž‘๊ฐ€์ด์ž ์—ฌํ–‰ ์ •๋ณด ์ „๋‹ฌ ์ „๋ฌธ๊ฐ€์ด๋‹ค.
382
+ 2. ์ฃผ์–ด์ง„ ์•„์›ƒ๋ผ์ธ๊ณผ ์ฐธ๊ณ ๊ธ€์„ ๋ฐ”ํƒ•์œผ๋กœ ๋…์ž์—๊ฒŒ ๊ฐ€์น˜ ์žˆ๋Š” ์—ฌํ–‰ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋ผ.
383
+ 3. ์ •๋ณด์˜ ์ •ํ™•์„ฑ๊ณผ ๊นŠ์ด๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜๋ผ.
384
+ [์ฝ˜ํ…์ธ  ์ž‘์„ฑ ๊ทœ์น™]
385
+ 1. ์—ฌํ–‰์ง€์— ๋Œ€ํ•œ ๊ฐ๊ด€์ ์ธ ์ •๋ณด ์ œ๊ณต์— ์ค‘์ ์„ ๋‘๋˜, ๋…์ž์˜ ๊ด€์‹ฌ๊ณผ ์ฐธ์—ฌ๋ฅผ ์œ ๋„ํ•˜๋ผ.
386
+ 2. ์—ฌํ–‰์ง€์˜ ํŠน์ง•๊ณผ ๋งค๋ ฅ์„ ์ƒ์ƒํ•˜๊ฒŒ ๋ฌ˜์‚ฌํ•˜๋ผ.
387
+ 3. ์—ฌํ–‰์ง€์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ๊ด€์ ๊ณผ ์ธก๋ฉด์„ ๊ท ํ˜• ์žˆ๊ฒŒ ๋‹ค๋ฃจ์–ด๋ผ.
388
+ 4. ๋…์ž๊ฐ€ ์‹ค์ œ ์—ฌํ–‰์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์šฉ์ ์ธ ์ •๋ณด์™€ ํŒ์„ ์ œ๊ณตํ•˜๋ผ.
389
+ - ๊ตํ†ต ์ •๋ณด: ๋Œ€์ค‘๊ตํ†ต, ์ฃผ์ฐจ, ํƒ์‹œ ๋“ฑ
390
+ - ๋น„์šฉ ์ •๋ณด: ์ž…์žฅ๋ฃŒ, ํ‰๊ท  ์‹์‚ฌ ๋น„์šฉ ๋“ฑ
391
+ - ์‹œ๊ฐ„ ์ •๋ณด: ์ตœ์  ๋ฐฉ๋ฌธ ์‹œ๊ฐ„, ์†Œ์š” ์‹œ๊ฐ„ ๋“ฑ
392
+ - ์ถ”์ฒœ ์ฝ”์Šค: ๊ด€๊ด‘์ง€ ๋‚ด ๋™์„ , ์ธ๊ทผ ์—ฐ๊ณ„ ๊ด€๊ด‘์ง€ ๋“ฑ
393
+ 5. ์ฐธ๊ณ ๊ธ€์˜ ์ •๋ณด๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๋˜, ํ‘œํ˜„์„ ๋‹จ์ˆœํžˆ ๋ณต์‚ฌํ•˜์ง€ ๋ง๊ณ  ์ฐฝ์˜์ ์œผ๋กœ ์žฌ๊ตฌ์„ฑํ•˜๋ผ.
394
+ 6. ๊ฐ ์„น์…˜์€ ์ตœ์†Œ {MIN_SECTION_LENGTH}์ž ์ด์ƒ์˜ ์ถฉ๋ถ„ํ•œ ๋‚ด์šฉ์œผ๋กœ ์ž‘์„ฑํ•˜๋ผ.
395
+ 7. ๊ธ€ ์ „์ฒด ๊ธธ์ด๋Š” ์ตœ์†Œ {TARGET_CHAR_LENGTH}์ž๊ฐ€ ๋˜๋„๋ก ์ž‘์„ฑํ•˜๋ผ.
396
+ 8. ๊ธ€ ์ „์ฒด ๊ธธ์ด๋Š” {TARGET_CHAR_LENGTH}์ž์—์„œ {TARGET_CHAR_LENGTH + 1000}์ž ์‚ฌ์ด๊ฐ€ ๋˜๋„๋ก ์ž‘์„ฑํ•˜๋ผ.
397
+ [์ค‘์š” ๊ทœ์น™]
398
+ 1. ๋งˆํฌ๋‹ค์šด ํ˜•์‹(#, *, -, 1., 2. ๋“ฑ)์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ  ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ๏ฟฝ๏ฟฝ๏ฟฝ์„ฑํ•˜๋ผ.
399
+ 2. ์†Œ์ œ๋ชฉ๊ณผ ๊ฒฐ๋ก ์€ ๋ฒˆํ˜ธ ์—†์ด ์ผ๋ฐ˜ ๋ฌธ์žฅ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•˜๋ผ.
400
+ 3. ๋ชฉ๋ก์€ ๋ถˆ๋ฆฟ์ด๋‚˜ ๋ฒˆํ˜ธ ๋Œ€์‹  ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ฌธ์žฅ์œผ๋กœ ์„œ์ˆ ํ•˜๋ผ.
401
+ 4. "์ฐธ๊ณ ๊ธ€", "์ฐธ๊ณ ๊ธ€์— ๋”ฐ๋ฅด๋ฉด" ๋“ฑ์˜ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ.
402
+ 5. "์—ฌ๋Ÿฌ๋ถ„", "๋…์ž ์—ฌ๋Ÿฌ๋ถ„" ๋“ฑ์˜ ์ง์ ‘์ ์ธ ํ˜ธ์นญ์„ ์ง€์–‘ํ•˜๋ผ.
403
+ """,
404
+ "์—ฌํ–‰ ์ฝ”์Šค": """
405
+ [์—ฌํ–‰ ์ฝ”์Šค ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ ๊ฐ€์ด๋“œ]
406
+ 1. ๋„ˆ๋Š” ์ตœ๊ณ ์˜ ์—ฌํ–‰ ์ฝ”์Šค ๋ธ”๋กœ๊ทธ ์ž‘๊ฐ€์ด์ž ์—ฌํ–‰ ์ผ์ • ๊ธฐํš ์ „๋ฌธ๊ฐ€์ด๋‹ค.
407
+ 2. ์ฃผ์–ด์ง„ ์•„์›ƒ๋ผ์ธ๊ณผ ์ฐธ๊ณ ๊ธ€์„ ๋ฐ”ํƒ•์œผ๋กœ ๋…์ž์—๊ฒŒ ์ตœ์ ํ™”๋œ ์—ฌํ–‰ ์ฝ”์Šค ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋ผ.
408
+ 3. ์ •๋ณด์˜ ์ •ํ™•์„ฑ๊ณผ ๊นŠ์ด๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์‹ค์ œ ์—ฌํ–‰์— ์ ์šฉํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜๋ผ.
409
+ [์ฝ˜ํ…์ธ  ์ž‘์„ฑ ๊ทœ์น™]
410
+ 1. ์—ฌํ–‰ ์ฝ”์Šค์— ๋Œ€ํ•œ ๊ฐ๊ด€์ ์ธ ์ •๋ณด ์ œ๊ณต์— ์ค‘์ ์„ ๋‘๋˜, ๋…์ž์˜ ๊ด€์‹ฌ๊ณผ ์ฐธ์—ฌ๋ฅผ ์œ ๋„ํ•˜๋ผ.
411
+ 2. ์—ฌํ–‰ ์ฝ”์Šค์˜ ๋…ผ๋ฆฌ์  ํ๋ฆ„๊ณผ ํšจ์œจ์„ฑ์„ ๋ช…ํ™•ํžˆ ์„ค๋ช…ํ•˜๋ผ.
412
+ 3. ์‹œ๊ฐ„, ๊ฑฐ๋ฆฌ, ๊ตํ†ต ์ •๋ณด๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ œ์‹œํ•˜์—ฌ ์‹ค์ œ ์—ฌํ–‰ ๊ณ„ํš์— ๋„์›€์„ ์ฃผ๋ผ.
413
+ 4. ๋…์ž๊ฐ€ ์‹ค์ œ ์—ฌํ–‰์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์šฉ์ ์ธ ์ •๋ณด์™€ ํŒ์„ ์ œ๊ณตํ•˜๋ผ.
414
+ - ์ผ์ž๋ณ„ ์„ธ๋ถ€ ์ผ์ • ๋ฐ ์†Œ์š” ์‹œ๊ฐ„
415
+ - ์žฅ์†Œ๊ฐ„ ์ด๋™ ๋ฐฉ๋ฒ• ๋ฐ ์†Œ์š” ์‹œ๊ฐ„
416
+ - ๊ฐ ์žฅ์†Œ๋ณ„ ์ฃผ์š” ๋ณผ๊ฑฐ๋ฆฌ ๋ฐ ์ถ”์ฒœ ํ™œ๋™
417
+ - ์‹์‚ฌ ๋ฐ ํœด์‹ ์žฅ์†Œ ์ถ”์ฒœ
418
+ - ์˜ˆ์‚ฐ ์ •๋ณด ๋ฐ ์˜ˆ์•ฝ ํŒ
419
+ 5. ์ฐธ๊ณ ๊ธ€์˜ ์ •๋ณด๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๋˜, ํ‘œํ˜„์„ ๋‹จ์ˆœํžˆ ๋ณต์‚ฌํ•˜์ง€ ๋ง๊ณ  ์ฐฝ์˜์ ์œผ๋กœ ์žฌ๊ตฌ์„ฑํ•˜๋ผ.
420
+ 6. ๊ฐ ์„น์…˜์€ ์ตœ์†Œ {MIN_SECTION_LENGTH}์ž ์ด์ƒ์˜ ์ถฉ๋ถ„ํ•œ ๋‚ด์šฉ์œผ๋กœ ์ž‘์„ฑํ•˜๋ผ.
421
+ 7. ๊ธ€ ์ „์ฒด ๊ธธ์ด๋Š” ์ตœ์†Œ {TARGET_CHAR_LENGTH}์ž๊ฐ€ ๋˜๋„๋ก ์ž‘์„ฑํ•˜๋ผ.
422
+ 8. ๊ธ€ ์ „์ฒด ๊ธธ์ด๋Š” {TARGET_CHAR_LENGTH}์ž์—์„œ {TARGET_CHAR_LENGTH + 1000}์ž ์‚ฌ์ด๊ฐ€ ๋˜๋„๋ก ์ž‘์„ฑํ•˜๋ผ.
423
+ [์ค‘์š” ๊ทœ์น™]
424
+ 1. ๋งˆํฌ๋‹ค์šด ํ˜•์‹(#, *, -, 1., 2. ๋“ฑ)์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ  ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ž‘์„ฑํ•˜๋ผ.
425
+ 2. ์†Œ์ œ๋ชฉ๊ณผ ๊ฒฐ๋ก ์€ ๋ฒˆํ˜ธ ์—†์ด ์ผ๋ฐ˜ ๋ฌธ์žฅ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•˜๋ผ.
426
+ 3. ๋ชฉ๋ก์€ ๋ถˆ๋ฆฟ์ด๋‚˜ ๋ฒˆํ˜ธ ๋Œ€์‹  ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ฌธ์žฅ์œผ๋กœ ์„œ์ˆ ํ•˜๋ผ.
427
+ 4. "์ฐธ๊ณ ๊ธ€", "์ฐธ๊ณ ๊ธ€์— ๋”ฐ๋ฅด๋ฉด" ๋“ฑ์˜ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ.
428
+ 5. "์—ฌ๋Ÿฌ๋ถ„", "๋…์ž ์—ฌ๋Ÿฌ๋ถ„" ๋“ฑ์˜ ์ง์ ‘์ ์ธ ํ˜ธ์นญ์„ ์ง€์–‘ํ•˜๋ผ.
429
+ """
430
+ }
431
+ return prompts.get(category, prompts["์—ฌํ–‰ ๋‹จ์ผ"])
432
+
433
+ def generate_blog_post(category, style, outline_input, references1, references2, references3):
434
+ """ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ๋กœ ์ „์ฒด ๋ธ”๋กœ๊ทธ ๊ธ€ ์ƒ์„ฑ ํ•จ์ˆ˜ (ํ‡ด๊ณ  ๋ฐ ํ™•์žฅ ๊ธฐ๋Šฅ ํฌํ•จ)"""
435
+ try:
436
+ # ์ฐธ๊ณ ๊ธ€ ์ค€๋น„
437
+ references = [
438
+ references1.strip() if references1.strip() else "์ฐธ๊ณ  ์ž๋ฃŒ ์—†์Œ",
439
+ references2.strip() if references2.strip() else "์ฐธ๊ณ  ์ž๋ฃŒ ์—†์Œ",
440
+ references3.strip() if references3.strip() else "์ฐธ๊ณ  ์ž๋ฃŒ ์—†์Œ"
441
+ ]
442
+
443
+ # ์˜๋ฏธ ์žˆ๋Š” ์ฐธ๊ณ ๊ธ€๋งŒ ํ•„ํ„ฐ๋ง
444
+ references = [ref for ref in references if ref != "์ฐธ๊ณ  ์ž๋ฃŒ ์—†์Œ"]
445
+
446
+ if not references:
447
+ return "<p>์ฐธ๊ณ  ์ž๋ฃŒ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ฐธ๊ณ  ์ž๋ฃŒ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.</p>", 0
448
+
449
+ if not outline_input.strip():
450
+ return "<p>์•„์›ƒ๋ผ์ธ์ด ์—†์Šต๋‹ˆ๋‹ค. ์•„์›ƒ๋ผ์ธ์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.</p>", 0
451
+
452
+ # ์นดํ…Œ๊ณ ๋ฆฌ ๋ฐ ์Šคํƒ€์ผ ํ”„๋กฌํ”„ํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ
453
+ category_prompt = get_category_blog_prompt(category)
454
+ style_prompt = get_style_prompt(style)
455
+
456
+ # Phase 1: ์ดˆ๊ธฐ ๋ธ”๋กœ๊ทธ ๊ธ€ ์ƒ์„ฑ
457
+ blog_prompt = f"""
458
+ [์—ฌํ–‰ ๋ธ”๋กœ๊ทธ ๊ธ€ ์ž‘์„ฑ ์š”์ฒญ]
459
+ ์นดํ…Œ๊ณ ๋ฆฌ: {category}
460
+ ํฌ์ŠคํŒ… ์Šคํƒ€์ผ: {style}
461
+ ์•„์›ƒ๋ผ์ธ:
462
+ {outline_input}
463
+ ์ฐธ๊ณ ๊ธ€:
464
+ {references[0]}
465
+ {references[1] if len(references) > 1 else ""}
466
+ {references[2] if len(references) > 2 else ""}
467
+ {category_prompt}
468
+ {style_prompt}
469
+ [์†Œ์ œ๋ชฉ ์ž‘์„ฑ ๊ฐ€์ด๋“œ]
470
+ 1. ๋ณธ๋ก ์˜ ๊ฐ ๋ถ€๋ถ„๋งˆ๋‹ค ๋ช…ํ™•ํ•œ ์†Œ์ œ๋ชฉ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
471
+ 2. ์†Œ์ œ๋ชฉ์€ 10~20์ž ๋‚ด์™ธ๋กœ ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์„ธ์š”.
472
+ 3. ์†Œ์ œ๋ชฉ์€ ๋…๋ฆฝ๋œ ์ค„์— ์œ„์น˜ํ•˜๊ณ  ์•ž๋’ค์— ๋นˆ ์ค„์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
473
+ 4. ์†Œ์ œ๋ชฉ ์˜ˆ์‹œ: '์ œ์ฃผ๋„์˜ ์ˆจ์€ ๋ช…์†Œ', '๊ตํ†ต ๋ฐ ์ด๋™ ๊ฐ€์ด๋“œ', '๋ง›์ง‘ ํƒ๋ฐฉ ์ฝ”์Šค'
474
+ [์ค‘์š” ์ž‘์„ฑ ๊ทœ์น™]
475
+ 1. ๋ฐ˜๋“œ์‹œ ์œ„์˜ ์•„์›ƒ๋ผ์ธ ์ˆœ์„œ์™€ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ์ž‘์„ฑํ•˜๋ผ.
476
+ 2. ๊ฐ ์„น์…˜์€ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์„น์…˜ ์ œ๋ชฉ์„ ํฌํ•จํ•˜๋ผ.
477
+ 3. ๋„์ž…๋ถ€๋Š” ์—ฌํ–‰์ž์˜ ๊ด€์‹ฌ์„ ๋Œ๊ณ  ์—ฌํ–‰์ง€๋‚˜ ์ฝ”์Šค๋ฅผ ๋งค๋ ฅ์ ์œผ๋กœ ์†Œ๊ฐœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋ผ.
478
+ 4. ๋ณธ๋ก  ๊ฐ ๋ถ€๋ถ„์€ ์—ฌํ–‰์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ธก๋ฉด(๊ตํ†ต, ๋ณผ๊ฑฐ๋ฆฌ, ์Œ์‹, ์ˆ™๋ฐ• ๋“ฑ)์„ ๋‹ค๋ฃจ๋ฉฐ, ๊ตฌ์ฒด์ ์ธ ์ •๋ณด์™€ ์˜ˆ์‹œ๋ฅผ ํฌํ•จํ•˜๋ผ.
479
+ 5. ๊ฒฐ๋ก ์€ ํ•ต์‹ฌ ๋‚ด์šฉ์„ ์š”์•ฝํ•˜๊ณ  ์ตœ์ข… ์ถ”์ฒœ์ด๋‚˜ ํ†ต์ฐฐ์„ ์ œ๊ณตํ•˜๋ผ.
480
+ 6. ์ „์ฒด ๊ธ€์˜ ๊ธธ์ด๋Š” ์ตœ์†Œ {TARGET_CHAR_LENGTH}์ž๊ฐ€ ๋˜๋„๋ก ์ž‘์„ฑํ•˜๋ผ.
481
+ 7. ๊ฐ ์„น์…˜์€ ์ตœ์†Œ {MIN_SECTION_LENGTH}์ž ์ด์ƒ์˜ ์ถฉ๋ถ„ํ•œ ๋‚ด์šฉ์œผ๋กœ ์ž‘์„ฑํ•˜๋ผ.
482
+ 8. ๋งˆํฌ๋‹ค์šด ํ˜•์‹(#, *, -, 1., 2. ๋“ฑ)์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ  ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ž‘์„ฑํ•˜๋ผ.
483
+ 9. ์†Œ์ œ๋ชฉ๊ณผ ๊ฒฐ๋ก ์€ ๋ฒˆํ˜ธ ์—†์ด ์ผ๋ฐ˜ ๏ฟฝ๏ฟฝ์žฅ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•˜๋ผ.
484
+ 10. ๋ชฉ๋ก์€ ๋ถˆ๋ฆฟ์ด๋‚˜ ๋ฒˆํ˜ธ ๋Œ€์‹  ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ฌธ์žฅ์œผ๋กœ ์„œ์ˆ ํ•˜๋ผ.
485
+ 11. "์ฐธ๊ณ ๊ธ€", "์ฐธ๊ณ ๊ธ€์— ๋”ฐ๋ฅด๋ฉด" ๋“ฑ์˜ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ.
486
+ 12. "์—ฌ๋Ÿฌ๋ถ„", "๋…์ž ์—ฌ๋Ÿฌ๋ถ„" ๋“ฑ์˜ ์ง์ ‘์ ์ธ ํ˜ธ์นญ์„ ์ง€์–‘ํ•˜๋ผ.
487
+ 13. ๊ณผ์žฅ๋œ ํ‘œํ˜„์ด๋‚˜ ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต์„ ํ”ผํ•˜๋ผ.
488
+ 14. ๊ฐ ์„น์…˜ ์‚ฌ์ด์— ์ž์—ฐ์Šค๋Ÿฌ์šด ์—ฐ๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋ผ.
489
+ 15. ๊ธ€์˜ ์ฒ˜์Œ์— ์ „์ฒด ๊ธ€์˜ ๋งค๋ ฅ์ ์ธ ์ œ๋ชฉ์„ ๋ฐ˜๋“œ์‹œ ์ถ”๊ฐ€ํ•˜๋ผ.
490
+ 16. ๋ฐ˜๋“œ์‹œ ๊ตฌ์ฒด์ ์ธ ์—ฌํ–‰ ์ •๋ณด(์œ„์น˜, ๊ตํ†ต, ์‹œ๊ฐ„, ๋น„์šฉ, ์˜ˆ์•ฝ๋ฐฉ๋ฒ•, ํŒ ๋“ฑ)๋ฅผ ํฌํ•จํ•˜๋ผ.
491
+ """
492
+
493
+ # Gemini API ํ˜ธ์ถœ (ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ๋กœ ์ „์ฒด ๊ธ€ ์ƒ์„ฑ)
494
+ logging.info("์ „์ฒด ๋ธ”๋กœ๊ทธ ๊ธ€ ์ƒ์„ฑ ์‹œ์ž‘")
495
+ blog_content = call_gemini_api(blog_prompt, temperature=0.7)
496
+ logging.info(f"์ƒ์„ฑ๋œ ์›๋ณธ ๊ธ€ ๊ธธ์ด: {len(blog_content)}")
497
+
498
+ # ํ›„์ฒ˜๋ฆฌ
499
+ processed_content = post_process_blog(blog_content, style)
500
+
501
+ # HTML ๋ณ€ํ™˜ํ•˜์—ฌ ๊ธ€์ž ์ˆ˜ ์ฒดํฌ
502
+ temp_html = format_blog_post(processed_content)
503
+ soup = BeautifulSoup(temp_html, 'html.parser')
504
+ char_count = len(soup.get_text())
505
+ logging.info(f"์ดˆ๊ธฐ ๋ธ”๋กœ๊ทธ ๊ธ€ ๊ธ€์ž ์ˆ˜: {char_count}")
506
+
507
+ # Phase 2: ๊ธ€์ž ์ˆ˜๊ฐ€ ๋ชฉํ‘œ์— ๋ฏธ๋‹ฌํ•˜๋ฉด ํ‡ด๊ณ  ๋ฐ ํ™•์žฅ
508
+ if char_count < TARGET_CHAR_LENGTH * 0.8: # ๋ชฉํ‘œ์˜ 80% ๋ฏธ๋งŒ์ด๋ฉด ํ™•์žฅ
509
+ logging.info(f"๊ธ€์ž ์ˆ˜ ๋ถ€์กฑ ({char_count} < {TARGET_CHAR_LENGTH * 0.8}), ํ™•์žฅ ์‹œ๋„")
510
+
511
+ # ๊ฐ€์žฅ ๊ธด ์ฐธ๊ณ ๊ธ€ ์„ ํƒ
512
+ longest_ref = max(references, key=len)
513
+
514
+ expansion_prompt = f"""
515
+ [์—ฌํ–‰ ๋ธ”๋กœ๊ทธ ๊ธ€ ํ™•์žฅ ์š”์ฒญ]
516
+ ์นดํ…Œ๊ณ ๋ฆฌ: {category}
517
+ ํฌ์ŠคํŒ… ์Šคํƒ€์ผ: {style}
518
+ ์›๋ณธ ๊ธ€:
519
+ {processed_content}
520
+ ์ฐธ๊ณ ๊ธ€:
521
+ {longest_ref}
522
+ ๋ฌธ์ œ์ :
523
+ ์ด ๊ธ€์€ ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜์ธ {TARGET_CHAR_LENGTH}์ž์— ๋ฏธ์น˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ธ€์ž์ˆ˜๋Š” ์•ฝ {char_count}์ž์ž…๋‹ˆ๋‹ค.
524
+ ๋‚ด์šฉ์ด ๋ถ€์‹คํ•˜์—ฌ ํ™•์žฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
525
+ {style_prompt}
526
+ [ํ™•์žฅ ์š”๊ตฌ์‚ฌํ•ญ]
527
+ 1. ์›๋ณธ ๊ธ€์˜ ๊ตฌ์กฐ์™€ ์•„์›ƒ๋ผ์ธ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ฐ ์„น์…˜์˜ ๋‚ด์šฉ์„ ๋Œ€ํญ ํ™•์žฅํ•˜๋ผ.
528
+ 2. ๊ฐ ์„น์…˜์— ๋” ๊ตฌ์ฒด์ ์ธ ์ •๋ณด, ์˜ˆ์‹œ, ์‚ฌ๋ก€, ํ†ต๊ณ„ ๋“ฑ์„ ์ถ”๊ฐ€ํ•˜๋ผ.
529
+ - ๊ตํ†ต ์ •๋ณด, ์œ„์น˜ ์ •๋ณด, ๋น„์šฉ ์ •๋ณด, ์˜์—…์‹œ๊ฐ„, ์˜ˆ์•ฝ ๋ฐฉ๋ฒ• ๋“ฑ ์‹ค์šฉ์  ์ •๋ณด ์ถ”๊ฐ€
530
+ - ๊ณ„์ ˆ๋ณ„/์‹œ๊ฐ„๋ณ„ ํŠน์ง•, ๊ด€๊ด‘๊ฐ ์ˆ˜, ์†Œ์š” ์‹œ๊ฐ„ ๋“ฑ ๊ตฌ์ฒด์  ์ •๋ณด ์ถ”๊ฐ€
531
+ - ์ฃผ๋ณ€ ๊ด€๊ด‘์ง€, ์—ฐ๊ณ„ ๊ฐ€๋Šฅํ•œ ์žฅ์†Œ ๋“ฑ ์ถ”๊ฐ€ ์ •๋ณด ์ œ๊ณต
532
+ 3. ์ „์ฒด ๊ธ€์ž ์ˆ˜๋ฅผ ์ตœ์†Œ {TARGET_CHAR_LENGTH}์ž ์ด์ƒ ๋‹ฌ์„ฑํ•˜๋ผ.
533
+ 4. ์Šคํƒ€์ผ๊ณผ ์–ด์กฐ๋Š” ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ผ.
534
+ 5. ๋งˆํฌ๋‹ค์šด ํ˜•์‹(#, *, -, 1., 2. ๋“ฑ)์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ  ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ž‘์„ฑํ•˜๋ผ.
535
+ 6. ์†Œ์ œ๋ชฉ๊ณผ ๊ฒฐ๋ก ์€ ๋ฒˆํ˜ธ ์—†์ด ์ผ๋ฐ˜ ๋ฌธ์žฅ ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•˜๋ผ.
536
+ 7. ๋ชฉ๋ก์€ ๋ถˆ๋ฆฟ์ด๋‚˜ ๋ฒˆํ˜ธ ๋Œ€์‹  ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ฌธ์žฅ์œผ๋กœ ์„œ์ˆ ํ•˜๋ผ.
537
+ 8. "์ฐธ๊ณ ๊ธ€" ๊ด€๋ จ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ.
538
+ 9. ๋ถ€์ž์—ฐ์Šค๋Ÿฌ์šด ๋ฐ˜๋ณต์ด๋‚˜ ๊ณผ์žฅ๋œ ํ‘œํ˜„์„ ํ”ผํ•˜๋ผ.
539
+ """
540
+
541
+ # ํ™•์žฅ ์‹œ๋„
542
+ expanded_content = call_gemini_api(expansion_prompt, temperature=0.75)
543
+ processed_content = post_process_blog(expanded_content, style)
544
+
545
+ # ๋‹ค์‹œ ๊ธ€์ž ์ˆ˜ ์ฒดํฌ
546
+ temp_html = format_blog_post(processed_content)
547
+ soup = BeautifulSoup(temp_html, 'html.parser')
548
+ char_count = len(soup.get_text())
549
+ logging.info(f"ํ™•์žฅ ํ›„ ๋ธ”๋กœ๊ทธ ๊ธ€ ๊ธ€์ž ์ˆ˜: {char_count}")
550
+
551
+ # Phase 3: ์—ฌ์ „ํžˆ ๋ถ€์กฑํ•˜๋ฉด ์ถ”๊ฐ€ ํ™•์žฅ ์‹œ๋„
552
+ if char_count < TARGET_CHAR_LENGTH * 0.9: # ๋ชฉํ‘œ์˜ 90% ๋ฏธ๋งŒ์ด๋ฉด ์ถ”๊ฐ€ ํ™•์žฅ
553
+ logging.info(f"์—ฌ์ „ํžˆ ๊ธ€์ž ์ˆ˜ ๋ถ€์กฑ ({char_count} < {TARGET_CHAR_LENGTH * 0.9}), ์ถ”๊ฐ€ ํ™•์žฅ ์‹œ๋„")
554
+
555
+ additional_expansion_prompt = f"""
556
+ [์—ฌํ–‰ ๋ธ”๋กœ๊ทธ ๊ธ€ ์ถ”๊ฐ€ ํ™•์žฅ ์š”์ฒญ]
557
+ ์นดํ…Œ๊ณ ๋ฆฌ: {category}
558
+ ํฌ์ŠคํŒ… ์Šคํƒ€์ผ: {style}
559
+ ์›๋ณธ ๊ธ€:
560
+ {processed_content}
561
+ ๋ฌธ์ œ์ :
562
+ ์ด ๊ธ€์€ ์—ฌ์ „ํžˆ ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜์ธ {TARGET_CHAR_LENGTH}์ž์— ๋ฏธ์น˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ธ€์ž์ˆ˜๋Š” ์•ฝ {char_count}์ž์ž…๋‹ˆ๋‹ค.
563
+ [์ถ”๊ฐ€ ํ™•์žฅ ์š”๊ตฌ์‚ฌํ•ญ]
564
+ 1. ๋ณธ๋ก  ๋ถ€๋ถ„์„ ์ค‘์‹ฌ์œผ๋กœ ์„ธ๋ถ€ ๋‚ด์šฉ์„ ํฌ๊ฒŒ ํ™•์žฅํ•˜๋ผ.
565
+ 2. ๋‹ค์Œ ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ๋” ๊นŠ์€ ์„ค๋ช…๊ณผ ์‹ค์šฉ์ ์ธ ์ ์šฉ ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€ํ•˜๋ผ:
566
+ - ์—ฌํ–‰์ง€ ํŠน์œ ์˜ ๋ฌธํ™”๋‚˜ ์—ญ์‚ฌ์  ๋ฐฐ๊ฒฝ
567
+ - ํ˜„์ง€์ธ๋งŒ ์•„๋Š” ์ˆจ์€ ๋ช…์†Œ๋‚˜ ํŒ
568
+ - ์—ฌํ–‰์ง€ ๋ฐฉ๋ฌธ ์‹œ ์ฃผ์˜์‚ฌํ•ญ์ด๋‚˜ ์—ํ‹ฐ์ผ“
569
+ - ์‹œ๊ฐ„๋Œ€๋ณ„/๋‚ ์”จ๋ณ„ ๋ฐฉ๋ฌธ ํŒ
570
+ - ๊ตฌ์ฒด์ ์ธ ๊ตํ†ตํŽธ, ์†Œ์š”์‹œ๊ฐ„, ๋น„์šฉ ์ •๋ณด
571
+ 3. ์—ฌํ–‰์ž์—๊ฒŒ ์œ ์šฉํ•œ ํ•ต์‹ฌ ์ •๋ณด์™€ ์ธ์‚ฌ์ดํŠธ๋ฅผ ๋” ํ’๋ถ€ํ•˜๊ฒŒ ์ œ๊ณตํ•˜๋ผ.
572
+ 4. ์ „์ฒด ๊ธ€์ž ์ˆ˜๋ฅผ ์ตœ์†Œ {TARGET_CHAR_LENGTH}์ž ์ด์ƒ์œผ๋กœ ํ™•์žฅํ•˜๋ผ.
573
+ 5. ์Šคํƒ€์ผ๊ณผ ์–ด์กฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ผ.
574
+ 6. ๋ฐ˜๋ณต๋˜๋Š” ๋‚ด์šฉ์ด๋‚˜ ์ค‘๋ณต์€ ํ”ผํ•˜๋ผ.
575
+ """
576
+
577
+ # ์ถ”๊ฐ€ ํ™•์žฅ ์‹œ๋„
578
+ further_expanded_content = call_gemini_api(additional_expansion_prompt, temperature=0.8)
579
+ processed_content = post_process_blog(further_expanded_content, style)
580
+
581
+ # ์ตœ์ข… HTML ๋ณ€ํ™˜
582
+ final_html = format_blog_post(processed_content)
583
+
584
+ # ์ตœ์ข… ๊ธ€์ž ์ˆ˜ ๊ณ„์‚ฐ
585
+ soup = BeautifulSoup(final_html, 'html.parser')
586
+ final_char_count = len(soup.get_text())
587
+ logging.info(f"์ตœ์ข… ๋ธ”๋กœ๊ทธ ๊ธ€ ๊ธ€์ž ์ˆ˜: {final_char_count}")
588
+
589
+ return final_html, final_char_count
590
+
591
+ except Exception as e:
592
+ logging.error(f"๋ธ”๋กœ๊ทธ ๊ธ€ ์ƒ์„ฑ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}")
593
+ return f"<p>๋ธ”๋กœ๊ทธ ๊ธ€ ์ƒ์„ฑ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}</p>", 0
594
+
595
+ def post_process_blog(blog_content, style="์นœ๊ทผํ•œ"):
596
+ """๋ธ”๋กœ๊ทธ ์ปจํ…์ธ  ํ›„์ฒ˜๋ฆฌ ํ•จ์ˆ˜"""
597
+ try:
598
+ # ๋ฒˆํ˜ธ ๋ชฉ๋ก, ๋ถˆ๋ฆฟ, ํ—ค๋”ฉ ๋“ฑ ์ œ๊ฑฐ
599
+ blog_content = re.sub(r'^\d+\.\s+', '', blog_content, flags=re.MULTILINE)
600
+ blog_content = re.sub(r'^[\*\-\โ€ข]\s+', '', blog_content, flags=re.MULTILINE)
601
+ blog_content = re.sub(r'^#+\s+', '', blog_content, flags=re.MULTILINE)
602
+
603
+ # ์Šคํƒ€์ผ์— ๋”ฐ๋ฅธ ์–ดํˆฌ ์กฐ์ •
604
+ if style == "์นœ๊ทผํ•œ":
605
+ blog_content = re.sub(r'([๊ฐ€-ํžฃ]+)๊ณ ์š”', r'\1๊ตฌ์š”', blog_content)
606
+ blog_content = re.sub(r'๋‹ต๋‹ˆ๋‹ค', '์–ด์š”', blog_content)
607
+ blog_content = re.sub(r'์˜€๋‹ต๋‹ˆ๋‹ค', '์˜€์–ด์š”', blog_content)
608
+ blog_content = re.sub(r'ํ–ˆ๋‹ต๋‹ˆ๋‹ค', 'ํ–ˆ์–ด์š”', blog_content)
609
+ blog_content = re.sub(r'์Šต๋‹ˆ๋‹ค', '์š”', blog_content)
610
+ blog_content = re.sub(r'ํ•ฉ๋‹ˆ๋‹ค', 'ํ•ด์š”', blog_content)
611
+ blog_content = re.sub(r'๋ฉ๋‹ˆ๋‹ค', '๋ผ์š”', blog_content)
612
+ blog_content = re.sub(r'์ž…๋‹ˆ๋‹ค', '์ด์—์š”', blog_content)
613
+
614
+ # ๊ณผ์žฅ๋œ ํ‘œํ˜„ ์ •๋ฆฌ
615
+ exaggerated_expressions = [
616
+ (r'ํ•„์ˆ˜์ ์ธ', r'์ค‘์š”ํ•œ'),
617
+ (r'ํ˜๋ช…์ ์ธ', r'์ค‘์š”ํ•œ'),
618
+ (r'๋†€๋ผ์šด', r'์ฃผ๋ชฉํ•  ๋งŒํ•œ'),
619
+ (r'๊ธฐ์ ์˜', r'ํšจ๊ณผ์ ์ธ'),
620
+ (r'์ตœ๊ณ ์˜', r'์ข‹์€'),
621
+ (r'์„ธ๊ณ„์ ์ธ', r'์œ ๋ช…ํ•œ'),
622
+ (r'์™„๋ฒฝํ•œ', r'์šฐ์ˆ˜ํ•œ'),
623
+ (r'๊ทน์ ์ธ', r'์ƒ๋‹นํ•œ'),
624
+ (r'๋ฌดํ•œํ•œ', r'๋งŽ์€'),
625
+ (r'์ ˆ๋Œ€์ ์ธ', r'์ƒ๋‹นํ•œ'),
626
+ (r'ํ˜์‹ ์ ์ธ', r'์ƒˆ๋กœ์šด'),
627
+ (r'ํ™˜์ƒ์ ์ธ', r'์ข‹์€'),
628
+ (r'๊ทผ๋ณธ์ ์ธ', r'๊ธฐ๋ณธ์ ์ธ'),
629
+ (r'ํš๊ธฐ์ ์ธ', r'์ค‘์š”ํ•œ'),
630
+ (r'์ „๋ก€์—†๋Š”', r'ํŠน๋ณ„ํ•œ'),
631
+ (r'์••๋„์ ์ธ', r'์ฃผ๋ชฉํ•  ๋งŒํ•œ'),
632
+ (r'ํ™ฉํ™€ํ•œ', r'์ข‹์€'),
633
+ (r'์ฒœ์ƒ์˜', r'์šฐ์ˆ˜ํ•œ'),
634
+ (r'๊ธฐ๊ฐ€ ๋ง‰ํžŒ', r'ํšจ๊ณผ์ ์ธ'),
635
+ (r'๋ํŒ์™•', r'์ตœ์ƒ์œ„'),
636
+ (r'๊ทธ ์ž์ฒด', r''),
637
+ (r'์ด .{1,10} ๊ทธ ์ž์ฒด์˜€์–ด์š”', r'์ด \1์˜€์–ด์š”'),
638
+ (r'๊ฐ€ .{1,10} ๊ทธ ์ž์ฒด์˜€์–ด์š”', r'๊ฐ€ \1์˜€์–ด์š”'),
639
+ (r'์••๋„์ ์ธ', r'์ค‘์š”ํ•œ'),
640
+ (r'์ฒœ๊ตญ', r'์ข‹์€ ๊ณณ'),
641
+ (r'ํ™ฉํ™€ํ–ˆ์–ด์š”', r'์ข‹์•˜์–ด์š”'),
642
+ (r'ํ™˜์ƒ์˜', r'์ข‹์€'),
643
+ (r'์ตœ์ ์˜', r'์ข‹์€'),
644
+ (r'์™„๋ฒฝํ•œ', r'์ข‹์€'),
645
+ (r'๊ผญ ๊ฐ€๋ด์•ผ ํ• ', r'์ถ”์ฒœํ•˜๋Š”'),
646
+ (r'๊ผญ ๋จน์–ด๋ด์•ผ ํ• ', r'์ถ”์ฒœํ•˜๋Š”'),
647
+ (r'๊ผญ ํ•ด๋ด์•ผ ํ• ', r'์ถ”์ฒœํ•˜๋Š”')
648
+ ]
649
+
650
+ for pattern, replacement in exaggerated_expressions:
651
+ blog_content = re.sub(pattern, replacement, blog_content, flags=re.IGNORECASE)
652
+
653
+ blog_content = re.sub(r'์ฐธ๊ณ ๊ธ€์— ๋”ฐ๋ฅด๋ฉด', r'์•Œ๋ ค์ง„ ๋ฐ”๋กœ๋Š”', blog_content)
654
+ blog_content = re.sub(r'์ฐธ๊ณ ๊ธ€', r'๊ด€๋ จ ์ •๋ณด', blog_content)
655
+
656
+ # ์—ฌํ–‰ ๊ด€๋ จ ํ‘œํ˜„ ์ •๋ฆฌ
657
+ travel_specific_adjustments = [
658
+ (r'๋ฐฉ๋ฌธํ•ด๋ณด์„ธ์š”', r'๋ฐฉ๋ฌธํ•ด ๋ณด์„ธ์š”'),
659
+ (r'๊ฒฝํ—˜ํ•ด๋ณด์„ธ์š”', r'๊ฒฝํ—˜ํ•ด ๋ณด์„ธ์š”'),
660
+ (r'๋จน์–ด๋ณด์„ธ์š”', r'๋จน์–ด ๋ณด์„ธ์š”'),
661
+ (r'ํƒ€๋ณด์„ธ์š”', r'ํƒ€ ๋ณด์„ธ์š”'),
662
+ (r'ํ•ด๋ณด์„ธ์š”', r'ํ•ด ๋ณด์„ธ์š”'),
663
+ (r'์—ฌํ–‰๊ฐ๋“ค์—๊ฒŒ (.*?)์„ ๊ฐ•๋ ฅ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค', r'์—ฌํ–‰๊ฐ๋“ค์—๊ฒŒ \1์„ ์ถ”์ฒœํ•ด์š”'),
664
+ (r'์—ฌํ–‰๊ฐ๋“ค์—๊ฒŒ (.*?)๋ฅผ ๊ฐ•๋ ฅ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค', r'์—ฌํ–‰๊ฐ๋“ค์—๊ฒŒ \1๋ฅผ ์ถ”์ฒœํ•ด์š”'),
665
+ (r'์—ฌํ–‰๊ฐ๋“ค์—๊ฒŒ (.*?)์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค', r'์—ฌํ–‰๊ฐ๋“ค์—๊ฒŒ \1์„ ์ถ”์ฒœํ•ด์š”'),
666
+ (r'์—ฌํ–‰๊ฐ๋“ค์—๊ฒŒ (.*?)๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค', r'์—ฌํ–‰๊ฐ๋“ค์—๊ฒŒ \1๋ฅผ ์ถ”์ฒœํ•ด์š”'),
667
+ (r'์—ฌํ–‰๊ฐ์—๊ฒŒ (.*?)์„ ๊ฐ•๋ ฅ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค', r'์—ฌํ–‰๊ฐ์—๊ฒŒ \1์„ ์ถ”์ฒœํ•ด์š”'),
668
+ (r'์—ฌํ–‰๊ฐ์—๊ฒŒ (.*?)๋ฅผ ๊ฐ•๋ ฅ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค', r'์—ฌํ–‰๊ฐ์—๊ฒŒ \1๋ฅผ ์ถ”์ฒœํ•ด์š”')
669
+ ]
670
+
671
+ for pattern, replacement in travel_specific_adjustments:
672
+ blog_content = re.sub(pattern, replacement, blog_content)
673
+
674
+ return blog_content
675
+ except Exception as e:
676
+ logging.error(f"๋ธ”๋กœ๊ทธ ๊ธ€ ํ›„์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}")
677
+ return blog_content
678
+
679
+ def format_blog_post(blog_post, query="", with_title=False):
680
+ """๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ ํฌ๋งทํŒ… ํ•จ์ˆ˜ - ์†Œ์ œ๋ชฉ ๊ฐ•ํ™” ๋ฒ„์ „"""
681
+ blog_post = re.sub(r'^#+\s+', '', blog_post, flags=re.MULTILINE)
682
+ blog_post = re.sub(r'^\d+\.\s+', '', blog_post, flags=re.MULTILINE)
683
+ blog_post = re.sub(r'^[\*\-]\s+', '', blog_post, flags=re.MULTILINE)
684
+
685
+ # ์ฒซ ์ค„(์›๋ณธ ์ œ๋ชฉ)๊ณผ ๋น„์Šทํ•œ ํŒจํ„ด์ด ์žˆ๋‹ค๋ฉด ์ œ๊ฑฐ
686
+ lines = blog_post.split('\n')
687
+ if lines and len(lines) > 0:
688
+ first_line = lines[0].strip()
689
+ # ์ฒซ ์ค„์ด ์ œ๋ชฉ์ธ ๊ฒฝ์šฐ, ๋น„์Šทํ•œ ๋‚ด์šฉ์˜ ๋ผ์ธ์„ ๋ชจ๋‘ ์ œ๊ฑฐ
690
+ if first_line and len(first_line) > 5:
691
+ # ์ฒซ ์ค„๊ณผ ์œ ์‚ฌํ•œ ๋‚ด์šฉ์„ ๊ฐ€์ง„ ๋ผ์ธ ์ฐพ์•„ ์ œ๊ฑฐ
692
+ filtered_lines = []
693
+ for line in lines:
694
+ # ์ฒซ ์ค„๊ณผ ์œ ์‚ฌํ•˜๋ฉด ์ œ๊ฑฐ
695
+ if line.strip() and (first_line in line or line in first_line):
696
+ continue
697
+ filtered_lines.append(line)
698
+ lines = filtered_lines
699
+
700
+ # ๋„์ž…๋ถ€, ๊ฒฐ๋ก  ์†Œ์ œ๋ชฉ ํŒจํ„ด
701
+ intro_pattern = r'(?i)๋„์ž…๋ถ€\s*[:]?\s*(.*?)$'
702
+ conclusion_pattern = r'(?i)๊ฒฐ๋ก \s*[:]?\s*(.*?)$'
703
+
704
+ # ๋„์ž…๋ถ€, ๊ฒฐ๋ก  ์†Œ์ œ๋ชฉ ์ œ๊ฑฐ
705
+ filtered_lines = []
706
+ for line in lines:
707
+ if re.match(intro_pattern, line) or re.match(conclusion_pattern, line):
708
+ continue
709
+ filtered_lines.append(line)
710
+ lines = filtered_lines
711
+
712
+ # ๋ณธ๋ก  ์†Œ์ œ๋ชฉ ํŒจํ„ด ๊ฐ•ํ™”
713
+ section_patterns = [
714
+ r'^๋ณธ๋ก \d+\s*[:]?\s*(.*?)$', # ๋ณธ๋ก 1: ๋‚ด์šฉ ํŒจํ„ด
715
+ r'^.{5,50}์˜ [๊ฐ€-ํžฃ\s]+$', # ~์˜ ~ ํŒจํ„ด
716
+ r'^[๊ฐ€-ํžฃ\s]{5,30}(์ด๋ž€|์ด๋ž€\?|์ด๋ž€\s๋ฌด์—‡์ธ๊ฐ€|์ด๋ž€\s๋ฌด์—‡์ผ๊นŒ)[\?\s]*$', # ~์ด๋ž€? ํŒจํ„ด
717
+ r'^[๊ฐ€-ํžฃ\s]{5,50}\s[-โ€“]\s.{5,30}$', # ๊ฐ•์กฐ ํ‘œํ˜„ ํŒจํ„ด (์˜ˆ: ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ• - ์‹ค์ฒœํ•˜๊ธฐ)
718
+ r'^[๊ฐ€-ํžฃA-Za-z\s]{10,50}[\.!\?]$', # ๊ธด ๋ฌธ์žฅ์œผ๋กœ ๋œ ์†Œ์ œ๋ชฉ ํŒจํ„ด
719
+ ]
720
+
721
+ formatted_lines = []
722
+ in_paragraph = False
723
+
724
+ # ๋ณธ๋ก  ์„น์…˜ ๋ฒˆํ˜ธ ์ถ”์ 
725
+ section_number = 1
726
+
727
+ for i, line in enumerate(lines):
728
+ line = line.strip()
729
+ if not line:
730
+ if in_paragraph:
731
+ formatted_lines.append("</p>")
732
+ in_paragraph = False
733
+ formatted_lines.append("<br>")
734
+ continue
735
+
736
+ # ๋‹ค์Œ ์ค„๊ณผ ์ด์ „ ์ค„์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ
737
+ prev_empty = i == 0 or not lines[i-1].strip()
738
+ next_empty = i == len(lines) - 1 or not lines[i+1].strip()
739
+
740
+ # ์†Œ์ œ๋ชฉ์ธ์ง€ ์ฒดํฌ
741
+ is_subtitle = False
742
+ clean_subtitle = line
743
+
744
+ # ํŒจํ„ด ๋งค์นญ์œผ๋กœ ์†Œ์ œ๋ชฉ ํ™•์ธ
745
+ for pattern in section_patterns:
746
+ if re.match(pattern, line):
747
+ is_subtitle = True
748
+ # ๋ณธ๋ก X: ํŒจํ„ด์ธ ๊ฒฝ์šฐ ์ •๋ฆฌ
749
+ if "๋ณธ๋ก " in line:
750
+ clean_subtitle = re.sub(r'^๋ณธ๋ก \d+\s*[:]?\s*', '', line)
751
+ break
752
+
753
+ # ํŒจํ„ด์— ๋งค์นญ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ๋‹ค์Œ ๊ทœ์น™์œผ๋กœ ์†Œ์ œ๋ชฉ์œผ๋กœ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
754
+ if not is_subtitle:
755
+ # ์•ž๋’ค ์ค„์ด ๋น„์–ด์žˆ๊ณ , ๊ธธ์ด๊ฐ€ ์งง์€(5-50์ž) ๋ฌธ์žฅ์€ ์†Œ์ œ๋ชฉ์œผ๋กœ ์ฒ˜๋ฆฌ
756
+ if prev_empty and next_empty and 5 <= len(line) <= 50:
757
+ is_subtitle = True
758
+ # ์ด์ „์— ์žˆ๋˜ ์†Œ์ œ๋ชฉ๋“ค๊ณผ ๋น„์Šทํ•œ ๊ธธ์ด๋ฅผ ๊ฐ€์ง„ ๊ฒฝ์šฐ๋„ ์†Œ์ œ๋ชฉ์œผ๋กœ ๊ฐ„์ฃผ
759
+ elif section_number > 1 and prev_empty and 5 <= len(line) <= 50:
760
+ is_subtitle = True
761
+
762
+ if is_subtitle and clean_subtitle.strip():
763
+ if in_paragraph:
764
+ formatted_lines.append("</p>")
765
+ in_paragraph = False
766
+
767
+ # ์†Œ์ œ๋ชฉ์ด ์—†๊ฑฐ๋‚˜ ๋„ˆ๋ฌด ์งง์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์†Œ์ œ๋ชฉ ์‚ฌ์šฉ
768
+ if not clean_subtitle.strip() or len(clean_subtitle.strip()) < 2:
769
+ clean_subtitle = f"์ฃผ์š” ํฌ์ธํŠธ {section_number}"
770
+
771
+ # ์†Œ์ œ๋ชฉ ํ˜•์‹ ๊ฐ•ํ™” - ํ•ญ์ƒ ๋ณผ๋“œ์ฒ˜๋ฆฌ์™€ ์Šคํƒ€์ผ๋ง ์ ์šฉ
772
+ formatted_lines.append(
773
+ f'<h2 style="font-size: 1.4em; margin-top: 30px; margin-bottom: 15px; font-weight: bold; color: #333; border-bottom: 1px solid #eee; padding-bottom: 8px;">{html.escape(clean_subtitle)}</h2>'
774
+ )
775
+ section_number += 1
776
+ else:
777
+ # ์ผ๋ฐ˜ ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ
778
+ if not in_paragraph:
779
+ formatted_lines.append("<p>")
780
+ in_paragraph = True
781
+ content = html.escape(line)
782
+ bold_content = re.sub(r'\*\*(.*?)\*\*', r'<strong>\1</strong>', content)
783
+ formatted_lines.append(bold_content)
784
+
785
+ if in_paragraph:
786
+ formatted_lines.append("</p>")
787
+
788
+ return '\n'.join(formatted_lines)
789
+
790
+ def call_gemini_api(prompt, temperature=TEMPERATURE, top_p=TOP_P):
791
+ """Gemini API ํ˜ธ์ถœ ํ•จ์ˆ˜"""
792
+ try:
793
+ logging.info("Gemini API ํ˜ธ์ถœ ์‹œ์ž‘")
794
+ response = client.models.generate_content(
795
+ model="gemini-2.0-flash",
796
+ contents=[prompt],
797
+ config=types.GenerateContentConfig(
798
+ max_output_tokens=MAX_TOKENS,
799
+ temperature=temperature,
800
+ top_p=top_p
801
+ )
802
+ )
803
+ logging.info("Gemini API ํ˜ธ์ถœ ์™„๋ฃŒ")
804
+ return response.text.strip()
805
+ except Exception as e:
806
+ logging.error(f"Gemini API ํ˜ธ์ถœ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}")
807
+ return f"API ํ˜ธ์ถœ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}"
808
+
809
+ def get_style_prompt(style="์นœ๊ทผํ•œ"):
810
+ """๋ธ”๋กœ๊ทธ ๊ธ€์˜ ์Šคํƒ€์ผ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋ฐ˜ํ™˜"""
811
+ prompts = {
812
+ "์นœ๊ทผํ•œ": """
813
+ [์นœ๊ทผํ•œ ์—ฌํ–‰ ๋ธ”๋กœ๊ทธ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ]
814
+ 1. ํ†ค๊ณผ ์–ด์กฐ
815
+ - ๋Œ€ํ™”ํ•˜๋“ฏ ํŽธ์•ˆํ•˜๊ณ  ์นœ๊ทผํ•œ ๋งํˆฌ ์‚ฌ์šฉ
816
+ - ์—ฌํ–‰์ง€์— ๋Œ€ํ•œ ๊ด€์‹ฌ๊ณผ ํ˜ธ๊ธฐ์‹ฌ์„ ๋‹ด์€ ํ‘œํ˜„ ์‚ฌ์šฉ
817
+ - ์‹ค์ œ ์—ฌํ–‰์„ ๊ฒฝํ—˜ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ƒ์ƒํ•œ ๋ฌ˜์‚ฌ
818
+ 2. ๋ฌธ์žฅ ๋ฐ ์–ดํˆฌ
819
+ - ๋ฐ˜๋“œ์‹œ 'ํ•ด์š”์ฒด'๋กœ ์ž‘์„ฑ, ์ ˆ๋Œ€ '์Šต๋‹ˆ๋‹ค'์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง ๊ฒƒ
820
+ - '~์š”'๋กœ ๋๋‚˜๋„๋ก ์ž‘์„ฑ, '~๋‹ค'๋กœ ๋๋‚˜์ง€ ์•Š๊ฒŒ ํ•˜๋ผ
821
+ - ๊ตฌ์–ด์ฒด ํ‘œํ˜„ ์‚ฌ์šฉ (์˜ˆ: "~ํ–ˆ์–ด์š”", "~์ธ ๊ฒƒ ๊ฐ™์•„์š”")
822
+ - ์ ์ ˆํ•œ ๊ฐ์ • ํ‘œํ˜„๊ณผ ๊ณต๊ฐ๋Œ€ ํ˜•์„ฑ
823
+ 3. ์šฉ์–ด ๋ฐ ์„ค๋ช… ๋ฐฉ์‹
824
+ - ์—ฌํ–‰ ๊ด€๋ จ ์ „๋ฌธ ์šฉ์–ด๋Š” ์‰ฌ์šด ๋‹จ์–ด๋กœ ํ’€์–ด์„œ ์„ค๋ช…
825
+ - ๋น„์œ ๋‚˜ ์€์œ ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์žฅ์†Œ์™€ ๊ฒฝํ—˜ ๋ฌ˜์‚ฌ
826
+ - ์ˆ˜์‚ฌ์˜๋ฌธ๋ฌธ ํ™œ์šฉํ•˜์—ฌ ๋…์ž์™€ ์†Œํ†ตํ•˜๋Š” ๋А๋‚Œ ์ฃผ๊ธฐ (์˜ˆ: "์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์„ธ์š”?", "์ด๋Ÿฐ ๊ฒฝํ—˜ ์žˆ์œผ์‹ ๊ฐ€์š”?")
827
+ - ๊ตฌ์ฒด์  ์‚ฌ๋ก€์™€ ์‹ค์ œ ๊ฒฝํ—˜์— ๊ธฐ๋ฐ˜ํ•œ ํŒ ์ œ๊ณต
828
+ 4. ์ •๋ณด ์ „๋‹ฌ ๋ฐฉ์‹
829
+ - ๊ฐœ์ธ์ ์ธ ๊ด€์ ์— ๋…น์—ฌ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ •๋ณด ์ „๋‹ฌ
830
+ - ์‹ค์ œ ์—ฌํ–‰์ž์˜ ์‹œ์„ ์œผ๋กœ ์žฅ์†Œ์™€ ๊ฒฝํ—˜ ๋ฌ˜์‚ฌ
831
+ - ๋…์ž๊ฐ€ ์‹ค์ œ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์šฉ์  ์ •๋ณด ์ œ๊ณต (๊ตํ†ต, ๋น„์šฉ, ์‹œ๊ฐ„, ์ถ”์ฒœ ์ฝ”์Šค ๋“ฑ)
832
+ 5. ๋…์ž์™€์˜ ์ƒํ˜ธ์ž‘์šฉ
833
+ - ๋…์ž์˜ ์˜๊ฒฌ์„ ๋ฌผ์–ด๋ณด๋Š” ์งˆ๋ฌธ ํฌํ•จ
834
+ - ์‹ค์ œ ์—ฌํ–‰์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŒ์ด๋‚˜ ์กฐ์–ธ ์ œ๊ณต
835
+ ์ฃผ์˜์‚ฌํ•ญ: ์ž์—ฐ์Šค๋Ÿฌ์šด ๋Œ€ํ™”์ฒด๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์ •๋ณด์˜ ์งˆ๊ณผ ๋‚ด์šฉ์˜ ๊นŠ์ด๋ฅผ ์žƒ์ง€ ์•Š๋„๋ก ํ•œ๋‹ค
836
+ """,
837
+ "์ผ๋ฐ˜": """
838
+ [์ผ๋ฐ˜์ ์ธ ์—ฌํ–‰ ๋ธ”๋กœ๊ทธ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ]
839
+ 1. ํ†ค๊ณผ ์–ด์กฐ
840
+ - ์ค‘๋ฆฝ์ ์ด๊ณ  ๊ฐ๊ด€์ ์ธ ํ†ค ์œ ์ง€
841
+ - ์ ์ ˆํ•œ ์กด๋Œ“๋ง ์‚ฌ์šฉ (์˜ˆ: "~ํ•ฉ๋‹ˆ๋‹ค", "~์ž…๋‹ˆ๋‹ค")
842
+ - ์—ฌํ–‰ ์ •๋ณด ์ „๋‹ฌ ์ค‘์‹ฌ์˜ ๋ช…ํ™•ํ•œ ์–ดํˆฌ
843
+ 2. ๋‚ด์šฉ ๊ตฌ์กฐ ๋ฐ ์ „๊ฐœ
844
+ - ๋ช…ํ™•ํ•œ ์—ฌํ–‰์ง€ ์†Œ๊ฐœ๋กœ ์‹œ์ž‘
845
+ - ๋…ผ๋ฆฌ์ ์ธ ์ˆœ์„œ๋กœ ์ •๋ณด ์ „๊ฐœ (๊ตํ†ต โ†’ ์ˆ™๋ฐ• โ†’ ๊ด€๊ด‘์ง€ โ†’ ์Œ์‹ ๋“ฑ)
846
+ - ํ•ต์‹ฌ ํฌ์ธํŠธ๋ฅผ ๊ฐ•์กฐํ•˜๋Š” ์†Œ์ œ๋ชฉ ํ™œ์šฉ
847
+ - ์ ์ ˆํ•œ ๊ธธ์ด์˜ ๋‹จ๋ฝ์œผ๋กœ ๊ตฌ์„ฑ
848
+ 3. ์šฉ์–ด ๋ฐ ์„ค๋ช… ๋ฐฉ์‹
849
+ - ์ผ๋ฐ˜์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์šฉ์–ด ์„ ํƒ
850
+ - ํ•„์š”์‹œ ์ง€์—ญ ํŠน์œ ์˜ ์šฉ์–ด์— ๊ฐ„๋‹จํ•œ ์„ค๋ช… ์ถ”๊ฐ€
851
+ - ๊ฐ๊ด€์ ์ธ ์—ฌํ–‰ ์ •๋ณด ์ œ๊ณต์— ์ค‘์ 
852
+ - ๊ท ํ˜• ์žกํžŒ ์‹œ๊ฐ์—์„œ ์—ฌํ–‰์ง€์˜ ์žฅ๋‹จ์  ์ œ์‹œ
853
+ 4. ์ •๋ณด ์ „๋‹ฌ ๋ฐฉ์‹
854
+ - ์—ฌํ–‰์ง€์˜ ๊ธฐ๋ณธ ์ •๋ณด์™€ ํŠน์ง• ๋ช…ํ™•ํ•˜๊ฒŒ ์ œ๊ณต
855
+ - ๊ตฌ์ฒด์ ์ธ ์˜ˆ์‹œ์™€ ์ถ”์ฒœ ์ฝ”์Šค ํฌํ•จ
856
+ - ์ตœ์‹  ์—ฌํ–‰ ์ •๋ณด์™€ ๋™ํ–ฅ ์ฐธ๊ณ 
857
+ 5. ๋…์ž ์ƒํ˜ธ์ž‘์šฉ
858
+ - ์ ์ ˆํžˆ ๋…์ž์˜ ์ƒ๊ฐ์„ ๋ฌป๋Š” ์งˆ๋ฌธ ํฌํ•จ
859
+ - ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ํ‚ค์›Œ๋“œ ์ œ์‹œ
860
+ - ์‹ค์šฉ์ ์ธ ์—ฌํ–‰ ํŒ ์ œ๊ณต
861
+
862
+ ์ฃผ์˜์‚ฌํ•ญ: ๊ฐ๊ด€์  ์ •๋ณด ์ œ๊ณต์„ ์ค‘์‹ฌ์œผ๋กœ ํ•˜๋˜, ๋…์ž์˜ ์—ฌํ–‰ ๊ณ„ํš๊ณผ ์‹คํ–‰์„ ๋„์šธ ์ˆ˜ ์žˆ๋Š” ๋งฅ๋ฝ๊ณผ ์„ค๋ช…์„ ์ถฉ๋ถ„ํžˆ ์ œ๊ณตํ•œ๋‹ค
863
+ """,
864
+ "์ „๋ฌธ์ ์ธ": """
865
+ [์ „๋ฌธ์ ์ธ ์—ฌํ–‰ ๋ธ”๋กœ๊ทธ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ]
866
+ 1. ํ†ค๊ณผ ๊ตฌ์กฐ
867
+ - ๊ณต์‹์ ์ด๊ณ  ์ „๋ฌธ์ ์ธ ํ†ค ์‚ฌ์šฉ
868
+ - ๊ฐ๊ด€์ ์ด๊ณ  ๋ถ„์„์ ์ธ ์ ‘๊ทผ ์œ ์ง€
869
+ - ๋ช…ํ™•ํ•œ ์„œ๋ก (์—ฌํ–‰์ง€ ๊ฐœ์š”), ๋ณธ๋ก (์ƒ์„ธ ๋ถ„์„), ๊ฒฐ๋ก (์ข…ํ•ฉ ํ‰๊ฐ€) ๊ตฌ์กฐ
870
+ - ์ฒด๊ณ„์ ์ธ ์—ฌํ–‰ ์ •๋ณด ์ „๊ฐœ
871
+ - ์„ธ๋ถ€ ์„น์…˜์„ ์œ„ํ•œ ๋ช…ํ™•ํ•œ ์†Œ์ œ๋ชฉ ์‚ฌ์šฉ
872
+ 2. ๋‚ด์šฉ ๊ตฌ์„ฑ ๋ฐ ์ „๊ฐœ
873
+ - ์—ฌํ–‰์ง€์˜ ์—ญ์‚ฌ์  ๋ฐฐ๊ฒฝ, ๋ฌธํ™”์  ํŠน์ง•, ํ˜„์žฌ ๋™ํ–ฅ ๋“ฑ ์‹ฌ์ธต์  ์ •๋ณด ํฌํ•จ
874
+ - ๋…ผ๋ฆฌ์  ์—ฐ๊ฒฐ์„ ์œ„ํ•œ ์ „ํ™˜์–ด ํ™œ์šฉ
875
+ - ์—ฌํ–‰ ์šฉ์–ด ์ ์ ˆํžˆ ํ™œ์šฉ (ํ•„์š”์‹œ ๊ฐ„๋žตํ•œ ์„ค๋ช… ์ œ๊ณต)
876
+ - ์‹ฌ์ธต์ ์ธ ๋ถ„์„๊ณผ ๋น„ํŒ์  ํ‰๊ฐ€ ์ œ๊ณต
877
+ - ๋‹ค์–‘ํ•œ ๊ด€์ ์—์„œ ์—ฌํ–‰์ง€ ๋ถ„์„
878
+ 3. ๋ฐ์ดํ„ฐ ๋ฐ ๊ทผ๊ฑฐ ํ™œ์šฉ
879
+ - ํ†ต๊ณ„, ์‹œ์ฆŒ๋ณ„ ์ •๋ณด, ์‹ค์ œ ์‚ฌ๋ก€ ๋“ฑ ๊ฐ๊ด€์  ๋ฐ์ดํ„ฐ ํ™œ์šฉ
880
+ - ์—ฌํ–‰์ง€ ๋ถ„์„์„ ์œ„ํ•œ ์ฒด๊ณ„์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ ์ œ์‹œ
881
+ - ๊ฐ๊ด€์  ์ •๋ณด์™€ ์ „๋ฌธ๊ฐ€ ๊ด€์ ์˜ ๊ท ํ˜•
882
+ 4. ์ „๋ฌธ์  ์ •๋ณด ์ œ๊ณต
883
+ - ์ตœ์‹  ์—ฌํ–‰ ๋™ํ–ฅ ๋ฐ ๋ณ€ํ™” ๋ถ„์„
884
+ - ๋ฌธํ™”, ์—ญ์‚ฌ์  ๋งฅ๋ฝ์—์„œ์˜ ์—ฌํ–‰์ง€ ๋ถ„์„
885
+ - ์—ฌํ–‰ ๊ด€๋ จ ์Ÿ์ ๊ณผ ๊ณ ๋ ค์‚ฌํ•ญ ์†Œ๊ฐœ
886
+ - ์ฒด๊ณ„์ ์ธ ์—ฌํ–‰ ๊ณ„ํš ์ ‘๊ทผ๋ฒ• ์ œ์‹œ
887
+ ์ฃผ์˜์‚ฌํ•ญ: ์ „๋ฌธ์„ฑ๊ณผ ๊นŠ์ด๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์ดํ•ด ๊ฐ€๋Šฅํ•œ ์šฉ์–ด์™€ ์„ค๋ช…์„ ํ†ตํ•ด ์ ‘๊ทผ์„ฑ์„ ๋†’์ธ๋‹ค
888
+ """
889
+ }
890
+ return prompts.get(style, prompts["์นœ๊ทผํ•œ"])
891
+
892
+ def get_category_outline_prompt(category="์—ฌํ–‰ ๋‹จ์ผ"):
893
+ """์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์•„์›ƒ๋ผ์ธ ์ƒ์„ฑ ํ”„๋กฌํ”„ํŠธ"""
894
+ prompts = {
895
+ "์—ฌํ–‰ ๋‹จ์ผ": """
896
+ [์—ฌํ–‰ ๋‹จ์ผ์ง€์  ์†Œ์ฃผ์ œ(Outline) ์ƒ์„ฑ ๊ทœ์น™]
897
+ 1. ๋„ˆ๋Š” ์ตœ๊ณ ์˜ ์—ฌํ–‰ ๋ธ”๋กœ๊ทธ ์ž‘๊ฐ€์ด์ž ์—ฌํ–‰ ์ฝ˜ํ…์ธ  ๊ตฌ์„ฑ ์ „๋ฌธ๊ฐ€์ด๋‹ค.
898
+ 2. ์ฃผ์–ด์ง„ ์ฐธ๊ณ ๊ธ€์„ ๊นŠ์ด ๋ถ„์„ํ•˜์—ฌ ํ•ด๋‹น ์—ฌํ–‰์ง€์— ๋Œ€ํ•œ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ์ฝ˜ํ…์ธ  ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด๋ผ.
899
+ 3. ์—ฌํ–‰์ž์˜ ๊ด€์‹ฌ์„ ๋Œ๊ณ  ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ถฐ๋ผ.
900
+ 4. ์—ฌํ–‰์ง€์— ๋Œ€ํ•œ ํ†ต์ฐฐ๋ ฅ ์žˆ๋Š” ๋ถ„์„๊ณผ ์‹ค์šฉ์ ์ธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋ผ.
901
+ [์•„์›ƒ๋ผ์ธ ์ž‘์„ฑ ๊ทœ์น™]
902
+ 1. ๋ฐ˜๋“œ์‹œ ์ฐธ๊ณ ๊ธ€์„ ๊นŠ์ด ๋ถ„์„ํ•˜์—ฌ ์—ฌํ–‰์ง€์˜ ํ•ต์‹ฌ ํŠน์ง•๊ณผ ๊ฐ€์น˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•˜๋ผ.
903
+ 2. ์—ฌํ–‰์ž์˜ ๊ด€์‹ฌ์„ ๋Œ๊ธฐ ์œ„ํ•œ ๋งค๋ ฅ์ ์ธ ์†Œ๊ฐœ๋กœ ์‹œ์ž‘ํ•˜๋ผ.
904
+ 3. ์—ฌํ–‰์ง€์— ๋Œ€ํ•œ ์‹ฌ์ธต์  ์ดํ•ด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด๋ผ.
905
+ 4. ๊ฐ ์†Œ์ฃผ์ œ๋Š” 20์ž ์ด๋‚ด์˜ ๋ช…ํ™•ํ•˜๊ณ  ๋งค๋ ฅ์ ์ธ ์ œ๋ชฉ์œผ๋กœ ์ž‘์„ฑํ•˜๋ผ.
906
+ 5. ์†Œ์ฃผ์ œ๋“ค์€ ์ „์ฒด์ ์œผ๋กœ ์ผ๊ด€๋œ ํ๋ฆ„๊ณผ ์—ฐ๊ฒฐ์„ฑ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
907
+ 6. ์—ฌํ–‰์ž์—๊ฒŒ ์‹ค์งˆ์ ์ธ ๊ฐ€์น˜์™€ ํ†ต์ฐฐ์„ ์ œ๊ณตํ•˜๋Š” ์ •๋ณด ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์„ฑํ•˜๋ผ.
908
+ 7. ์ฐธ๊ณ ๊ธ€์˜ ๋‚ด์šฉ๊ณผ ํŠน์„ฑ์— ๋”ฐ๋ผ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์†Œ์ฃผ์ œ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๋ผ.
909
+
910
+ [์•„์›ƒ๋ผ์ธ ๊ตฌ์„ฑ]
911
+ ๋ฐ˜๋“œ์‹œ ๋‹ค์Œ ๊ตฌ์กฐ๋กœ ์†Œ์ฃผ์ œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋ผ:
912
+ - ๋„์ž…๋ถ€: [์—ฌํ–‰์ง€ ์†Œ๊ฐœ ๋ฐ ํŠน์ง•]
913
+ - ๋ณธ๋ก 1~5: [์ฐธ๊ณ ๊ธ€์—์„œ ํŒŒ์•…๋œ ์ฃผ์š” ๋‚ด์šฉ์— ๋”ฐ๋ผ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑ]
914
+ - ๊ฒฐ๋ก : [์—ฌํ–‰์ง€ ์ตœ์ข… ํ‰๊ฐ€ ๋ฐ ์ถ”์ฒœ]
915
+ """,
916
+ "์—ฌํ–‰ ์ฝ”์Šค": """
917
+ [์—ฌํ–‰ ์ฝ”์Šค ์†Œ์ฃผ์ œ(Outline) ์ƒ์„ฑ ๊ทœ์น™]
918
+ 1. ๋„ˆ๋Š” ์ตœ๊ณ ์˜ ์—ฌํ–‰ ๋ธ”๋กœ๊ทธ ์ž‘๊ฐ€์ด์ž ์—ฌํ–‰ ์ฝ”์Šค ๊ธฐํš ์ „๋ฌธ๊ฐ€์ด๋‹ค.
919
+ 2. ์ฃผ์–ด์ง„ ์ฐธ๊ณ ๊ธ€์„ ๊นŠ์ด ๋ถ„์„ํ•˜์—ฌ ์ตœ์ ์˜ ์—ฌํ–‰ ์ฝ”์Šค ๊ตฌ์„ฑ๊ณผ ์ฝ˜ํ…์ธ  ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด๋ผ.
920
+ 3. ์—ฌํ–‰์ž์˜ ์‹œ๊ฐ„๊ณผ ๊ฒฝํ—˜์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”์Šค ๊ตฌ์„ฑ์— ์ดˆ์ ์„ ๋งž์ถฐ๋ผ.
921
+ 4. ์‹ค์šฉ์ ์ด๊ณ  ํšจ์œจ์ ์ธ ์—ฌํ–‰ ๊ณ„ํš์„ ์ œ๊ณตํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜๋ผ.
922
+ [์•„์›ƒ๋ผ์ธ ์ž‘์„ฑ ๊ทœ์น™]
923
+ 1. ์ฐธ๊ณ ๊ธ€์„ ์ฒ ์ €ํžˆ ๋ถ„์„ํ•˜์—ฌ ์—ฌํ–‰ ์ฝ”์Šค์˜ ํ•ต์‹ฌ ์š”์†Œ์™€ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๋ผ.
924
+ 2. ์—ฌํ–‰ ์ฝ”์Šค์˜ ๋งค๋ ฅ๊ณผ ํŠน์ง•์„ ๊ฐ•์กฐํ•˜๋Š” ์†Œ๊ฐœ๋กœ ์‹œ์ž‘ํ•˜๋ผ.
925
+ 3. ์—ฌํ–‰ ์ผ์ •์˜ ๋…ผ๋ฆฌ์  ํ๋ฆ„์„ ๋ฐ˜์˜ํ•œ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด๋ผ.
926
+ 4. ๊ฐ ์†Œ์ฃผ์ œ๋Š” 20์ž ์ด๋‚ด์˜ ๋ช…ํ™•ํ•˜๊ณ  ๋งค๋ ฅ์ ์ธ ์ œ๋ชฉ์œผ๋กœ ์ž‘์„ฑํ•˜๋ผ.
927
+ 5. ์†Œ์ฃผ์ œ๋“ค์ด ์ „์ฒด ์—ฌํ–‰ ํ๋ฆ„์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด๋Œ์–ด๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•˜๋ผ.
928
+ 6. ์—ฌํ–‰์ž๊ฐ€ ์‹ค์ œ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์ฒด์ ์ธ ์ •๋ณด ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์„ฑํ•˜๋ผ.
929
+ 7. ์ฐธ๊ณ ๊ธ€์˜ ๋‚ด์šฉ๊ณผ ํŠน์„ฑ์— ๋”ฐ๋ผ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์†Œ์ฃผ์ œ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๋ผ.
930
+
931
+ [์•„์›ƒ๋ผ์ธ ๊ตฌ์„ฑ]
932
+ ๋ฐ˜๋“œ์‹œ ๋‹ค์Œ ๊ตฌ์กฐ๋กœ ์†Œ์ฃผ์ œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋ผ:
933
+ - ๋„์ž…๋ถ€: [์—ฌํ–‰ ์ฝ”์Šค ๊ฐœ์š” ๋ฐ ํŠน์ง•]
934
+ - ๋ณธ๋ก 1~5: [์ฐธ๊ณ ๊ธ€์—์„œ ํŒŒ์•…๋œ ์ฃผ์š” ๋‚ด์šฉ์— ๋”ฐ๋ผ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑ]
935
+ - ๊ฒฐ๋ก : [์ฝ”์Šค์˜ ์žฅ์  ๋ฐ ์ตœ์ข… ์กฐ์–ธ]
936
+ """
937
+ }
938
+ return prompts.get(category, prompts["์—ฌํ–‰ ๋‹จ์ผ"])
939
+
940
+ def generate_outline(category, style, references1, references2, references3):
941
+ """์•„์›ƒ๋ผ์ธ ์ƒ์„ฑ ํ•จ์ˆ˜"""
942
+ try:
943
+ category_prompt = get_category_outline_prompt(category)
944
+ style_prompt = get_style_prompt(style)
945
+
946
+ # ์ฐธ๊ณ ๊ธ€ ์ •๋ณด ์ค€๋น„
947
+ references = [
948
+ references1.strip() if references1.strip() else "์ฐธ๊ณ  ์ž๋ฃŒ ์—†์Œ",
949
+ references2.strip() if references2.strip() else "์ฐธ๊ณ  ์ž๋ฃŒ ์—†์Œ",
950
+ references3.strip() if references3.strip() else "์ฐธ๊ณ  ์ž๋ฃŒ ์—†์Œ"
951
+ ]
952
+
953
+ # ์˜๋ฏธ ์žˆ๋Š” ์ฐธ๊ณ ๊ธ€๋งŒ ํ•„ํ„ฐ๋ง
954
+ meaningful_refs = [ref for ref in references if ref != "์ฐธ๊ณ  ์ž๋ฃŒ ์—†์Œ"]
955
+
956
+ if not meaningful_refs:
957
+ return "์ฐธ๊ณ  ์ž๋ฃŒ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ฐธ๊ณ  ์ž๋ฃŒ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."
958
+
959
+ outline_prompt = f"""
960
+ [์—ฌํ–‰ ๋ธ”๋กœ๊ทธ ์•„์›ƒ๋ผ์ธ ์ƒ์„ฑ ์š”์ฒญ]
961
+ ์นดํ…Œ๊ณ ๋ฆฌ: {category}
962
+ ํฌ์ŠคํŒ… ์Šคํƒ€์ผ: {style}
963
+ ์ฐธ๊ณ ๊ธ€:
964
+ {references[0]}
965
+ {references[1] if len(meaningful_refs) > 1 else ""}
966
+ {references[2] if len(meaningful_refs) > 2 else ""}
967
+ {category_prompt}
968
+ ์•„์›ƒ๋ผ์ธ ์ƒ์„ฑ ์‹œ ์ถ”๊ฐ€ ์ง€์นจ:
969
+ 1. ์ฐธ๊ณ ๊ธ€์˜ ํ•ต์‹ฌ ์ฃผ์ œ์™€ ๊ฐ€์น˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜๋ผ.
970
+ 2. ๊ฐ ์†Œ์ฃผ์ œ๋Š” 20์ž ์ด๋‚ด๋กœ ๋ช…ํ™•ํ•˜๊ณ  ๋งค๋ ฅ์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋ผ.
971
+ 3. ์ „์ฒด ์•„์›ƒ๋ผ์ธ์ด ๋…ผ๋ฆฌ์  ํ๋ฆ„๊ณผ ์ผ๊ด€์„ฑ์„ ๊ฐ€์ง€๋„๋ก ๊ตฌ์„ฑํ•˜๋ผ.
972
+ 4. ๋…์ž์˜ ๊ด€์‹ฌ๊ณผ ํ˜ธ๊ธฐ์‹ฌ์„ ์œ ๋ฐœํ•˜๋Š” ์†Œ์ฃผ์ œ๋ฅผ ์„ค๊ณ„ํ•˜๋ผ.
973
+ 5. ์†Œ์ฃผ์ œ๋งŒ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ถœ๋ ฅํ•˜๊ณ  ์„ค๋ช…์€ ํฌํ•จํ•˜์ง€ ๋ง๋ผ.
974
+ 6. ๊ฐ ์†Œ์ฃผ์ œ๊ฐ€ ์•ฝ์†๋œ ์„น์…˜(๋„์ž…๋ถ€, ๋ณธ๋ก 1~5, ๊ฒฐ๋ก )์— ์ ํ•ฉํ•œ์ง€ ํ™•์ธํ•˜๋ผ.
975
+ 7. ๋ฐฑํ‹ฑ(```)์ด๋‚˜ ์ฝ”๋“œ ๋ธ”๋ก ํ‘œ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ.
976
+ 8. ์ •ํ™•ํžˆ 7์ค„๋กœ ๊ตฌ์„ฑํ•˜์—ฌ '๋„์ž…๋ถ€', '๋ณธ๋ก 1~5', '๊ฒฐ๋ก '๋งŒ ์ถœ๋ ฅํ•˜๋ผ.
977
+ """
978
+
979
+ # Gemini API ํ˜ธ์ถœ
980
+ outline_result = call_gemini_api(outline_prompt, temperature=0.7)
981
+
982
+ # ๊ฒฐ๊ณผ ํ›„์ฒ˜๋ฆฌ (๋ถˆํ•„์š”ํ•œ ํ˜•์‹ ์ œ๊ฑฐ)
983
+ outline_result = re.sub(r'^\s*[-*]\s+', '', outline_result, flags=re.MULTILINE)
984
+ outline_result = re.sub(r'^\s*\d+\.\s+', '', outline_result, flags=re.MULTILINE)
985
+
986
+ # ๋ฐฑํ‹ฑ ๋ฐ ์ฝ”๋“œ ๋ธ”๋ก ์ œ๊ฑฐ
987
+ outline_result = re.sub(r'```[a-zA-Z]*\n?', '', outline_result)
988
+ outline_result = re.sub(r'```', '', outline_result)
989
+
990
+ # ์ •ํ™•ํžˆ 7์ค„ ํ˜•์‹์œผ๋กœ ์ •๋ฆฌ
991
+ lines = outline_result.strip().split('\n')
992
+ clean_lines = []
993
+
994
+ for line in lines:
995
+ line = line.strip()
996
+ if line and (line.startswith('๋„์ž…๋ถ€:') or
997
+ line.startswith('๋ณธ๋ก ') or
998
+ line.startswith('๊ฒฐ๋ก :')):
999
+ clean_lines.append(line)
1000
+
1001
+ # ์ •ํ™•ํžˆ 7์ค„์ด ๋‚˜์˜ค๋„๋ก ์กฐ์ •
1002
+ if len(clean_lines) > 7:
1003
+ clean_lines = clean_lines[:7]
1004
+ elif len(clean_lines) < 7:
1005
+ sections = ['๋„์ž…๋ถ€:', '๋ณธ๋ก 1:', '๋ณธ๋ก 2:', '๋ณธ๋ก 3:', '๋ณธ๋ก 4:', '๋ณธ๋ก 5:', '๊ฒฐ๋ก :']
1006
+ while len(clean_lines) < 7:
1007
+ missing_section = sections[len(clean_lines)]
1008
+ clean_lines.append(f"{missing_section} ์ถ”๊ฐ€ ๋‚ด์šฉ ํ•„์š”")
1009
+
1010
+ return '\n'.join(clean_lines)
1011
+
1012
+ except Exception as e:
1013
+ logging.error(f"์•„์›ƒ๋ผ์ธ ์ƒ์„ฑ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}")
1014
+ return f"์•„์›ƒ๋ผ์ธ ์ƒ์„ฑ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}"
1015
+
1016
+ def save_content_to_pdf(blog_post, user_topic=""):
1017
+ # ์‚ฌ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๋‚จ๊ฒจ๋‘ 
1018
+ return None
1019
+
1020
+ def format_filename(text):
1021
+ text = re.sub(r'[^\w\s-]', '', text)
1022
+ return text[:50].strip()
1023
+
1024
+ # API ํ•จ์ˆ˜๋“ค
1025
+ def generate_outline_2(category, style, ref1, ref2, ref3):
1026
+ return generate_outline(category, style, ref1, ref2, ref3)
1027
+
1028
+ def generate_blog_post_2(category, style, ref1, ref2, ref3, outline):
1029
+ result = generate_blog_post(category, style, outline, ref1, ref2, ref3)
1030
+ return result[0] # ํŠœํ”Œ์—์„œ HTML๋งŒ ๋ฐ˜ํ™˜