AIRider commited on
Commit
3991a94
ยท
verified ยท
1 Parent(s): e486556

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -33
app.py CHANGED
@@ -132,6 +132,7 @@ def generate_blog_post(query, prompt_template):
132
  try:
133
  # ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜ ์„ค์ • (๋ฌธ์ž ์ˆ˜)
134
  target_char_length = 2000
 
135
 
136
  # ์ฐธ๊ณ ๊ธ€ ๊ฐ€์ ธ์˜ค๊ธฐ
137
  references = fetch_references(query)
@@ -145,14 +146,14 @@ def generate_blog_post(query, prompt_template):
145
  frequency_penalty = 0.5
146
  presence_penalty = 0
147
 
148
- # ๋ถˆํ•„์š”ํ•œ ํ‘œํ˜„ ํŒจํ„ด ์ •์˜
149
  unwanted_patterns = [
150
  re.compile(r'\b์—ฌ๋Ÿฌ๋ถ„[,.]?\s*', re.IGNORECASE),
151
  re.compile(r'\b(๋งˆ์ง€๋ง‰์œผ๋กœ|๊ฒฐ๋ก ์ ์œผ๋กœ|๊ฒฐ๊ตญ|์ข…ํ•ฉ์ ์œผ๋กœ|๋”ฐ๋ผ์„œ|๋งˆ๋ฌด๋ฆฌ|์š”์•ฝ)[,.]?\s*', re.IGNORECASE)
152
  ]
153
 
154
- # ์‚ฌ์šฉ์ž ํ”„๋กฌํ”„ํŠธ ๊ตฌ์„ฑ (์„ธ ๊ฐœ์˜ ์ฐธ๊ณ ๊ธ€ ๋ชจ๋‘ ํฌํ•จ)
155
- user_prompt = prompt_template + f"""
156
  ์ฃผ์ œ: {query}
157
  ์ฐธ๊ณ ๊ธ€ 1: {ref1}
158
  ์ฐธ๊ณ ๊ธ€ 2: {ref2}
@@ -160,41 +161,59 @@ def generate_blog_post(query, prompt_template):
160
  ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜: {target_char_length}
161
  """
162
 
163
- # ๋ฉ”์‹œ์ง€ ๊ตฌ์„ฑ
164
- messages = [
165
- {"role": "user", "content": user_prompt}
166
- ]
167
-
168
- # OpenAI API ํ˜ธ์ถœ
169
- response = openai.ChatCompletion.create(
170
- model=model_name,
171
- messages=messages,
172
- temperature=temperature,
173
- max_tokens=max_tokens,
174
- top_p=top_p,
175
- frequency_penalty=frequency_penalty,
176
- presence_penalty=presence_penalty,
177
- )
178
-
179
- # ๋ชจ๋ธ์ด ์ƒ์„ฑํ•œ ๋‹ต๋ณ€ ์ถ”์ถœ
180
- generated_post = response['choices'][0]['message']['content'].strip()
181
-
182
- # ์ƒ์„ฑ๋œ ๊ธ€์—์„œ ๋ถˆํ•„์š”ํ•œ ํ‘œํ˜„ ์ œ๊ฑฐ
183
- for pattern in unwanted_patterns:
184
- generated_post = pattern.sub('', generated_post)
185
-
186
- # ์ƒ์„ฑ๋œ ๊ธ€์˜ ์‹ค์ œ ๋ฌธ์ž ์ˆ˜ ๊ณ„์‚ฐ
187
- actual_char_length = len(generated_post)
188
-
189
- # ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜ ๋ฏธ๋‹ฌ ์‹œ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€ ์ถ”๊ฐ€
190
- if actual_char_length < target_char_length:
191
- warning_message = f"\n\n[๊ฒฝ๊ณ ] ์ƒ์„ฑ๋œ ๊ธ€์˜ ๊ธธ์ด๊ฐ€ ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜์ธ {target_char_length}์ž์— ๋ฏธ๋‹ฌํ•ฉ๋‹ˆ๋‹ค. (ํ˜„์žฌ ๊ธ€์ž์ˆ˜: {actual_char_length}์ž)"
192
- generated_post += warning_message
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
 
194
  # ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ ๊ตฌ์„ฑ
195
  final_post = f"์ฃผ์ œ: {query}\n\n{generated_post}"
196
 
197
  return final_post, ref1, ref2, ref3, actual_char_length
 
198
  except Exception as e:
199
  print(f"generate_blog_post ํ•จ์ˆ˜์—์„œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}")
200
  return f"๋ธ”๋กœ๊ทธ ๊ธ€ ์ƒ์„ฑ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}", "", "", "", 0
 
132
  try:
133
  # ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜ ์„ค์ • (๋ฌธ์ž ์ˆ˜)
134
  target_char_length = 2000
135
+ max_attempts = 2 # ์ตœ๋Œ€ ์‹œ๋„ ํšŸ์ˆ˜ (์ดˆ๊ธฐ ์‹œ๋„ 1ํšŒ + ์žฌ์‹œ๋„ 1ํšŒ)
136
 
137
  # ์ฐธ๊ณ ๊ธ€ ๊ฐ€์ ธ์˜ค๊ธฐ
138
  references = fetch_references(query)
 
146
  frequency_penalty = 0.5
147
  presence_penalty = 0
148
 
149
+ # ๋ถˆํ•„์š”ํ•œ ํ‘œํ˜„ ํŒจํ„ด ์ •์˜ (ํ•˜๋“œ์ฝ”๋”ฉ)
150
  unwanted_patterns = [
151
  re.compile(r'\b์—ฌ๋Ÿฌ๋ถ„[,.]?\s*', re.IGNORECASE),
152
  re.compile(r'\b(๋งˆ์ง€๋ง‰์œผ๋กœ|๊ฒฐ๋ก ์ ์œผ๋กœ|๊ฒฐ๊ตญ|์ข…ํ•ฉ์ ์œผ๋กœ|๋”ฐ๋ผ์„œ|๋งˆ๋ฌด๋ฆฌ|์š”์•ฝ)[,.]?\s*', re.IGNORECASE)
153
  ]
154
 
155
+ # ์ดˆ๊ธฐ ํ”„๋กฌํ”„ํŠธ ๊ตฌ์„ฑ
156
+ base_prompt = prompt_template + f"""
157
  ์ฃผ์ œ: {query}
158
  ์ฐธ๊ณ ๊ธ€ 1: {ref1}
159
  ์ฐธ๊ณ ๊ธ€ 2: {ref2}
 
161
  ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜: {target_char_length}
162
  """
163
 
164
+ for attempt in range(max_attempts):
165
+ # ์ฒซ ๋ฒˆ์งธ ์‹œ๋„ ์ดํ›„์—๋Š” ํ”„๋กฌํ”„ํŠธ์— ์ถ”๊ฐ€ ์ง€์นจ์„ ํฌํ•จ
166
+ if attempt > 0:
167
+ additional_instructions = f"""
168
+ ์ƒ์„ฑ๋œ ๊ธ€์˜ ๊ธธ์ด๊ฐ€ ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜์— ๋ฏธ๋‹ฌ, ๋‚ด์šฉ์˜ ์งˆ์„ ์œ ์ง€ํ•˜๊ณ  ๋”์šฑ ํ’๋ถ€ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ณ , ์„ธ๋ถ€์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ™•์žฅํ•˜๋ผ
169
+ ์ค‘๋ณต๋˜๋Š” ๋‚ด์šฉ์€ ํ”ผํ•˜๊ณ  ์ƒˆ๋กœ์šด ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๋ผ
170
+ ๋ฐ˜๋“œ์‹œ ๋ถˆํ•„์š”ํ•œ ํ‘œํ˜„์€ ์‚ฌ์šฉํ•˜์ง€ ๋ง ๊ฒƒ: ์—ฌ๋Ÿฌ๋ถ„, ์ตœ๊ทผ, ๋งˆ์ง€๋ง‰์œผ๋กœ, ๊ฒฐ๋ก ์ ์œผ๋กœ, ๊ฒฐ๊ตญ, ์ข…ํ•ฉ์ ์œผ๋กœ, ๋”ฐ๋ผ์„œ, ๋งˆ๋ฌด๋ฆฌ, ์š”์•ฝ.
171
+ """
172
+ else:
173
+ additional_instructions = ""
174
+
175
+ user_prompt = base_prompt + additional_instructions
176
+
177
+ # ๋ฉ”์‹œ์ง€ ๊ตฌ์„ฑ
178
+ messages = [
179
+ {"role": "user", "content": user_prompt}
180
+ ]
181
+
182
+ # OpenAI API ํ˜ธ์ถœ
183
+ response = openai.ChatCompletion.create(
184
+ model=model_name,
185
+ messages=messages,
186
+ temperature=temperature,
187
+ max_tokens=max_tokens,
188
+ top_p=top_p,
189
+ frequency_penalty=frequency_penalty,
190
+ presence_penalty=presence_penalty,
191
+ )
192
+
193
+ # ๋ชจ๋ธ์ด ์ƒ์„ฑํ•œ ๋‹ต๋ณ€ ์ถ”์ถœ
194
+ generated_post = response['choices'][0]['message']['content'].strip()
195
+
196
+ # ๋ถˆํ•„์š”ํ•œ ํ‘œํ˜„ ์ œ๊ฑฐ (์ฝ”๋“œ์—์„œ ํ•˜๋“œ์ฝ”๋”ฉ์œผ๋กœ ์ฒ˜๋ฆฌ)
197
+ for pattern in unwanted_patterns:
198
+ generated_post = pattern.sub('', generated_post)
199
+
200
+ # ์ƒ์„ฑ๋œ ๊ธ€์˜ ์‹ค์ œ ๋ฌธ์ž ์ˆ˜ ๊ณ„์‚ฐ
201
+ actual_char_length = len(generated_post)
202
+
203
+ # ๊ธ€์ž์ˆ˜๊ฐ€ ๋ชฉํ‘œ๋ฅผ ์ถฉ์กฑํ•˜๋ฉด ๋ฃจํ”„ ์ข…๋ฃŒ
204
+ if actual_char_length >= target_char_length:
205
+ break
206
+ else:
207
+ # ๋กœ๊ทธ์— ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ (์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ํ‘œ์‹œ๋˜์ง€ ์•Š์Œ)
208
+ print(f"[์‹œ๋„ {attempt + 1}] ์ƒ์„ฑ๋œ ๊ธ€์˜ ๊ธธ์ด๊ฐ€ ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜์— ๋ฏธ๋‹ฌํ•ฉ๋‹ˆ๋‹ค. (ํ˜„์žฌ ๊ธ€์ž์ˆ˜: {actual_char_length}์ž)")
209
+ if attempt == max_attempts - 1:
210
+ print("[๊ฒฝ๊ณ ] ์ตœ๋Œ€ ์‹œ๋„ ํšŸ์ˆ˜์— ๋„๋‹ฌํ–ˆ์œผ๋‚˜ ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.")
211
 
212
  # ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ ๊ตฌ์„ฑ
213
  final_post = f"์ฃผ์ œ: {query}\n\n{generated_post}"
214
 
215
  return final_post, ref1, ref2, ref3, actual_char_length
216
+
217
  except Exception as e:
218
  print(f"generate_blog_post ํ•จ์ˆ˜์—์„œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}")
219
  return f"๋ธ”๋กœ๊ทธ ๊ธ€ ์ƒ์„ฑ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {str(e)}", "", "", "", 0