Spaces:
Build error
Build error
Update app.py
Browse files
app.py
CHANGED
|
@@ -130,69 +130,87 @@ def fetch_crawl_results(query):
|
|
| 130 |
|
| 131 |
def generate_blog_post(query, prompt_template):
|
| 132 |
try:
|
| 133 |
-
|
| 134 |
-
|
| 135 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 136 |
references = fetch_references(query)
|
| 137 |
ref1, ref2, ref3 = references
|
| 138 |
|
| 139 |
# OpenAI API ์ค์
|
| 140 |
-
model_name = "gpt-
|
| 141 |
temperature = 0.85
|
| 142 |
-
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 |
-
|
| 154 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
|
| 190 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 191 |
|
| 192 |
final_post = f"์ฃผ์ : {query}\n\n{generated_post}"
|
| 193 |
-
actual_length = len(generated_post)
|
| 194 |
|
| 195 |
-
return final_post, ref1, ref2, ref3,
|
| 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
|