Spaces:
Running
Running
import gradio as gr | |
import os | |
import asyncio | |
import aiohttp | |
from dotenv import load_dotenv | |
load_dotenv() | |
openai_api_key = os.getenv("OPENAI_API_KEY") | |
# OpenAI API ๋น๋๊ธฐ ํธ์ถ ํจ์ | |
async def call_openai_api_async(session, prompts, max_tokens, temperature, top_p): | |
try: | |
async with session.post( | |
"https://api.openai.com/v1/chat/completions", | |
headers={"Authorization": f"Bearer {openai_api_key}"}, | |
json={ | |
"model": "gpt-4o-mini", | |
"messages": prompts, | |
"max_tokens": max_tokens, | |
"temperature": temperature, | |
"top_p": top_p, | |
} | |
) as response: | |
result = await response.json() | |
if 'choices' not in result: | |
print("Unexpected API response:", result) | |
return "API ์๋ต ์ค๋ฅ" | |
return result['choices'][0]['message']['content'] | |
except Exception as e: | |
print(f"API ํธ์ถ ์ค ์ค๋ฅ ๋ฐ์: {str(e)}") | |
return "API ํธ์ถ ์ค๋ฅ" | |
# ์ ์ฒด ๋ถ์ ํจ์ (๋น๋๊ธฐ) | |
async def analyze_all_async(combined_output, progress=gr.Progress()): | |
async with aiohttp.ClientSession() as session: | |
tasks = [] | |
for label, setting in settings.items(): | |
prompts_item = [ | |
{"role": "system", "content": setting["system_message"]}, | |
{"role": "user", "content": combined_output} | |
] | |
task = asyncio.create_task(call_openai_api_async( | |
session, | |
prompts_item, | |
setting["max_tokens"], | |
setting["temperature"], | |
setting["top_p"] | |
)) | |
tasks.append((label, task)) | |
results = {} | |
total_steps = len(settings) | |
completed_tasks = 0 | |
for label, task in tasks: | |
try: | |
result = await task | |
results[label] = result | |
except Exception as e: | |
print(f"API ํธ์ถ ์ค ์ค๋ฅ ๋ฐ์ ({label}): {str(e)}") | |
results[label] = "API ํธ์ถ ์ค๋ฅ" | |
completed_tasks += 1 | |
progress((completed_tasks / total_steps), desc="๋ถ์ ์ค...") | |
progress(1.0, desc="๋ถ์ ์๋ฃ!") | |
return results | |
# ๊ฐ๋ณ ๋ถ์ ํจ์ (๋น๋๊ธฐ) | |
async def analyze_single_async(combined_output, analysis_type, progress=gr.Progress()): | |
async with aiohttp.ClientSession() as session: | |
setting = settings.get(analysis_type) | |
if not setting: | |
return "์ฌ๋ฐ๋ฅด์ง ์์ ๋ถ์ ํ์ " | |
prompts_single = [ | |
{"role": "system", "content": setting["system_message"]}, | |
{"role": "user", "content": combined_output} | |
] | |
result = await call_openai_api_async( | |
session, | |
prompts_single, | |
setting["max_tokens"], | |
setting["temperature"], | |
setting["top_p"] | |
) | |
return result | |
# ๊ฐ๋ณ ๋ถ์ ๋ํผ ํจ์ ์์ฑ๊ธฐ | |
def get_analyze_single_wrapper(analysis_type): | |
async def wrapper(combined_output): | |
result = await analyze_single_async(combined_output, analysis_type) | |
return result | |
return wrapper | |
# ์ ๋ ฅ๊ฐ๋ค์ ๊ฒฐํฉํ๋ ํจ์ | |
def generate_combined_output(product, nuance, target, features, reviews): | |
# ๊ธฐ๋ณธ๊ฐ ์ค์ | |
product_placeholder = "์ด์ํ ๊ฐ์ต๊ธฐ" | |
nuance_placeholder = "๊ธฐ๋ฅ์ ์ค์ฌ ๋ถ์" | |
target_placeholder = "์ผ๋ฐ์ธ" | |
features_placeholder = """ | |
[์ ํ ์ ๋ณด] | |
1. ์ ํ์ ๋ธ๋๋๋ (ETS ๊ฐ์ต๊ธฐ)์ ๋๋ค. | |
2. ETS์ ๋ธ๋๋ ๊ฐ์น๋ (์ฒญ์ ์ ์ฝ์์ ๋ด๋ค)๋ฅผ ์ ๋ น์์ผ๋ฉด ์ข๊ฒ ์ต๋๋ค. | |
3. ์ ํ์ ์ฅ์ (์คํ) | |
1) 3๋จ๊ณ ๋ถ๋ฌด๋ ์กฐ์ ๊ฐ๋ฅ | |
- 1๋จ๊ณ: 100ml, 2๋จ๊ณ: 200ml, 3๋จ๊ณ: 300ml | |
2) ๋์ฉ๋ ์์กฐ๋ก 3์ผ ์ด์ ๋ณด์ถฉ ์์ด ์ฌ์ฉ ๊ฐ๋ฅ | |
- 4.2L (๋์ฉ๋ ์์กฐ) | |
3) ๊ฐ์ต๋ ฅ์ด ๊ฒฝ์์ฌ๋ณด๋ค ํ๋ถ | |
- ์ต๋๊ฐ์ต๋ : 300ml | |
4) ์ธ์ฒ ๊ด๋ฆฌ๊ฐ ๋งค์ฐ ์ฝ๋ค. | |
- ๋ถ๋ฆฌํ ๊ตฌ์กฐ (๊ฐํธ ์ธ์ฒ) | |
5) ์ต๋์กฐ์ ์ผ์๋ฅผ ํ์ฉํ์ฌ ์๋์ผ๋ก ์กฐ์ ๋ฐ OFF๊ฐ ๊ฐ๋ฅ | |
- AI ์๋ ์ต๋ ์กฐ์ , ํ์ด๋จธ ๊ธฐ๋ฅ | |
6) ๋ฌผ ๋ณด์ถฉ์ด ๋งค์ฐ ์ฝ๋ค. | |
- ์๋ถ ๊ตฌ์กฐ ๊ธ์ ๋ฐฉ์ | |
7) ๊ฐ์ด์ ๊ฐ์ต๊ธฐ์ ๋นํด ์๋์ง ์๋น ๋ฎ์, ์์ ์ ์, ๊ฐ์ด์ ํ์ง ์์ ์์ ํจ | |
- ์ด์ํ ๊ฐ์ต๊ธฐ ์กฐ์ฉ | |
8) ๋ฏฟ์ ์ ์๋ ๊ตญ๋ด ์ ์ ๋ฐ AS | |
- ๊ตญ๋ด ์ ์""" | |
reviews_placeholder = """ | |
[๋ฆฌ๋ทฐ] | |
1. ๋งค์ฐ ๋ง์กฑํฉ๋๋ค. ๊ฐ์ต๋๋ ๋ง๊ณ ์ธ์ฒ๋ ํธ๋ฆฌํด์. | |
2. ๋ค๋ฅธ ์ ํ์ ๋นํด ์์์ด ์ ๊ณ ๋์์ธ๋ ์๋ป์. | |
3. ๋ฌผ ๋ณด์ถฉ์ด ์ฝ๊ณ ์ค๋ ์ฌ์ฉ ๊ฐ๋ฅํด์ ์ข์์. | |
""" | |
product = product if product else product_placeholder | |
nuance = nuance if nuance else nuance_placeholder | |
target = target if target else target_placeholder | |
features = features if features else features_placeholder | |
reviews = reviews if reviews else reviews_placeholder | |
combined_output = f"Product: {product}\nNuance: {nuance}\nTarget Audience: {target}\nFeatures: {features}\nReviews: {reviews}" | |
return combined_output | |
# โ UI ๋ฆฌ์ ํจ์ (๊ฐ ์ปดํฌ๋ํธ์ update ๋ฉ์๋๋ฅผ ์ฌ์ฉ) | |
def ui_reset_all(): | |
# reset ์์: [product_input (Textbox), | |
# nuance_options (Dropdown), | |
# target_options (Dropdown), | |
# features_input (Textbox), | |
# reviews_input (Textbox), | |
# combined_output (Textbox)] + | |
# [๊ฐ ํ๋กฌํํธ๋ณ ์ถ๋ ฅ(Textbox) (len(prompts)๊ฐ)] + | |
# [final_output (Textbox)] | |
resets = [] | |
resets.append(gr.Textbox.update(value="")) # product_input | |
resets.append(gr.Dropdown.update(value="์์ ๋ฅผ ์ ํํด๋ณด์ธ์")) # nuance_options | |
resets.append(gr.Dropdown.update(value="์์ ๋ฅผ ์ ํํด๋ณด์ธ์")) # target_options | |
resets.append(gr.Textbox.update(value="")) # features_input | |
resets.append(gr.Textbox.update(value="")) # reviews_input | |
resets.append(gr.Textbox.update(value="")) # combined_output | |
resets.extend([gr.Textbox.update(value="") for _ in range(len(prompts))]) # ๊ฐ ํ๋กฌํํธ๋ณ ์ถ๋ ฅ | |
resets.append(gr.Textbox.update(value="")) # final_output | |
return tuple(resets) | |
# ํ๋กฌํํธ ์ ์ | |
prompts = { | |
"1๏ธโฃํ์ฌ ์ฌ๋ก๊ฑด": """[์ค์ ํ๋กฌํํธ] | |
1. ๋ฐ๋์ ํ๊ตญ์ด๋ก ์ถ๋ ฅํ๋ผ. | |
2. ๋๋ ์ธ๊ณ์ ์ผ๋ก ์ ๋ช ํ ๋ง์ผํฐ์ด์, ์นดํผ๋ผ์ดํฐ์ด๋ค. | |
3. ์์ธํ์ด์ง๋ฅผ ๋ง๋ค๋ ค๊ณ ํ๋ค. ํญ๋ชฉ์ "slogan."์ด๋ค. | |
4. ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๊ธ์ ์ ์ธ ๋ฉ์ธ์ง์ ๊ฐ๋ ฅํ ์ํฉํธ๊ฐ ์๋ ๋ฌธ๊ตฌ๋ฅผ ์์ฑํ๋ผ. | |
5. 2์ค ์ด๋ด๋ก ๊ฐ๋ตํ๊ฒ ์์ฑํ๋ผ. | |
6. 10๊ฐ์ง ์ฌ๋ก๊ฑด์ ์ถ๋ ฅํ๋ผ.(๊ฒฐ๊ณผ๋ฌผ ์์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ผ) | |
7. ์ํ๋ช (์ํํค์๋)๋ ์ ์ธํ๋ผ. | |
8. Target์ ๋ฐ๋์ ๋ฐ์ํ๋ผ. | |
9. ์ฝ๊ธฐ ์ฝ๊ณ , ๊ธฐ์ตํ๊ธฐ ์ฝ๊ฒ ์์ฑํ๋ผ. | |
10. [์ข์ ์ฌ๋ก๊ฑด์ ์์น]์ ์ฐธ๊ณ ํ๋ผ. | |
[์ถ๋ ฅํ์] | |
1. ์ฌ๋ก๊ฑด 10๊ฐ ์ด์ธ์๋ ๋ค๋ฅธ ์ด๋ค ๋ด์ฉ๋ ์ถ๋ ฅํ์ง ๋ง ๊ฒ. | |
2. ์ผ์ฐจ์์ , ์ง๊ด์ ์ธ์ด๋ก ์์ฑํ๋ผ. | |
[์ข์ ์ฌ๋ก๊ฑด์ ์์น] | |
1. ๊ฐ๊ฒฐ์ฑ : ์งง๊ณ ๊ฐ๊ฒฐํด์ผํ๋ค. "Just Do It"์ฒ๋ผ ๋จ ๋ช ๊ฐ์ ๋จ์ด๋ก๋ ํฐ ์๋ฏธ๋ฅผ ๋ด์ ์ ์์ด์ผ ํ๋ค. | |
2. ๋ช ๋ฃ์ฑ : ๋ช ๋ฃํด์ผํ๋ค. ์๋ฌด๋ฆฌ ๋ฉ์ง ๋ฌธ์ฅ์ด๋ผ๋ ๊ทธ ์๋ฏธ๊ฐ ๋ชจํธํ๋ค๋ฉด ์ฌ๋๋ค์ ๊ทธ ๋ธ๋๋๋ฅผ ๊ธฐ์ตํ๊ธฐ ์ด๋ ต๋ค. | |
- ๋ฐ๋ผ์ ๋จ์ด ์ ํ์ด ์ค์ํ๋ค, ๋ช ๋ฃํ ๋ฉ์ธ์ง๋ก ์ธ์ง๋๋ฅผ ๋์ฌ์ผํ๋ค. | |
3. ๊ธฐ์ต๋ ฅ : ๊ธฐ์ตํ๊ธฐ ์ฌ์์ผํ๋ค. ์ข์ ์ฌ๋ก๊ฑด์ ์ฌ๋๋ค์ด ํ๋ฒ ๋ค์ด๋ ์์ง ๋ชปํ๊ฒ ๋ง๋๋ ๋งค๋ ฅ์ด ์๋ค. | |
4. ์ ํ์ ๊ฐ์ฅ ํต์ฌ์ ์ธ ํฌ์ธํธ๋ฅผ ๋ด๋๋ค. | |
5. ํต์ฌ ๊ฐ์น๋ ๋น์ ์ ๋ํ๋ผ ์ ์๋ ํค์๋๋ ํํ์ ์ฐพ๋๋ค. | |
6. ๊ฐ์ ์ ์ธ์ฐ๊ฒฐ ์์๋ฅผ ๋ง๋ ๋ค. | |
[์ค์ ์ฌ์ฉ์ค์ธ ์ฌ๋ก๊ฑด ์์] | |
1. ํํฌ: "์์์ ์ฑ๊ฒจ์ฃผ๋ ๋๋ง์ ๋จธ๋ ํธ๋ ์ด๋" | |
2. ๋์ฆ๋๋๋: "์ง๊ตฌ์์ ๊ฐ์ฅ ํ๋ณตํ ๊ณณ" | |
3. ๋ฐ๋ฆฌ์ ์์ฌ: "๋ ์๊ฐ ์ทจ๋ฏธ๊ฐ ๋๋ ๋น์ ์ ๋ง๋๋ณด์ธ์" | |
4. ์ผ์ฑ ๊ทธ๋๋ฐ ๊ฑด์กฐ๊ธฐ: "์ฐ๋ฆฌ๊ฐ ํค์ด๊ฑด ๋จ์ง ๊ฑด์กฐ๊ธฐ์ ํฌ๊ธฐ๊ฐ ์๋๋ผ ๊นจ๋ํจ์ ํฌ๊ธฐ" | |
5. ๋ ธ์คํ์ด์ค: "์ฌ ๊ฒจ์ธ ์ฐ๋ฆฌ์ ์ฌ์ฅ์ ํจ๊ป ๋ด๋ค" | |
6. ๋ด๋ผ๋ฏธ์ค: "์ผ๊ตด์. ์์๋. ๊ฐ์ฅ ๋งค๋ ฅ์ ์ด๋ค. ํผ๋ถ์๊น์ง ์์!" | |
7. ํ์์์ด๋: "๊ฒฝ๊ธฐ๋ ๊ณ์๋์ด์ผ ํ๋ค." | |
8. ์ค๋๊ธฐ: "์นด๋ ๊ฐ ๋ง์์ด์ผ ์นด๋ ๊ฐ ๋ง์์ง์" | |
9. ์ ํํด๋ฒ๋ฆฌ ๋ฅํฐ๋ง๋ฐ: "์๋ง์ ๋ฅํฐ๊ฐ ์๊ธฐ๋ฌผํฐ์๋ฅผ ์ฐ๊ตฌํฉ๋๋ค" | |
10. ๋ง์ผ์ปฌ๋ฆฌ: "์ฅ๋ณด๊ธฐ๋ฅผ ์๋กญ๊ฒ, ํ๋ฆฌํฐ ์๊ฒ" | |
11. ์ฅ์ : "์ฅ์ ์ ๋ฒ์น : ํ๋ ์ฌ๋๋ค์ด ๊ฒฝ์ํ๋ฉด ๊ฐ๊ฒฉ์ ๋ด๋ ค๊ฐ๋๋ค" | |
""", | |
"2๏ธโฃ์ํ์ ๋ํํ๋ ๋ฌธ๊ตฌ": """[์ค์ ํ๋กฌํํธ] | |
1. ๋ฐ๋์ ํ๊ตญ์ด๋ก ์ถ๋ ฅํ๋ผ. | |
2. ๋น์ ์ ์ ๋ช ํ ๋ง์ผํฐ์ด์, ์นดํผ๋ผ์ดํฐ์ด๋ค. | |
3. ์ถ๋ ฅ ๋๋ ๋ชจ๋ ๋ด์ฉ์ '๋งค์ฌ๋ก์ฐ์ ์๊ตฌ 5๋จ๊ณ' ๊ด์ ์ ๋ง๋๋ก [์ถ๋ ฅํ์]์ ๋ง๋๋ก ์นดํผ๋ฅผ ์์ฑํ๋ผ | |
4. ๋ฐ๋์ ์ํ๋ช (์ํํค์๋)๋ ์ ์ธํ๋ผ. | |
5. ์ธ์ด์ ์ธ ๋๋์ ๋ํ๋ฏผ๊ตญ(ํ๊ตญ)์์ ์ฐ๋ ๋๋์ผ๋ก ์์ฑํ๋ผ. | |
6. ํต์ฌ ๋ฉ์์ง 1๊ฐ์ง์ฉ์ ๋ฐ์ํ๋ผ. | |
7. '์นดํผ๋ผ์ดํ ํฌ์ธํธ'๋ฅผ ๋ฐ์ํ๋ผ. | |
8. Target์ ๋ฐ๋์ ๋ฐ์ํ๋ผ. | |
[์นดํผ๋ผ์ดํ ํฌ์ธํธ] | |
1. ํธ๊ธฐ์ฌ์ ์๊ทนํ๋ผ. | |
2. ์ ์ฉํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ผ. | |
3. ์ง๋ฌธ ํ์์ผ๋ก ์์ฑํ๋ผ. | |
4. ๊ฐ์ฑ์ ์๊ทนํ๋ผ. | |
5. ์ป๊ฒ๋ ์ด์ ์ ๋ช ํํ๊ฒ ํํํ๋ผ. | |
6. ๋์น๋ฉด ์ํด๋๋ ํฌ์ธํธ๋ฅผ ์ ์ํ๋ผ. | |
7. ๋ฐ๋์ ์ํ๋ช (์ํํค์๋)๋ ์ ์ธํ๋ผ. | |
8. ๊ฐ์ฑ์ ์ด๊ณ ์์ ์ ์ธ ํํ์ผ๋ก ์ถ๋ ฅํ๋ผ. | |
[๋งค์ฌ๋ก์ฐ์ ์๊ตฌ 5๋จ๊ณ] | |
1. ์๋ฆฌ์ ์๊ตฌ | |
2. ์์ ์ ์๊ตฌ | |
3. ์ฌ๋๊ณผ ์์์ ์๊ตฌ | |
4. ์กด๊ฒฝ์ ์๊ตฌ | |
5. ์์์คํ์ ์๊ตฌ | |
[์ถ๋ ฅํ์] | |
1. ๋งค์ฌ๋ก์ฐ์ ์๊ตฌ 5๋จ๊ณ์ ๊ฐ ํญ๋ชฉ๋ง๋ค 5๊ฐ์ฉ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ผ. | |
2. ๋ฐ๋์ ์ํ๋ช (์ํํค์๋)๋ ์ ์ธํ๋ผ. | |
3. ์ค๊ตญ์ด(ํ์), ์ผ๋ณธ์ด(ํ๋ผ๊ฐ๋)๋ ์ ์ธํ๋ผ. | |
[์์] | |
1. ๋งค์ผ๋งค์ผ ์ฒญ๋ํ๊ณ ๊ฐ๋ณ๊ฒ ์ฆ๊ฒจ์! | |
""", | |
"3๏ธโฃ์ด๋ฐ๋ถ๋ค์๊ฒ ์ถ์ฒํฉ๋๋ค": """[์ค์ ํ๋กฌํํธ] | |
1. ๋ฐ๋์ ํ๊ตญ์ด๋ก ์ถ๋ ฅํ๋ผ. | |
2. ๋๋ ๊ณ ์ก๋งค์ถ์ ์จ๋ผ์ธ ํ๋งค์์ด๋ฉฐ ์ ๋ช ํ ๋ง์ผํฐ์ด๋ค. | |
3. ์ํ ํ๋งค๋ฅผ ์ด์ง์ํค๊ธฐ ์ํ ์์ธํ์ด์ง๋ฅผ ์์ฑ ํ๋ค. ํญ๋ชฉ์ "์ด๋ฐ๋ถ๋ค์๊ฒ ์ถ์ฒํฉ๋๋ค."์ด๋ค. | |
4. ๋ฐ๋์ ์ ๊ณตํ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก 20๊ฐ ์์ฑํ๋ผ. | |
5. Target์ ๋ฐ์ํ๋ผ. | |
[์ถ๋ ฅ ์กฐ๊ฑด] | |
1. ์ ๊ณต๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ํ๊ฒ์ด ์ป๊ฒ๋ ์ด์ ์ ๋ช ํํ๊ฒ ํํํ๋ผ. | |
2. ๊ฐ ํญ๋ชฉ๋ง๋ค ๋ง์ง๋ง ๋ฌธ์ฅ์ "~๋ถ", "~๋ถ์๊ฒ ์ถ์ฒ" ์ผ๋ก ์์ฐ์ค๋ฝ๊ฒ ๋๋๋๋ก ์์ฑํ๋ผ. | |
3. ๋ฐ๋์ ๋ฌธ์ฅ ์์ชฝ์ ๋ด์ฉ๊ณผ ์ด์ธ๋ฆฌ๋๋ก ๋ฌธ์ฅ ๋ค์ชฝ์ ํ๊ฒ ๋์์ ๋ฐฐ์นํ๋ผ. | |
4. ๋ฐ๋์ ํ์ค๋ก ์์ฑํ๋ผ(์ต๋ 35์) | |
5. ์ ๊ณต๋ ๋ฐ์ดํฐ์ [์์]๋ฅผ ๋ฐํ์ผ๋ก 20๊ฐ ์์ฑํ๋ผ | |
[์ถ๋ ฅ ๊ธ์ง ์กฐ๊ฑด] | |
1. ์ ๋๋ก '์ถ๋ ฅ ๊ธ์ง ์กฐ๊ฑด'์ ์๋ ํํ๋ก ๋ฌธ์ฅ์ ์์ฑํ์ง ๋ง ๊ฒ. | |
2. '๋ถ๋ถ๋ถ(๋ถ๋ถ+๋ถ)'์ฒ๋ผ ์์ฐ์ค๋ฝ์ง ์์ ํ๊ตญ์ด | |
3. 'ํฉ๋๋ค', '~๋ค', '~์'์ ํํ | |
4. 'A/S', '๋ณด์ฆ์', '์ํธ์ง'๋ฑ์ ์ด์ ์ด ํฌํจ๋ ๋ฌธ์ฅ. | |
5. '์์ด ํค์ฐ๋ ์ฃผ๋ถ', '์ ํผ๋ถ๋ถ', '์ ๋ฌผ์ฉ' ๋ฑ์ ๋จ์ํ ํ๊ฒ | |
6. '์ถ๋ ฅ ๊ธ์ง ์กฐ๊ฑด'์ ํด๋น๋๋ฉด ๋ฌธ์ฅ์ ์ถ๋ ฅํ์ง ๋ง๋ผ. | |
[์์] | |
1. ์๋์ต๋ ์กฐ์ ๊ธฐ๋ฅ์ด ํ์ํ์ ๋ถ | |
2. ์ฒญ์ ๋ฐ ๊ด๋ฆฌ๊ฐ ํธ๋ฆฌํ ์ ํ์ ์ฐพ์ผ์๋ ๋ถ | |
3. ๊ณฐํก์ด ๊ฑฑ์ ์์ด ์ฌ์ฉํ ์ ์๋ ์๊ธฐ๊ฑด์กฐ๋๊ฐ ํ์ํ์ ๋ถ | |
4. ์ ๋ ์๊ฐ์๋ ์กฐ์ฉํ๊ฒ ์ฒญ์๊ธฐ๋ฅผ ๋๋ฆฌ๊ณ ์ถ์ ๋ง๋ฒ์ด ๋ถ๋ถ์๊ฒ ์ถ์ฒ | |
5. ์ค๋งํธํ ๋งตํ ๊ธฐ๋ฅ์ผ๋ก ํจ์จ์ ์ธ ์ฒญ์๋ฅผ ํ๊ณ ์ถ์ ๋ถ | |
""", | |
"4๏ธโฃ์ด๋ฐ๊ฒ ์์ธ์?": """[์ค์ ํ๋กฌํํธ] | |
1. ๋ฐ๋์ ํ๊ตญ์ด๋ก ์ถ๋ ฅํ๋ผ. | |
2. ๋๋ ์ธํฐ๋ท ๊ธฐ์ฌ์ ์์ฝํ๊ณ ์ ๋ฆฌํ๋ ์ธ๋ก ์ฌ ํธ์ง์ฅ์ด๋ค. | |
3. ๋ฐ๋์ ์ ๊ณต๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ๊ณตํฌ๋ง์ผํ ์นดํผ๋ผ์ดํ ์ ์์ฑํ๋ผ. | |
4. ๋ฐ๋์ ๋ํ๋ฏผ๊ตญ(ํ๊ตญ)์์ ์ฌ์ฉํ๋ ์ธ์ด์ ํํ์ผ๋ก ์์ฑํ๋ผ. | |
[์ถ๋ ฅํ์] | |
1. ๊ฐ ์นดํผ๋น 30์ ๋ด์ธ๋ก 30๊ฐ ์์ฑํ๋ผ. | |
2. ๋ฐ๋์ 10๊ฐ ์ด์์ ๊ตฌ์ฒด์ ์์น๋ฅผ ํฌํจํ๋ผ. | |
3. ๊ณตํฌ ๋ง์ผํ (Fear marketing)์ ํ๊ธฐ ์ํ ํค๋์นดํผ๋ฅผ ์์ฑํ๋ผ. | |
4. [๊ณตํฌ๋ง์ผํ ๋ฐฉ๋ฒ], [๊ณตํฌ๋ง์ผํ ํ์ฉ์ฌ๋ก]๋ฅผ ์ฐธ๊ณ ํ์ฌ ํค๋์นดํผ๋ฅผ ์์ฑํ๋ผ. | |
5. ์ง๋ณ์ ๋ฐ, ์ฆ์, ์ํ์์, ์์ ์์๋ฑ์ ์์น๋ฅผ ๋ฃ์ด์ ์ฃผ์๊ฐ ํ์ํ๋ค๋๊ฒ์ ๋์ฑ ๊ฐ์กฐํ์ฌ ํค๋์นดํผ๋ฅผ ์์ฑํ๋ผ. | |
6. ์นดํผ์ธ์ ๋ค๋ฅธ ๋ง์ ์ถ๋ ฅํ์ง ๋ง๋ผ. | |
7. ๋งจ ์์ ์๋ฒ์ ํ์ํ๋ผ. | |
8. ์ถ๋ ฅ ์ ์ธ ์กฐ๊ฑด์ ํด๋น๋๋ ๋ฌธ์ฅ์ ์ถ๋ ฅํ์ง ๋ง ๊ฒ. | |
[์ถ๋ ฅ ์ ์ธ ์กฐ๊ฑด ์์] | |
1. ๊ธ์ ์ ์ธ ๋์์ค(nuance)์ ๋ฌธ์ฅ | |
2. ์์ : "99% ์ธ๊ท ์ ๊ฑฐ"๋ก ์์ฌ ์ธ์ฐจํ์ธ์! | |
3. ์์ : "์ธ๊ท ์ ์จ์" ์ธ์ฐจ์ฅ, ๊ฐํธ ์ธ์ฐจ๋ก ์๋ฐฉํ์ธ์! | |
[์ถ๋ ฅ ์ ์ธ ์กฐ๊ฑด ๋] | |
[๊ณตํฌ๋ง์ผํ ๋ฐฉ๋ฒ] | |
1๋จ๊ณ : ๊ณ ๊ฐ์ด ํ์ฌ ์ํ์ ๋ ธ์ถ๋์ด ์์์ ์๋ฆฐ๋ค. | |
2๋จ๊ณ : ๊ณ ๊ฐ์ด ํ์ฌ ๋ ธ์ถ๋ ์ํ์ผ๋ก๋ถํฐ ๋ฒ์ด๋๋ ค๋ฉด ํ๋์ ์ทจํด์ผ ํ๋ค๋ ์ ์ ์๋ฆฐ๋ค. | |
3๋จ๊ณ : ๊ณ ๊ฐ์ ์ํ์ผ๋ก๋ถํฐ ๋ณดํธํด ์ค ๊ตฌ์ฒด์ ์ธ ํ๋์ ์๋ ค์ค๋ค. | |
4๋จ๊ณ : ๊ณ ๊ฐ์ด ์ด๋ฌํ ๊ตฌ์ฒด์ ์ธ ํ๋์ ํ ์ ์๋๋ก ์๊ทนํ๋ค. | |
[๊ณตํฌ๋ง์ผํ ํ์ฉ์ฌ๋ก] | |
1. ์ฌ์ฑ์ฉ ๋ฉด๋๊ธฐ : ์ฌ์ฑ์ ๋ ธ์ถ์ด ๋ง์์ง๋ ํจ์ ์ด ์ ํํ๋ฉด์ ๊ฒจ๋๋์ด ํธ์ ์ ๋ชจํ๋ ํ๋ฆ์ด ์๊ฒจ๋ฌ๊ณ , ์ง๋ ํธ๋ ์ด ๊ธฐํ๋ฅผ ๋ ธ๋ ค ๊ฒจ๋๋์ด ํธ๊ณผ ๋ถ์พ๊ฐ์ ์ฐ๊ฒฐํ์์ต๋๋ค. | |
๊ฒจ๋๋์ด ํธ์ ๋จ์๊ฒ ๋ณด์ด๋ ๊ฒ์ ๋น๋งค๋์ด๊ฑฐ๋ ๊ฒ์ผ๋ฅธ ๊ฒ์ฒ๋ผ ๊ณตํฌ ๋ง์ผํ ์ ์งํํ์๊ณ ์ด๋ฅผ ํตํด์ ์ฌ์ฑ์ฉ ๋ฉด๋๊ธฐ ๋ฐ ์ ๋ชจ ์ํ์ ๋งค์ถ์ด ํฌ๊ฒ ์ฆ๊ฐํ์์ต๋๋ค. | |
2. ํ๋ชจ์ดํธ : ํ๋ชจ์ดํธ๋ฅผ ๋ง์ผํ ํ ๋ ๊ทธ ์ ํ์ ํจ๋ฅ๊ณผ ํจ๊ณผ๋ฅผ ๋์ฑ ์ดํํ๊ธฐ๋ณด๋ค๋ ์ฌ์ฉํ์ง ์์์ ๋ ์๊ธฐ๋ ๋ถ์ด์ต์ ์ธ๊ธํจ์ผ๋ก์จ ์ฐ๋ฆฌ์ ๊ณตํฌ์ฌ์ ์๊ทนํฉ๋๋ค. | |
'์ด ์ดํธ๋ ~ํ ์ฑ๋ถ์ด ๋ค์ด์์ต๋๋ค.'๋ณด๋ค๋ '์ด ์ดํธ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฐฉ์นํ๋ค๋ฉด ์น๊ตฌ๋ค์ ๋นํด 10๋ ์ ๋์ด ๋ค์ด ๋ณด์ผ ์ ์์ต๋๋ค.'์ฒ๋ผ ์ ํ์ ์ฌ์ฉํ์ง ์์์ ๋ ๋ฐ์ํ ์ ์๋ ๋ถ์ด์ต์ ๊ฐ์กฐํ์ฌ ์ฌ๋๋ค์ ๋ฐ์์ ์ด๋์ด ๋ ๋๋ค. | |
3. ๊ตฌ๊ฐ์ฒญ๊ฒฐ์ : ๊ตฌ๊ฐ์ฒญ๊ฒฐ์ ๋ ๊ธฐ์กด์ ์๋ ์๋ก์ด ์ํ์์๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ดํํ ์ฌ๋ก์ ํด๋นํฉ๋๋ค. | |
๋ฏธ๊ตญ์ ๋ํ์ ์ธ ๊ตฌ๊ฐ์ฒญ๊ฒฐ์ ์ธ ๋ฆฌ์คํ ๋ฆฐ์ ์ฒ์ ์ถ์๋์์ ๋ ๊ด๊ณ ๋ฅผ ํตํด ์ฌ๋๋ค ์ฌ์ด์์ ์ ๋์๋ก ์ธํ์ฌ ๋์ธ๊ด๊ณ๊ฐ ์ ํ๋๋ ๋ชจ์ต์ ์ง์์ ์ผ๋ก ๋ณด์ฌ์ฃผ์์ต๋๋ค. | |
๊ทธ๋ฆฌ๊ณ ์ง๋ ํ ์ ๋์๋ก ์ธํด์ ์ฌ๋๋ค์ด ์์ ์ ๋์๊ฒ ํ๊ฐํ ์ ์๋ค๋ ๋๋ ค์์ ํ๊ณ ๋ค์ด ๋ง์ผํ ์ ์ฑ๊ณตํ ์ ์์์ต๋๋ค. | |
[์์] | |
1. ๊ฐ์ต๊ธฐ 2์ผ๋ง ๊ด๋ฆฌํ์ง ์์๋ "์ธ๊ท ๋ฒ๋ฒ " | |
2. ๋ฐ๋ค ํ๊ฒฝ์ค์ผ, ์ํ์ผ๋ก ๋๋์์จ๋ค. ํ๋ผ์คํฑ ์ฌ์ฉ ์ด๋๋ก ๊ด์ฐฎ์๊ฐ์? | |
3. "๋งฅ์ฃผ ํ์์ด๋ผ๋ ๋ ๋ง๋ค ์ ์ด ๋ก๊ธด๋ค๋ฉด? ์ด๊ฒ ์์ฌํด์ผ" | |
4. ํ๋ฃจ์ ๋ฐฅ ํ ๊ณต๊ธฐ๋ง ์ค์ฌ๋ ์ค๋ ์ฐ๋ค๋ ์ฐ๊ตฌ๊ฒฐ๊ณผ๋ ์๊ณ , ์์ธ๋๋ณ์ ์์ผํฐ์ ์์๋ฐฉ 10๊ณ๋ช ์ค์๋ '์ ์ ํ ์ฒด์ค๊ด๋ฆฌ'๊ฐ ํฌํจ๋์ด ์๋ค. | |
5. 5์ด ์์ด์ ๋์ ์์ธ์ ์ ๊ฐ ๋ค์ด๊ฐ ๊ฐ๋ง์ด ๋ฒ๊ฒจ์ง๋ ์ฌ๊ณ | |
6. "์ค์ผ์ ์์ ๋ค์์ฃ ? ์๋ณดํ ๋ค์ด๋์ธ์" | |
7. ์ฃผ๋ฐฉ ์ธ๊ท , "2๋ฐฐ" ๋น ๋ฅธ ์๋๋ก ์ฆ์! ์ฐ๋ฆฌ ์ง์ ์์ ์ง๋? | |
8. "200๋ฐฐ" ๊ฐํ ์ธ๊ท , ์ฐ๋ฆฌ ์ง ์๊ธฐ๊ฑด์กฐ๋์? | |
""", | |
"5๏ธโฃ์ด ์ํ ์ฌ์ฉํ ์ด๋ ๊ฒ ๋ฌ๋ผ์ก์ด์": """[์ค์ ํ๋กฌํํธ] | |
1. ๋ฐ๋์ ํ๊ตญ์ด๋ก ์ถ๋ ฅํ๋ผ. | |
2. ๋น์ ์ ์ ํ์ ๊ตฌ๋งคํ๊ณ ์ค์ ๋ก ์ฌ์ฉํ ํ ๋๋ฌด ๋ง์กฑํ ๊ณ ๊ฐ์ด๋ค. | |
3. ์ถ๋ ฅ ๋๋ ๋ชจ๋ ๋ด์ฉ์ USP(Unique Selling Proposition)๊ด์ ์ผ๋ก ์์ฑํ๋ผ. | |
4. "์ด ์ ํ์ ์ฌ์ฉ ํ ๋ง์กฑํ๋ ๋ถ๋ถ์ ํํํ๊ณ , ์ค์ํ์ด ์ผ๋ง๋, ์ด๋ป๊ฒ ๋ณํ๋์ง"๋ฅผ ์์ฑํ๋ผ. | |
5. ๋ณํ๋ ํฌ์ธํธ๋ฅผ ๊ฐ์กฐํ์ฌ ์์ฑํ๋ผ. | |
6. ์ ๊ณต๋ ์ค์ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ์์ ์ฅ์ (์ข์ ์ )์ ๋ฐ์ํ์ฌ ์์ฑํ๋ผ. | |
[์ถ๋ ฅ์กฐ๊ฑด] | |
1. ๋ชจ๋ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋ฐ๋์ ์ฌ์ค(๋ฐ์ดํฐ๊ธฐ๋ฐ)์ด์ด์ผ ํ๋ค. | |
2. ๊ฐ ํ๊ธฐ๋ณ ํ์ค ์ ๋ชฉ์ ๋จผ์ ์์ฑํ๊ณ ๊ทธ ์๋์ ์ธํฐ๋ทฐ ๋ต๋ณ ํํ์ ํ๊ธฐ๋ฅผ ์์ฑํ๋ผ. | |
3. ์ธํฐ๋ทฐ ์ ๋ชฉ์๋ง ์ ์ ํ๊ณ ์ด๋ชจ์ง๋ฅผ ์ฌ์ฉํ๋ผ(์ด๋ชจ์ง๊ฐ ์ค๋ณต๋์ง ์๋๋ก ํ๋ผ) | |
- ์ธํฐ๋ทฐ ๋ต๋ณ ๋ด์ฉ์๋ ์ด๋ชจ์ง๋ฅผ ์ฌ์ฉํ์ง ๋ง ๊ฒ. | |
4. '#', '##'์ ์ถ๋ ฅํ์ง ๋ง๊ฒ. | |
5. ๋ฐ๋์ํ๊ตญ์ด(ํ๊ธ)๋ก ์ถ๋ ฅํ๋ผ. | |
6. ์ค๊ตญ์ด(ํ์), ์ผ๋ณธ์ด(ํ๋ผ๊ฐ๋)๋ ์ ์ธํ๋ผ. | |
[์ถ๋ ฅํ์] | |
1. ์์ํ๊ณ ๊ธ์ ์ ์ธ ์ธํฐ๋ทฐ ๋ต๋ณ ํํ์ ํ๊ธฐ๋ฅผ ์์ฑํ๋ผ. | |
- ์ง๋ฌธ์ ์ถ๋ ฅํ์ง ๋ง๋ผ. | |
2. "๐ค ๊ฐ์ฑ์ ์ธ ๊ด์ ์ ์ธํฐ๋ทฐ" ํ๊ธฐ 5๊ฐ ์์ฑํ๋ผ. | |
3. "๐ค ๊ธฐ๋ฅ์ ์ธ ๊ด์ ์ ์ธํฐ๋ทฐ" ํ๊ธฐ 5๊ฐ ์์ฑํ๋ผ. | |
4. "๐ค ํ์ผ ๋ง์ถค ์ธํฐ๋ทฐ" ํ๊ธฐ 5๊ฐ ์์ฑํ๋ผ. | |
- ์ ๊ณต๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด ์ ํ์ ๊ฐ์ฅ ์ ํฉํ ํ๊ฒ์ ์์ธกํ์ฌ ๊ทธ์ ๋ง๋ ์ธํฐ๋ทฐ ํ๊ธฐ๋ฅผ 5๊ฐ ์์ฑํ๋ผ. | |
""", | |
"6๏ธโฃ์ํ ์ค๋ช ": """[์ค์ ํ๋กฌํํธ] | |
1. ๋ฐ๋์ ํ๊ตญ์ด๋ก ์ถ๋ ฅํ๋ผ. | |
2. ๋๋ ๊ณ ์ก๋งค์ถ์ ์จ๋ผ์ธ ํ๋งค์์ด๋ฉฐ ์ ๋ช ํ ๋ง์ผํฐ์ด๋ค. | |
3. ์ํ์ ์จ๋ผ์ธ ํ๋งค๋ฅผ ์ด์ง์ํค๊ธฐ ์ํด ์์ธํ์ด์ง๋ฅผ ์ ์ํ๋ค. | |
4. ๊ณ ๊ฐ์ด ์ด๋ค ์ ํ์ ๊ตฌ๋งคํ ์ง ๊ณ ๋ฏผํ ๋ ๊ณ ๋ฏผํ๋ ํญ๋ชฉ์ ์ง๋ฌธ์ผ๋ก ์ญ์ ์ ํ๋ ๋ฐฉ์์ด๋ค. | |
5. 10๊ฐ์ฉ 2๊ฐ ์ฃผ์ , ์ด 20๊ฐ์ ๋ต๋ณ ์ด์ธ์๋ ๋ค๋ฅธ ๋ต๋ณ์ ํ์ง ๋ง ๊ฒ. | |
[์ถ๋ ฅ์กฐ๊ฑด] | |
1. ์ค๊ตญ์ด(ํ์), ์ผ๋ณธ์ด๋ ์ ์ธํ๋ผ. | |
2. [์ ํ์ ์ ํํ์ค ๋ ์ด๋คํญ๋ชฉ์ ์ฒดํฌํ์๋์?]๊ณผ [์ด๋ค ์ ํ์ ๊ตฌ์ ํ๊ณ ์ถ์ผ์ธ์?]์ ์ฃผ์ ๋ก ์์ฑํ๋ผ. | |
3. ๋ฐ๋์ ์ ๊ณต๋ ๋ฐ์ดํฐ์ ๋ด์ฉ๋ง ๋ฐ์ํ๋ผ. | |
4. ์ด์ ์ ๊ฐ์กฐํ๊ณ , ์ค์ ๊ฒฝํ์ ๊ณต์ ํ๋๋ก ์์ฑํ๋ผ. | |
[์ ํ์ ์ ํํ์ค ๋ ์ด๋คํญ๋ชฉ์ ์ฒดํฌํ์๋์?] | |
1. ๋ฐ๋์ ๋ง์ง๋ง ๋ฌธ์ฅ์ "์ฃผ๋์?", "ํ๋์?", "์๋์?", "์๋์"๋ก ๋๋ด๋ผ | |
2. 20~35์๋ก 10๊ฐ๋ฅผ ์์ฑํ๋ผ. | |
3. ์๋ฒ์ ์์ฑํ๋ผ. | |
4. ์ ๋ ฅ๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๊ธฐ๋ฅ์ ํฌ์ธํธ๋ฅผ ๊ฐ์กฐํ๋ผ. | |
5. ๋ง์ผํ ํฌ์ธํธ๋ฅผ ๋ฐ์ํ๋ผ. | |
6. ์ ํ์ ์ฐจ๋ณ์ ์ ๋ฐ์ํ๋ผ. | |
[์์] | |
- ์ธ์ฒ๊ด๋ฆฌ๊ฐ ํธํ๋์? | |
- 3์ผ ์ด์ ์ฌ์ฉ๊ฐ๋ฅํ๊ฐ์? | |
- ๊ตญ๋ด์ ์์ธ๊ฐ์? | |
- ํ์ฌ๋ก๋ถํฐ ์์ ํ๊ฐ์? | |
- ์ ํด์ฑ๋ถ ์์ด ์์ ํ๊ฐ์? | |
- ์์ ๋ฟ์๋ ์์ ํ๊ฐ์? | |
- ์๊ธฐ๊ฐ ์๋ ๊ณณ์์๋ ๊ด์ฐฎ๋์? | |
[์ด๋ค ์ ํ์ ๊ตฌ์ ํ๊ณ ์ถ์ผ์ธ์?] | |
1. ๋ฐ๋์ ๋ง์ง๋ง ๋ฌธ์ฅ์ "์ข๊ฒ ์ด์", "ํ์ํด์", "์ธ๊ฑฐ์", "์ํด์","์ถ์ด์","์ฐพ์์"๋ก ๋๋ด๋ผ | |
2. 20~35์๋ก 10๊ฐ๋ฅผ ์์ฑํ๋ผ. | |
3. ์๋ฒ์ ์์ฑํ๋ผ. | |
4. ์ ๋ ฅ๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๊ธฐ๋ฅ์ ํฌ์ธํธ๋ฅผ ๊ฐ์กฐํ๋ผ. | |
5. ๋ง์ผํ ํฌ์ธํธ๋ฅผ ๋ฐ์ํ๋ผ. | |
6. ์ ํ์ ์ฐจ๋ณ์ ์ ๋ฐ์ํ๋ผ. | |
[์์] | |
- ํ๋ฒ ์ธ์ฐฉํ๋ ค๋ฉด ํ์ด๋๋๋ฐ ์ธ์ฒ์ด ํธํ์ผ๋ฉด ์ข๊ฒ ์ด์ | |
- ์์์ด ํฌ์ง ์์์ผ๋ฉด ์ข๊ฒ ์ด์ | |
- ๋ถ๋ฌด๋์ด ์กฐ์ ๋์์ผ๋ฉด ์ข๊ฒ ์ด์ | |
- ๋ น์ด ์๊ธฐ์ง ์๊ณ ๋ฐ์๊ตฌ์ ์ผ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉด ์ข๊ฒ ์ด์ | |
- ๋ชจ๊ธฐ ๋ฐ ํด์ถฉ์ ๋น ๋ฅด๊ฒ ํด์นํ๋ฉด ์ข๊ฒ ์ด์ | |
- 360๋ ์ ๋ฐฉํฅ ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์ ํ์ ์ฐพ์ | |
- ๋์์ธ๋ ์์๊ณ ์ฑ๋ฅ๋ ์ข์ ์ ํ์ด ํ์ํด์ | |
""", | |
"7๏ธโฃ์ํ ์ค๋ช [์์ธํ]": """[์ค์ ํ๋กฌํํธ] | |
1. ๋ฐ๋์ ํ๊ตญ์ด๋ก ์ถ๋ ฅํ๋ผ. | |
2. ๋๋ ๊ณ ์ก๋งค์ถ์ ์จ๋ผ์ธ ํ๋งค์์ด๋ฉฐ ์ ๋ช ํ ๋ง์ผํฐ์ด๋ค. | |
3. ์ถ๋ ฅ ๋๋ ๋ชจ๋ ๋ด์ฉ์ USP(Unique Selling Proposition)๊ด์ ์ผ๋ก ์์ฑํ๋ผ. | |
4. ์ฐจ๋ณํ ์ํฌ ์ ์๋ ์ฐธ์ ํ๊ณ ํญ๋ฐ์ ์ด๋ฉฐ, ๋งคํน์ ์ด๊ฒ ์ ๋ ฅ๋ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ ์์ฑํ๋ผ. | |
5. ์ถ๋ ฅ๋๋ ์ธ์ด์ ํํ์ ๋ํ๋ฏผ๊ตญ(ํ๊ตญ)์์ ์ฌ์ฉ๋๋ ๋๋์ผ๋ก ์์ฑํ๋ผ. | |
[์ถ๋ ฅ์กฐ๊ฑด] | |
1. ์๋ง์กด๋ท์ปด์์ ๊ณ ๊ฐ์ด hook๋ ์ ์๋๋ก ๋งค์ฐ ๊ฐํ ์นดํผ๋ผ์ดํ ์ 10๊ฐ๋ฅผ ์์ฑํ๋ผ. | |
2. ๋ฉ์ธ์นดํผ(30์ ๋ด์ธ), ์๋ธ์นดํผ(100์ ๋ด์ธ)๋ก ์์ฑํ๋ผ. | |
3. '๋ฉ์ธ์นดํผ', '์๋ธ์นดํผ' ๋จ์ด๋ ์ ์ธํ๋ผ. | |
4. ์ค๊ตญ์ด(ํ์), ์ผ๋ณธ์ด(ํ๋ผ๊ฐ๋, ๊ฐํ์นด๋)๋ ์ ์ธํ๋ผ. | |
5. '#', '##'์ ์ ์ธํ๋ผ. | |
[์ถ๋ ฅ์์] | |
1. ํ๋ก์ฒญ์๋ฌ์ ๋น๋ฒ, ๋๋ฆฌ๋ฏธ! | |
- ๋ง๋ฒ์ด ๋ถ๋ถ์ ์ฃผ๋ถ์ ๊ณ ๋ฏผ์ ํด๊ฒฐํด์ฃผ๋ ๋๋ฆฌ๋ฏธ! ํ๋ก์ฒญ์๋ฌ์ ๋น๋ฒ์ ๊ณต๊ฐํฉ๋๋ค! | |
2. ๋๋ฆฌ๋ฏธ๋ก ๋์ถฉ ์ฒญ์ํ ๋์! | |
- ๋์ถฉ ์ฒญ์ํด๋ ๋จผ์ง, ๋ฌผ๊ฑธ๋ , ๊ฑด์กฐ๊ฐ ์๋ฒฝ! ์ฒญ์ํ๋ ์ฒ, ๊ทธ๋ด์ธํ๊ฒ! | |
3. ๋ก๊ธด์ด ์ ๋ฌผํ๋ ํธ๋ฆฌํ ์ฃผ๋ฐฉ ๋ผ์ดํ | |
- ๋ง๋ฒ์ด ๋ถ๋ถ์ ์ฃผ๋ถ๋๋ค์ ๊ณ ๋ฏผ์ ํด๊ฒฐํด๋๋ฆฝ๋๋ค! ๋ก๊ธด ์๊ธฐ๊ฑด์กฐ๋๋ ๋์ฉ๋ ์๋ฉ์ ๋ฌผ๋ก , ๋ฌผ๋ฐ์ด ํธํ๊ณผ ํธ๋ฆฌํ ๋ฌผ๋น ์ง ๊ธฐ๋ฅ์ผ๋ก ์ค๊ฑฐ์ง ํ ๊ฑด์กฐ๊น์ง ํ ๋ฒ์ ํธ๋ฆฌํ๊ฒ! ์ด์ ๋ก๊ธด๊ณผ ํจ๊ป ํธ๋ฆฌํ ์ฃผ๋ฐฉ ๋ผ์ดํ๋ฅผ ์ฆ๊ธฐ์ธ์! | |
""", | |
"8๏ธโฃ๊ณ ๊ฐ์ ์์ํ ํ๊ธฐ": """[์ค์ ํ๋กฌํํธ] | |
1. ๋ฐ๋์ ํ๊ตญ์ด๋ก ์ถ๋ ฅํ๋ผ. | |
2. ๋๋ ์ ๋ช ํ ์จ๋ผ์ธ ์ฝํ ์ธ ๋ง์ผํ ๋ํ์ฌ๋ฅผ ์ด์ํ๋ ๋ํ์ด์ ๋ง์ผํฐ๋ค. | |
3. ๋ง์ผํ ์ ๋์์ด ๋๋, ๊ณ ๊ฐ์ด ํ์๋ก ํ๋ ๊ธฐ๋ฅ์ ์ค์ฌ์ผ๋ก ์ ํํ๊ธฐ๋ฅผ ์์ฑํ๋ผ. | |
4. ๊ณ ๊ฐ ํ๊ธฐ๋ ์ง์ง ๊ณ ๊ฐ์ด ์ฌ์ฉํ๋ ๋๋์ด ๋ค ์ ์๋๋ก ์์ฑํ๊ณ , | |
์ธ์์ ์ธ ๋๋์ด ๋์ง ์๊ณ ๋ฐ๋ณต์ ์ธ ๋จ์ด๊ฐ ์๋๋กํ๋ฉฐ, | |
์์งํ๊ณ ์ค๊ฐ๋๊ฒ ํ๊ตญ์ธ์ด ์์ฑํ ๊ฒ์ฒ๋ผ ์์ฐ์ค๋ฌ์ด ์ธํฐ๋ท ์ปค๋ฎค๋ํฐ์์ ์ฌ์ฉํ๋ ๋ฌธ์ฅ์ผ๋ก ํํํ๋ผ. | |
5. ๊ธฐ๋ฅ์ ๋๋ฌด ์์ธํ๊ฒ ์ค๋ช ํ์ง ๋ง๊ณ , ์ด๋ฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ์ด๋ฐ ๋ถ๋ถ์ด ์ข์๋ค(๋ง์กฑ)์ ๋๋์ผ๋ก ์์ฑํด์ผํ๋ค. | |
6. ์ ๋ ฅ๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ฐธ๊ณ ํ์ฌ[50~100์] ๋ด์ธ๋ก 10๊ฐ์ ํ๊ธฐ๋ฅผ ์์ฑํ๋ผ. | |
7. ๋์ ์๊ฐ๋ ํ์ง ๋ง ๊ฒ. | |
[์ถ๋ ฅํ์] | |
1. ๋ฐ๋์ ์ ๊ณต๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ์ ํ๊ตญ์ด ํํ ํํ๋ฅผ ๋ฐ์ํ๋ผ. | |
2. ๋ฐ๋์ ์ ๊ณต๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ์ ์ค์ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์ํ๋ผ. | |
3. ํ๋งค์๊ฐ ์๋ ์ค์ ๊ตฌ๋งคํ์ฌ ์ฌ์ฉํ ์ฌ์ฉ์์ ์ ์ฅ์์ ์์ฑํ๋ผ. | |
4. ํ๋งค์๊ฐ ํ๋ณดํ๋ ํํ๊ฐ ์๋ ์ฌ์ฉ์๊ฐ ๋ง์กฑํ ํํ๋ก ์์ฑํ๋ผ. | |
5. ์์ QnA๋ฅผ ๋ฐ์ํ์ฌ ์ถ๋ ฅํ๋ผ.(๋ฐ๋์ ์ ๊ณต๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ์ ๋ด์ฉ์ผ๋ก๋ง ์์ฑํ๋ผ) | |
6. ์ฌ์ฉ์ ๊ณผ ์ฌ์ฉํ์ ํฌ์ธํธ๋ฅผ ๊ฐ์กฐํ๋ผ. | |
7. ์ ์ ํ ์ด๋ชจ์ง๋ฅผ ์ ๋ชฉ ๊ฐ์ฅ ์์ ์ถ๋ ฅํ๋ผ. | |
[์ถ๋ ฅ์์] | |
๐จโ๐ฉโ๐งโ๐ฆ ์์ด ์๋ ์ง ํ์ํ ! ์ฒญ์๊ฐ ์ฆ๊ฑฐ์! | |
- ์์ด๋ฅผ ํค์ฐ๋ค ๋ณด๋ ์ฒญ๊ฒฐ์ ๋ ์ ๊ฒฝ์ ์ฐ๊ฒ ๋์๋๋ฐ, ๋๋ฆฌ๋ฏธ L10s pro๋ฅผ ๋ง๋๊ณ ์ฒญ์๊ฐ ์ฆ๊ฑฐ์์ก์ด์. ๋ฌผ๊ฑธ๋ ์ ์ง๊ณต์ฒญ์๊ฐ ๋์์ ๋๋ ๋ฐ๋ฅ์ด ๋ ๊นจ๋ํ๊ณ , ํนํ ๋ชจ์๋ฆฌ๋ ๊ตฌ์๊น์ง ๊ผผ๊ผผํ๊ฒ ์ฒญ์ํด์ค์ ๋ง์กฑ์ค๋ฌ์์. ๋งตํ ๊ธฐ๋ฅ์ผ๋ก ์ฒญ์ํ ๊ณต๊ฐ์ ์ง์ ํ ์๋ ์๊ณ , ๋ฌผ๊ฑธ๋ ์ ์ง๊ณต์ฒญ์ ๋ชจ๋๋ฅผ ๋ฐ๋ก ์ค์ ํ ์๋ ์์ด์ ๋๋ฌด ํธ๋ฆฌํด์. ์์ด ์๋ ์ง์ ๊ผญ ์ถ์ฒํ๊ณ ์ถ์ด์! | |
๐ ๋ณต์ธต ๊ตฌ์กฐ๋ ๋ฌธ์ ์์ด์! ์ฒญ์๊ฐ ์ฌ์์ก์ด์! | |
- ๋ณต์ธต ๊ตฌ์กฐ์ ์ง์์ ์ฌ์ฉํ๊ธฐ ์ํด ๋๋ฆฌ๋ฏธ L10s pro๋ฅผ ๊ตฌ๋งคํ์ด์. ์ธต๋ณ ์ง๋ ์์ฑ์ ๋ฌผ๋ก , ๊ฐ์๋ฒฝ ์ค์ ๊น์ง ๊ฐ๋ฅํด์ ์ฐ๋ฆฌ ์ง ๊ตฌ์กฐ๋ฅผ ์๋ฒฝํ๊ฒ ํ์ ํ๋๋ ๊ตฌ์๊ตฌ์ ์ฒญ์๋ฅผ ๊ผผ๊ผผํ๊ฒ ํด์ค์. ํนํ, ๋ฌผ๊ฑธ๋ ๊ฐ ๋ง๋ผ๋ถ์ ์๊ตญ๊น์ง ๊นจ๋ํ๊ฒ ๋ฆ์๋ด์ ํญ์ ๋ฐ๋ฅ์ด ๊น๋ํด์. ๋ณต์ธต ๊ตฌ์กฐ์ ์ง์๋ ์์ฑ๋ง์ถค์ธ ์ฒญ์๊ธฐ์์! | |
""" | |
} | |
# ์ค์ ๊ฐ ๋์ ๋๋ฆฌ (๊ฐ ํ๋กฌํํธ์ ๋ํ API ํธ์ถ ์ค์ ) | |
settings = { | |
label: { | |
"system_message": prompts[label], | |
"max_tokens": 4000, | |
"temperature": 0.8, | |
"top_p": 0.95 | |
} for label in prompts | |
} | |
# Gradio ์ธํฐํ์ด์ค ๊ตฌ์ฑ | |
with gr.Blocks() as demo: | |
with gr.Row(): | |
gr.Markdown("# ์ํ์์ธํ์ด์ง ๊ธฐํ๋ฌธ๊ตฌ ์์ฑ๊ธฐ") | |
with gr.Row(): | |
# ์ผ์ชฝ ์ปฌ๋ผ: ์ ๋ ฅ ์์ญ | |
with gr.Column(scale=6): | |
gr.Markdown("## ์ ๋ ฅ") | |
gr.Markdown("#### 1๋จ๊ณ: ๋ํํ์ ์ํ์ ์ ์ด์ฃผ์ธ์ (์์ธํ ์์ฑํด์ฃผ์ธ์)") | |
gr.Markdown('<p style="color:gray">[์์: ๊ฐ์ต๊ธฐ(X) / ์ด์ํ ๊ฐ์ต๊ธฐ(O)]</p>') | |
product_input = gr.Textbox(placeholder="์ด์ํ ๊ฐ์ต๊ธฐ", show_label=False) | |
gr.Markdown("<br>") | |
gr.Markdown("#### 2๋จ๊ณ: ๋ถ์ ๋์์ค๋ฅผ ์ ํด์ฃผ์ธ์ [์๋ ์์ ์ฐธ์กฐ]") | |
gr.Markdown('<p style="color:gray">[์ค๋ช : ์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ฅ ์ค์ฌ์ผ๋ก ๋ถ์๋ฉ๋๋ค.]</p>') | |
nuance_options = gr.Dropdown( | |
choices=["์์ ๋ฅผ ์ ํํด๋ณด์ธ์", "๊ธฐ๋ฅ์ ์ค์ฌ ๋ถ์", "๋์์ธ ์ค์ฌ ๋ถ์", "๊ฐ์ฑ์ ์ค์ฌ ๋ถ์"], | |
value="์์ ๋ฅผ ์ ํํด๋ณด์ธ์", | |
show_label=False | |
) | |
gr.Markdown("<br>") | |
gr.Markdown("#### 3๋จ๊ณ: ๊ณ ๊ฐ์ ํ๊ฒ์ ์ ํด์ฃผ์ธ์ [์๋ ์์ ์ฐธ์กฐ]") | |
gr.Markdown('<p style="color:gray">[์ค๋ช : ์์ธํ ๊ณ ๊ฐํ๊ฒ ์ค์ ๋ ๊ฐ๋ฅํฉ๋๋ค.]</p>') | |
target_options = gr.Dropdown( | |
choices=["์์ ๋ฅผ ์ ํํด๋ณด์ธ์", "๋ํ์", "30,40๋ ์ง์ฅ์ธ", "์ฃผ๋ถ", "์ด๋ฆฐ์์ด์ ๊ฑด๊ฐ์ด ๊ฑฑ์ ๋๋ 40๋ ์ฃผ๋ถ"], | |
value="์์ ๋ฅผ ์ ํํด๋ณด์ธ์", | |
show_label=False | |
) | |
gr.Markdown("<br>") | |
gr.Markdown("#### 4๋จ๊ณ: ๋์ผํ ์ํ ๋๋ ๋น์ทํ ์ํ์ ๋ฆฌ๋ทฐ๋ฅผ 1~3๊ฐ ์ ๋๋ฅผ ๋ฃ์ด์ฃผ์ธ์") | |
gr.Markdown('<p style="color:gray">[์ค๋ช : ์ฟ ํก์ ๋ฆฌ๋ทฐ๋ฅผ ์ ๋ ฅํ๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.]</p>') | |
reviews_input = gr.Textbox(placeholder="๋ฆฌ๋ทฐ๋ฅผ ์ ๋ ฅํ์ธ์", lines=5, show_label=False) | |
gr.Markdown("<br>") | |
gr.Markdown("#### 5๋จ๊ณ: ์ํ์ ๊ธฐ๋ฅ ๋๋ ์คํ ๋๋ ์ฅ์ ์ ์์ธํ ์์ฑํด์ฃผ์ธ์") | |
gr.Markdown('<p style="color:gray">[์ค๋ช : ์์ธํ ๋ด์ฉ์ ์ ๋ ฅํ ์๋ก ๋ถ์์ด ์๋ฉ๋๋ค.]</p>') | |
features_input = gr.Textbox( | |
placeholder="์ํ์ ๊ธฐ๋ฅ, ์คํ, ์ฅ์ ์ ์ ๋ ฅํ์ธ์", | |
show_label=False, | |
) | |
gr.Markdown("<br>") | |
combined_output = gr.Textbox(label="๋ชจ๋ ์ ๋ ฅ๊ฐ", lines=8) | |
generate_button = gr.Button("์์ฑ") | |
analyze_all_button = gr.Button("์ ์ฒด๋ถ์") | |
reset_button = gr.Button("์ด๊ธฐํ") | |
progress_bar = gr.Progress() | |
# ์ค๋ฅธ์ชฝ ์ปฌ๋ผ: ์ถ๋ ฅ ์์ญ (๊ฐ ํ๋กฌํํธ๋ณ ํญ + ์ข ํฉ๊ฒฐ๊ณผ) | |
with gr.Column(scale=6): | |
gr.Markdown("## ์ถ๋ ฅ") | |
output_vars = {} | |
reanalyze_buttons = {} | |
for label in prompts.keys(): | |
with gr.Tab(label): | |
output = gr.Textbox(label=label, interactive=False, lines=12) | |
reanalyze_button = gr.Button("๊ฐ๋ณ ์ฌ๋ถ์") | |
output_vars[label] = output | |
reanalyze_buttons[label] = reanalyze_button | |
with gr.Tab("9๏ธโฃ์ข ํฉ๊ฒฐ๊ณผ"): | |
final_output = gr.Textbox(label="9๏ธโฃ์ข ํฉ๊ฒฐ๊ณผ", lines=20, interactive=False) | |
# ์ ๋ ฅ๊ฐ ๋ณ๊ฒฝ ์ ๊ฒฐํฉ ํ ์คํธ ์ ๋ฐ์ดํธ | |
def update_combined_output(product, nuance, target, features, reviews): | |
return generate_combined_output(product, nuance, target, features, reviews) | |
product_input.change( | |
update_combined_output, | |
inputs=[product_input, nuance_options, target_options, features_input, reviews_input], | |
outputs=combined_output | |
) | |
nuance_options.change( | |
update_combined_output, | |
inputs=[product_input, nuance_options, target_options, features_input, reviews_input], | |
outputs=combined_output | |
) | |
target_options.change( | |
update_combined_output, | |
inputs=[product_input, nuance_options, target_options, features_input, reviews_input], | |
outputs=combined_output | |
) | |
features_input.change( | |
update_combined_output, | |
inputs=[product_input, nuance_options, target_options, features_input, reviews_input], | |
outputs=combined_output | |
) | |
reviews_input.change( | |
update_combined_output, | |
inputs=[product_input, nuance_options, target_options, features_input, reviews_input], | |
outputs=combined_output | |
) | |
generate_button.click( | |
update_combined_output, | |
inputs=[product_input, nuance_options, target_options, features_input, reviews_input], | |
outputs=combined_output | |
) | |
# ์ ์ฒด ๋ถ์ ๋ฒํผ (๋ชจ๋ ํญ๋ชฉ ๋์์ ๋ถ์) | |
async def analyze_all_wrapper(combined_output): | |
try: | |
results = await analyze_all_async(combined_output, progress=progress_bar) | |
return [results.get(label, "๋ถ์ ์คํจ") for label in prompts.keys()] | |
except Exception as e: | |
print(f"์ ์ฒด ๋ถ์ ์ค ์ค๋ฅ ๋ฐ์: {str(e)}") | |
return ["๋ถ์ ์คํจ"] * len(prompts) | |
analyze_all_button.click( | |
fn=analyze_all_wrapper, | |
inputs=[combined_output], | |
outputs=[output_vars[label] for label in prompts.keys()] | |
) | |
# ๋ฆฌ์ ๋ฒํผ: ui_reset_all()๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ฐ์ดํธ | |
reset_button.click( | |
fn=ui_reset_all, | |
inputs=[], | |
outputs=[product_input, nuance_options, target_options, features_input, reviews_input, combined_output] + | |
[output for output in output_vars.values()] + [final_output] | |
) | |
# ์ข ํฉ ๊ฒฐ๊ณผ ์ ๋ฐ์ดํธ (๊ฐ ํญ๋ชฉ ๋ณ๊ฒฝ ์ ์ข ํฉ๊ฒฐ๊ณผ ํญ ์ ๋ฐ์ดํธ) | |
def update_final_output(*outputs): | |
final_output_text = "" | |
for label, output in zip(prompts.keys(), outputs): | |
final_output_text += f"{label}\n{output}\n\n" | |
return final_output_text | |
for output in output_vars.values(): | |
output.change( | |
fn=update_final_output, | |
inputs=list(output_vars.values()), | |
outputs=final_output | |
) | |
# ๊ฐ ํญ ๋ด "๊ฐ๋ณ ์ฌ๋ถ์" ๋ฒํผ์ ๋ํด ํด๋ฆญ ์ ํด๋น ํญ๋ชฉ๋ง ์ฌ๋ถ์ | |
for label, button in reanalyze_buttons.items(): | |
button.click( | |
fn=get_analyze_single_wrapper(label), | |
inputs=[combined_output], | |
outputs=output_vars[label] | |
) | |
if __name__ == "__main__": | |
demo.launch() | |