AIRider commited on
Commit
4235a84
ยท
verified ยท
1 Parent(s): 88b1d65

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -68
app.py CHANGED
@@ -146,33 +146,18 @@ def generate_blog_post(query, prompt_template):
146
  frequency_penalty = 0.5
147
  presence_penalty = 0.3
148
 
149
- # ๋ถˆํ•„์š”ํ•œ ํ‘œํ˜„ ๋ฆฌ์ŠคํŠธ
150
- unwanted_phrases = [
151
- '์—ฌ๋Ÿฌ๋ถ„',
152
- '์ตœ๊ทผ',
153
- '๋งˆ์ง€๋ง‰์œผ๋กœ',
154
- '๊ฒฐ๋ก ์ ์œผ๋กœ',
155
- '๊ฒฐ๊ตญ',
156
- '์ข…ํ•ฉ์ ์œผ๋กœ',
157
- '๋”ฐ๋ผ์„œ',
158
- '๋งˆ๋ฌด๋ฆฌ',
159
- '์š”์•ฝ'
160
- ]
161
-
162
- # ๋ถˆํ•„์š”ํ•œ ํ‘œํ˜„์ด ํฌํ•จ๋œ ๋‹จ์–ด ์ „์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ํ•จ์ˆ˜
163
  def remove_unwanted_phrases(text):
164
- # ๋‹จ์–ด ๋‹จ์œ„๋กœ ํ…์ŠคํŠธ๋ฅผ ๋ถ„ํ• 
 
 
 
165
  words = re.findall(r'\S+|\n', text)
166
- result_words = []
167
- for word in words:
168
- # ๋ถˆํ•„์š”ํ•œ ํ‘œํ˜„์ด ๋‹จ์–ด์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
169
- if not any(phrase in word for phrase in unwanted_phrases):
170
- result_words.append(word)
171
- # ๋‹จ์–ด๋“ค์„ ๋‹ค์‹œ ์กฐํ•ฉํ•˜์—ฌ ๊ฒฐ๊ณผ ํ…์ŠคํŠธ ์ƒ์„ฑ
172
  return ' '.join(result_words).replace(' \n ', '\n').replace(' \n', '\n').replace('\n ', '\n')
173
 
174
  # ์ดˆ๊ธฐ ํ”„๋กฌํ”„ํŠธ ๊ตฌ์„ฑ
175
- base_prompt = prompt_template + f"""
176
  ์ฃผ์ œ: {query}
177
  ์ฐธ๊ณ ๊ธ€ 1: {ref1}
178
  ์ฐธ๊ณ ๊ธ€ 2: {ref2}
@@ -180,56 +165,55 @@ def generate_blog_post(query, prompt_template):
180
  ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜: {target_char_length}
181
  """
182
 
183
- for attempt in range(max_attempts):
184
- # ์ฒซ ๋ฒˆ์งธ ์‹œ๋„ ์ดํ›„์—๋Š” ํ”„๋กฌํ”„ํŠธ์— ์ถ”๊ฐ€ ์ง€์นจ์„ ํฌํ•จ
185
- if attempt > 0:
186
- additional_instructions = f"""
187
- 1. ์ƒ์„ฑ๋œ ๊ธ€์˜ ๊ธธ์ด๊ฐ€ ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜์— ๋ฏธ๋‹ฌ์ž…๋‹ˆ๋‹ค. ๋‚ด์šฉ์˜ ์งˆ์„ ์œ ์ง€ํ•˜๊ณ  ๋”์šฑ ํ’๋ถ€ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ณ , ์„ธ๋ถ€์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ™•์žฅํ•˜์„ธ์š”.
188
- 2. ๊ธฐ์กด์— ์ž‘์„ฑํ•œ ๊ธ€์€ ๋ฐ˜๋“œ์‹œ ์œ ์ง€ํ•˜๋˜, ์ค‘๋ณต๋˜๋Š” ๋‚ด์šฉ์€ ํ”ผํ•˜๊ณ  ์ƒˆ๋กœ์šด ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.
189
- 3. ๋ฐ˜๋“œ์‹œ ๋งˆํฌ๋‹ค์šด ํ˜•์‹์ด ์•„๋‹Œ ์ˆœ์ˆ˜ํ•œ ํ…์ŠคํŠธ๋กœ๋งŒ ์ถœ๋ ฅํ•˜์„ธ์š”.
190
- 4. ๋ฐ˜๋“œ์‹œ ์ด ํ‘œํ˜„๋“ค์€ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”: ์—ฌ๋Ÿฌ๋ถ„, ์ตœ๊ทผ, ๋งˆ์ง€๋ง‰์œผ๋กœ, ๊ฒฐ๋ก ์ ์œผ๋กœ, ๊ฒฐ๊ตญ, ์ข…ํ•ฉ์ ์œผ๋กœ, ๋”ฐ๋ผ์„œ, ๋งˆ๋ฌด๋ฆฌ, ์š”์•ฝ.
191
- """
192
- else:
193
- additional_instructions = ""
194
-
195
- user_prompt = base_prompt + additional_instructions
196
-
197
- # ๋ฉ”์‹œ์ง€ ๊ตฌ์„ฑ
198
- messages = [
199
- {"role": "user", "content": user_prompt}
200
- ]
201
-
202
- # OpenAI API ํ˜ธ์ถœ
203
- response = openai.ChatCompletion.create(
204
- model=model_name,
205
- messages=messages,
206
- temperature=temperature,
207
- max_tokens=max_tokens,
208
- top_p=top_p,
209
- frequency_penalty=frequency_penalty,
210
- presence_penalty=presence_penalty,
211
- )
212
-
213
- # ๋ชจ๋ธ์ด ์ƒ์„ฑํ•œ ๋‹ต๋ณ€ ์ถ”์ถœ
214
- generated_post = response['choices'][0]['message']['content'].strip()
215
 
216
- # ๋ถˆํ•„์š”ํ•œ ํ‘œํ˜„ ์ œ๊ฑฐ ํ•จ์ˆ˜ ์ ์šฉ
217
- generated_post = remove_unwanted_phrases(generated_post)
218
-
219
- # ์ƒ์„ฑ๋œ ๊ธ€์˜ ์‹ค์ œ ๋ฌธ์ž ์ˆ˜ ๊ณ„์‚ฐ
220
- actual_char_length = len(generated_post)
221
 
222
- # ๊ธ€์ž์ˆ˜๊ฐ€ ๋ชฉํ‘œ๋ฅผ ์ถฉ์กฑํ•˜๋ฉด ๋ฃจํ”„ ์ข…๋ฃŒ
223
- if actual_char_length >= target_char_length:
224
- break
225
- else:
226
- # ๋กœ๊ทธ์— ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ (์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ํ‘œ์‹œ๋˜์ง€ ์•Š์Œ)
227
- print(f"[์‹œ๋„ {attempt + 1}] ์ƒ์„ฑ๋œ ๊ธ€์˜ ๊ธธ์ด๊ฐ€ ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜์— ๋ฏธ๋‹ฌํ•ฉ๋‹ˆ๋‹ค. (ํ˜„์žฌ ๊ธ€์ž์ˆ˜: {actual_char_length}์ž)")
228
- if attempt == max_attempts - 1:
229
- print("[๊ฒฝ๊ณ ] ์ตœ๋Œ€ ์‹œ๋„ ํšŸ์ˆ˜์— ๋„๋‹ฌํ–ˆ์œผ๋‚˜ ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.")
 
 
 
 
 
 
 
230
 
231
  # ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ ๊ตฌ์„ฑ
232
- final_post = f"์ฃผ์ œ: {query}\n\n{generated_post}"
 
233
 
234
  return final_post, ref1, ref2, ref3, actual_char_length
235
 
 
146
  frequency_penalty = 0.5
147
  presence_penalty = 0.3
148
 
149
+ # ๋ถˆํ•„์š”ํ•œ ํ‘œํ˜„ ์ œ๊ฑฐ ํ•จ์ˆ˜
 
 
 
 
 
 
 
 
 
 
 
 
 
150
  def remove_unwanted_phrases(text):
151
+ unwanted_phrases = [
152
+ '์—ฌ๋Ÿฌ๋ถ„', '์ตœ๊ทผ', '๋งˆ์ง€๋ง‰์œผ๋กœ', '๊ฒฐ๋ก ์ ์œผ๋กœ', '๊ฒฐ๊ตญ',
153
+ '์ข…ํ•ฉ์ ์œผ๋กœ', '๋”ฐ๋ผ์„œ', '๋งˆ๋ฌด๋ฆฌ', '์š”์•ฝ'
154
+ ]
155
  words = re.findall(r'\S+|\n', text)
156
+ result_words = [word for word in words if not any(phrase in word for phrase in unwanted_phrases)]
 
 
 
 
 
157
  return ' '.join(result_words).replace(' \n ', '\n').replace(' \n', '\n').replace('\n ', '\n')
158
 
159
  # ์ดˆ๊ธฐ ํ”„๋กฌํ”„ํŠธ ๊ตฌ์„ฑ
160
+ initial_prompt = prompt_template + f"""
161
  ์ฃผ์ œ: {query}
162
  ์ฐธ๊ณ ๊ธ€ 1: {ref1}
163
  ์ฐธ๊ณ ๊ธ€ 2: {ref2}
 
165
  ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜: {target_char_length}
166
  """
167
 
168
+ # ์ฒซ ๋ฒˆ์งธ ์‹œ๋„
169
+ messages = [{"role": "user", "content": initial_prompt}]
170
+ response = openai.ChatCompletion.create(
171
+ model=model_name,
172
+ messages=messages,
173
+ temperature=temperature,
174
+ max_tokens=max_tokens,
175
+ top_p=top_p,
176
+ frequency_penalty=frequency_penalty,
177
+ presence_penalty=presence_penalty,
178
+ )
179
+ first_attempt = response['choices'][0]['message']['content'].strip()
180
+
181
+ # ๋‘ ๋ฒˆ์งธ ์‹œ๋„๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€ ํ”„๋กฌํ”„ํŠธ
182
+ additional_prompt = f"""
183
+ ์ด์ „์— ์ƒ์„ฑ๋œ ๊ธ€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค์Œ ์ง€์นจ์„ ๋ฐ˜๋“œ์‹œ ๋”ฐ๋ผ์„œ ๊ธ€์„ ํ‡ด๊ณ (revision)ํ•˜๋ผ
184
+ 1. ๋ฐ˜๋“œ์‹œ ์ด์ „ ๊ธ€(first_attempt)์˜ ๊ตฌ์กฐ์™€ ๋‚ด์šฉ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋‚ด์šฉ์„ ๋ณด์™„ํ•˜๋ผ
185
+ 2. ๋ฐ˜๋“œ์‹œ ๋งˆํฌ๋‹ค์šด ํ˜•์‹์ด ์•„๋‹Œ ์ˆœ์ˆ˜ํ•œ ํ…์ŠคํŠธ๋กœ๋งŒ ์ถœ๋ ฅํ•˜์„ธ์š”.
186
+ 3. ๋ฐ˜๋“œ์‹œ ์ด ํ‘œํ˜„๋“ค์€ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”: ์—ฌ๋Ÿฌ๋ถ„, ์ตœ๊ทผ, ๋งˆ์ง€๋ง‰์œผ๋กœ, ๊ฒฐ๋ก ์ ์œผ๋กœ, ๊ฒฐ๊ตญ, ์ข…ํ•ฉ์ ์œผ๋กœ, ๋”ฐ๋ผ์„œ, ๋งˆ๋ฌด๋ฆฌ, ์š”์•ฝ.
187
+ 4. ๊ธ€์˜ ํ๋ฆ„์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“ค๊ณ , ๊ฐ ๋‹จ๋ฝ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ํ•ด์ฃผ์„ธ์š”.
188
+ 5. ๋ฐ˜๋“œ์‹œ ๋ชฉํ‘œ ๊ธ€์ž์ˆ˜({target_char_length}์ž)๋ฅผ ์ถฉ์กฑํ•˜๋„๋ก ๋‚ด์šฉ์„ ํ™•์žฅํ•˜์„ธ์š”.
189
+
190
+ ์ด์ „ ๊ธ€:
191
+ {first_attempt}
 
 
 
 
 
 
 
 
192
 
193
+ ์ฐธ๊ณ ๊ธ€ 1: {ref1}
194
+ ์ฐธ๊ณ ๊ธ€ 2: {ref2}
195
+ ์ฐธ๊ณ ๊ธ€ 3: {ref3}
196
+ """
 
197
 
198
+ # ๋‘ ๋ฒˆ์งธ ์‹œ๋„
199
+ messages = [{"role": "user", "content": additional_prompt}]
200
+ response = openai.ChatCompletion.create(
201
+ model=model_name,
202
+ messages=messages,
203
+ temperature=temperature,
204
+ max_tokens=max_tokens,
205
+ top_p=top_p,
206
+ frequency_penalty=frequency_penalty,
207
+ presence_penalty=presence_penalty,
208
+ )
209
+ second_attempt = response['choices'][0]['message']['content'].strip()
210
+
211
+ # ๋ถˆํ•„์š”ํ•œ ํ‘œํ˜„ ์ œ๊ฑฐ
212
+ final_post = remove_unwanted_phrases(second_attempt)
213
 
214
  # ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ ๊ตฌ์„ฑ
215
+ final_post = f"์ฃผ์ œ: {query}\n\n{final_post}"
216
+ actual_char_length = len(final_post)
217
 
218
  return final_post, ref1, ref2, ref3, actual_char_length
219