AIRider commited on
Commit
2c1f991
ยท
verified ยท
1 Parent(s): 8f7c8f4

Update app.py

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