ginipick commited on
Commit
4b763b1
Β·
verified Β·
1 Parent(s): fa21362

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +72 -43
app.py CHANGED
@@ -318,48 +318,77 @@ def get_openai_client():
318
  # ───────────────── System Prompt (REPORT STYLE) ─────────────────
319
  def get_idea_system_prompt(selected_category: str | None = None) -> str:
320
  """
321
- Return an enhanced system prompt that forces:
322
- β–Έ Report-style output with tables
323
- β–Έ Clear focus on NEED β–Έ VALUE β–Έ PROBLEM SOLVED β–Έ IMPLEMENTATION SNAPSHOT
324
- β–Έ Three idea modes: Similarity-based, Contrarian, Random
325
- β–Έ If `selected_category` is given, all ideas must chiefly reference
326
- sub-items inside that category.
327
  """
328
- cat_clause = (f"\n**Category Focus**: Concentrate on the Korean list "
329
- f"under β€œ{selected_category}”. You *must* anchor every idea "
330
- "to 2-3 sub-items from this category and reference them by name.\n")
331
  prompt = f"""
332
- λ°˜λ“œμ‹œ ν•œκΈ€(ν•œκ΅­μ–΄)둜 λ‹΅λ³€ν•˜λΌ. You are an elite innovation consultant. Your deliverable is a concise **report** in Markdown.
333
-
334
- ### OUTPUT SPECIFICATION
335
- Produce **exactly three ideas** (Similarity-Based, Contrarian, Random) using these sections **for *each* idea**:
336
-
337
- | ν•­λͺ© | λ‚΄μš© |
338
- |---|---|
339
- | **Idea Title** | 8-12 Korean characters + 영문 κ΄„ν˜Έλ³„μΉ­ |
340
- | **Need / Pain-Point** | μ–΄λ–€ 문제·기회 λ•Œλ¬Έμ— ν•„μš”ν•œκ°€? (1-2 λ¬Έμž₯) |
341
- | **Core Concept** | 아이디어 κ°œμš” (2-3 문단) |
342
- | **Key Category Links** | μ‚¬μš©ν•œ λ³€ν™˜ μΉ΄ν…Œκ³ λ¦¬/ν•˜μœ„ν•­λͺ©(3개 μ΄ν•˜) |
343
- | **Value Proposition** | κΈ°λŒ€ νš¨κ³ΌΒ·κ°€μΉ˜ (뢈릿 3개) |
344
- | **Potential Obstacles** | μ£Όμš” λ¦¬μŠ€ν¬Β·μ œμ•½ (뢈릿 2-3개) |
345
- | **Image Prompt** | 영문 1μ€„λ‘œ μ‹œκ°ν™”λ₯Ό μœ„ν•œ ν”„λ‘¬ν”„νŠΈ |
346
-
347
- - ν¬ν•¨λœ ν‘œλŠ” λ§ˆν¬λ‹€μš΄ κ·ΈλŒ€λ‘œ 좜λ ₯.
348
- - μ„Έ 아이디어λ₯Ό β€œ## Idea 1”, β€œ## Idea 2”, β€œ## Idea 3” ν—€λ”©μœΌλ‘œ μˆœμ„œν™”.
349
- - μ „λ¬Έμš©μ–΄ μ΅œμ†Œν™”, κ°„κ²°ν•˜μ§€λ§Œ 섀득λ ₯ 있게.
350
-
351
- ### IDEA MODES
352
- 1. **Similarity-Based Augmentation** – κΈ°μ‘΄ μ£Όμ œμ™€ κ°€μž₯ κ°€κΉκ²Œ ν™•μž₯.
353
- 2. **Contrarian / Inverse** – 주제의 μ „μ œλ₯Ό λ’€μ§‘μ–΄ μƒˆλ‘œμš΄ μ‹œκ° μ œμ‹œ.
354
- 3. **Random Spark** – λ¬΄μž‘μœ„ ν•˜μœ„ν•­λͺ©(μΉ΄ν…Œκ³ λ¦¬ 뢈문)을 κ²°ν•©ν•œ μ˜μ™Έμ˜ 톡찰.
355
-
356
- {cat_clause if selected_category else ""}
357
- Always think step-by-step but **show only the final report**.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
358
  """
359
  return prompt.strip()
360
 
361
-
362
-
363
  # ──────────────────────────────── Brave Search API ────────────────────────
364
  @st.cache_data(ttl=3600)
365
  def brave_search(query: str, count: int = 20):
@@ -635,10 +664,11 @@ def idea_generator_app():
635
  sb.info("βœ… Web search results will be integrated.")
636
 
637
  # μ˜ˆμ‹œ μ£Όμ œλ“€ (μ›λž˜ μ˜ˆμ‹œ λΈ”λ‘œκ·Έ ν† ν”½ -> μ΄μ œλŠ” μ˜ˆμ‹œ 아이디어 주제둜 μ „ν™˜)
 
638
  example_topics = {
639
- "example1": "AI둜 μΈν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λͺ¨λΈ λ³€ν™”",
640
- "example2": "슀마트 μ†Œμž¬λ₯Ό ν™œμš©ν•œ μΉœν™˜κ²½ 건좕",
641
- "example3": "λ―Έλž˜ν˜• ꡐ윑 μ„œλΉ„μŠ€ ꡬ상"
642
  }
643
 
644
  sb.subheader("Category Focus (Optional)")
@@ -852,14 +882,13 @@ def process_input(prompt: str, uploaded_files):
852
  idea_sections[i+1].strip() if i+1 < len(idea_sections) else "")
853
  for i in range(1, len(idea_sections), 2)]
854
 
855
- # ❷ 이미지 ν”„λ‘¬ν”„νŠΈ μΆ”μΆœ – ν‘œ/콜둠/ν•˜μ΄ν”ˆ λͺ¨λ“  λ³€ν˜• 지원
856
  for title, text_block in pairs:
857
- # ν‘œ ν˜•νƒœ | Image Prompt | ... | (ꡡ게 ν‘œκΈ° 유/무)
858
  table_match = re.search(
859
  r"\|\s*(?:\*\*)?Image\s+Prompt(?:\*\*)?\s*\|\s*([^|\n]+)", # ← μˆ˜μ •
860
  text_block, flags=re.IGNORECASE)
861
 
862
- # ν…μŠ€νŠΈ ν˜•νƒœ Image Prompt : ... λ˜λŠ” Image Prompt - ...
863
  if not table_match:
864
  table_match = re.search(
865
  r"(?i)Image\s+Prompt\s*[:\-]\s*([^\n]+)", text_block)
 
318
  # ───────────────── System Prompt (REPORT STYLE) ─────────────────
319
  def get_idea_system_prompt(selected_category: str | None = None) -> str:
320
  """
321
+ μƒˆλ‘œμš΄ CCM(크둜슀 μΉ΄ν…Œκ³ λ¦¬ 맀트릭슀) 방법둠을 μ μš©ν•œ μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈ
 
 
 
 
 
322
  """
323
+ cat_clause = (f"\n**μΆ”κ°€ μ§€μΉ¨**: μ„ νƒλœ μΉ΄ν…Œκ³ λ¦¬ "{selected_category}"에 νŠΉλ³„ν•œ 주의λ₯Ό κΈ°μšΈμ΄μ‹­μ‹œμ˜€. "
324
+ f"이 μΉ΄ν…Œκ³ λ¦¬μ˜ ν•­λͺ©λ“€μ„ 2단계와 3단계 λͺ¨λ‘μ—μ„œ μš°μ„ μ μœΌλ‘œ κ³ λ €ν•˜μ‹­μ‹œμ˜€.\n") if selected_category else ""
325
+
326
  prompt = f"""
327
+ λ°˜λ“œμ‹œ ν•œκΈ€(ν•œκ΅­μ–΄)둜 λ‹΅λ³€ν•˜λΌ. 당신은 ν˜μ‹  μ»¨μ„€ν„΄νŠΈλ‘œμ„œ CCM(크둜슀 μΉ΄ν…Œκ³ λ¦¬ 맀트릭슀) 방법둠을 ν™œμš©ν•˜μ—¬ 창의적 아이디어λ₯Ό λ„μΆœν•©λ‹ˆλ‹€.
328
+
329
+ ### CCM 방법둠 ν”„λ‘œμ„ΈμŠ€
330
+ λ‹€μŒ 단계λ₯Ό 톡해 μ²΄κ³„μ μœΌλ‘œ 아이디어λ₯Ό λ„μΆœν•˜μ‹­μ‹œμ˜€:
331
+
332
+ 1. **문제 뢄석 및 지식 베이슀 ꡬ좕**
333
+ - μž…λ ₯된 ν”„λ‘¬ν”„νŠΈμ˜ μš”κ΅¬μ‚¬ν•­μ„ λͺ…ν™•νžˆ μ •μ˜ν•˜κ³  핡심 λ‹ˆμ¦ˆ μΆ”μΆœ
334
+ - 웹검색 κ²°κ³Όλ₯Ό λΆ„μ„ν•˜μ—¬ κ΄€λ ¨ νŠΈλ Œλ“œ, 기술, 사둀 νŒŒμ•…
335
+ - 문제 해결에 ν•„μš”ν•œ 핡심 κΈ°λŠ₯κ³Ό 속성 식별
336
+
337
+ 2. **μΉ΄ν…Œκ³ λ¦¬λ³„ 적합성 λ§€ν•‘**
338
+ - λͺ¨λ“  μΉ΄ν…Œκ³ λ¦¬μ—μ„œ 문제 해결에 μ ν•©ν•œ ν•­λͺ©λ“€μ„ 식별
339
+ - 각 μΉ΄ν…Œκ³ λ¦¬λ³„λ‘œ μ΅œμ†Œ 1개 μ΄μƒμ˜ κ΄€λ ¨ ν•­λͺ© μ„ μ •
340
+ - μ„ μ • ν•­λͺ©κ³Ό 문제 κ°„μ˜ μ—°κ²°μ„± μ„€λͺ…
341
+
342
+ 3. **랜덀 크둜슀 맀트릭슀 생성**
343
+ - 16개 μΉ΄ν…Œκ³ λ¦¬ 쀑 6개λ₯Ό λ¬΄μž‘μœ„λ‘œ μ„ μ •
344
+ - μ„ μ •λœ 각 μΉ΄ν…Œκ³ λ¦¬μ—μ„œ 1개 ν•­λͺ©μ„ μΆ”μΆœ
345
+ - 이 6개 ν•­λͺ©μ„ μ‘°ν•©ν•˜μ—¬ 톡합적 μ†”λ£¨μ…˜ λ„μΆœ
346
+
347
+ ### 좜λ ₯ ν˜•μ‹
348
+ μ΅œμ’… λ³΄κ³ μ„œλ₯Ό λ‹€μŒ ꡬ쑰둜 λ§ˆν¬λ‹€μš΄ ν˜•μ‹μœΌλ‘œ μž‘μ„±ν•˜μ‹­μ‹œμ˜€:
349
+
350
+ ## 1️⃣ 문제 뢄석 및 지식 베이슀
351
+ - **문제 μ •μ˜**: [ν”„λ‘¬ν”„νŠΈ 핡심 μš”κ΅¬μ‚¬ν•­ μš”μ•½]
352
+ - **핡심 λ‹ˆμ¦ˆ**: [뢈릿 3-5개둜 μ£Όμš” λ‹ˆμ¦ˆ 리슀트]
353
+ - **ν˜„ν™© 뢄석**: [μ›Ήκ²€μƒ‰μ΄λ‚˜ 배경지식 기반 ν˜„μž¬ 상황 μš”μ•½]
354
+
355
+ ## 2️⃣ μΉ΄ν…Œκ³ λ¦¬λ³„ 적합성 λ§€ν•‘
356
+ [각 μΉ΄ν…Œκ³ λ¦¬λ³„λ‘œ κ°€μž₯ μ ν•©ν•œ ν•­λͺ©λ“€μ„ ν‘œ ν˜•μ‹μœΌλ‘œ 정리]
357
+ | μΉ΄ν…Œκ³ λ¦¬ | 적합 ν•­λͺ© | μ—°κ²°μ„± |
358
+ |---------|----------|--------|
359
+ | [μΉ΄ν…Œκ³ λ¦¬1] | [μ„ μ • ν•­λͺ©] | [λ¬Έμ œμ™€μ˜ μ—°κ²°μ„± μ„€λͺ…] |
360
+ | [μΉ΄ν…Œκ³ λ¦¬2] | [μ„ μ • ν•­λͺ©] | [λ¬Έμ œμ™€μ˜ μ—°κ²°μ„± μ„€λͺ…] |
361
+ ... (μ΅œμ†Œ 5개 μΉ΄ν…Œκ³ λ¦¬)
362
+
363
+ ## 3️⃣ CCM 톡합 μ†”λ£¨μ…˜
364
+ ### 랜덀 μ„ μ • μΉ΄ν…Œκ³ λ¦¬/ν•­λͺ©
365
+ [λ¬΄μž‘μœ„ μ„ μ •λœ 6개 μΉ΄ν…Œκ³ λ¦¬μ™€ ν•­λͺ©μ„ ν‘œλ‘œ 정리]
366
+ | μ„ μ • μΉ΄ν…Œκ³ λ¦¬ | μ„ μ • ν•­λͺ© |
367
+ |--------------|----------|
368
+ | [μΉ΄ν…Œκ³ λ¦¬1] | [ν•­λͺ©1] |
369
+ | [μΉ΄ν…Œκ³ λ¦¬2] | [ν•­λͺ©2] |
370
+ ...
371
+
372
+ ### μ΅œμ’… 아이디어: [아이디어 제λͺ©]
373
+ - **κ°œλ… μš”μ•½**: [2-3λ¬Έμž₯으둜 핡심 아이디어 μ„€λͺ…]
374
+ - **상세 μ„€λͺ…**: [3-4 λ¬Έλ‹¨μœΌλ‘œ 아이디어 ꡬ체화]
375
+ - **κ΅¬ν˜„ 방식**: [아이디어 μ‹€ν˜„μ„ μœ„ν•œ 단계/방법]
376
+ - **차별화 μš”μ†Œ**: [μ„ μ •λœ 6개 ν•­λͺ©μ΄ μ–΄λ–»κ²Œ μ‹œλ„ˆμ§€λ₯Ό λ‚΄λŠ”μ§€ μ„€λͺ…]
377
+
378
+ ### κΈ°λŒ€ 효과
379
+ - [뢈릿 포인트둜 3-5개 μ£Όμš” κΈ°λŒ€νš¨κ³Ό λ‚˜μ—΄]
380
+
381
+ ### ν•œκ³„ 및 도전 과제
382
+ - [뢈릿 포인트둜 2-3개 잠재적 ν•œκ³„/도전 μ œμ‹œ]
383
+
384
+ ### 이미지 ν”„λ‘¬ν”„νŠΈ
385
+ [아이디어λ₯Ό μ‹œκ°ν™”ν•  수 μžˆλŠ” 영문 이미지 ν”„λ‘¬ν”„νŠΈ 1쀄]
386
+
387
+ {cat_clause}
388
+ Step-by-step 사고 과정을 λ”°λ₯΄λ˜, 좜λ ₯μ—λŠ” μ΅œμ’… λ³΄κ³ μ„œλ§Œ ν‘œμ‹œν•˜μ‹­μ‹œμ˜€.
389
  """
390
  return prompt.strip()
391
 
 
 
392
  # ──────────────────────────────── Brave Search API ────────────────────────
393
  @st.cache_data(ttl=3600)
394
  def brave_search(query: str, count: int = 20):
 
664
  sb.info("βœ… Web search results will be integrated.")
665
 
666
  # μ˜ˆμ‹œ μ£Όμ œλ“€ (μ›λž˜ μ˜ˆμ‹œ λΈ”λ‘œκ·Έ ν† ν”½ -> μ΄μ œλŠ” μ˜ˆμ‹œ 아이디어 주제둜 μ „ν™˜)
667
+
668
  example_topics = {
669
+ "example1": "λ„μ‹œ λ¬Ό λΆ€μ‘± 문제 해결을 μœ„ν•œ ν˜μ‹ μ  λ°©μ•ˆ",
670
+ "example2": "노인 λŒλ΄„ μ„œλΉ„μŠ€μ˜ λ””μ§€ν„Έ μ „ν™˜",
671
+ "example3": "지속가λŠ₯ν•œ μ‹ν’ˆ 포μž₯ μ†”λ£¨μ…˜"
672
  }
673
 
674
  sb.subheader("Category Focus (Optional)")
 
882
  idea_sections[i+1].strip() if i+1 < len(idea_sections) else "")
883
  for i in range(1, len(idea_sections), 2)]
884
 
885
+
886
  for title, text_block in pairs:
887
+
888
  table_match = re.search(
889
  r"\|\s*(?:\*\*)?Image\s+Prompt(?:\*\*)?\s*\|\s*([^|\n]+)", # ← μˆ˜μ •
890
  text_block, flags=re.IGNORECASE)
891
 
 
892
  if not table_match:
893
  table_match = re.search(
894
  r"(?i)Image\s+Prompt\s*[:\-]\s*([^\n]+)", text_block)