ginipick commited on
Commit
eae33c8
·
verified ·
1 Parent(s): b6f8c25

tone: switch from 중고등학생 style to friendly AI expert tone (정중한 평어체) for news/model/space prompts + fallback templates

Browse files
Files changed (1) hide show
  1. app.py +70 -62
app.py CHANGED
@@ -831,7 +831,7 @@ HTML_TEMPLATE = """
831
  <h1>🤖 투데이 AI : 데일리 TOP 100 소식</h1>
832
  <p class="subtitle">
833
  매일 아침 전 세계 AI 생태계의 핵심 100가지를 한눈에 확인하세요.<br>
834
- 최신 뉴스·모델·서비스를 AI가 직접 분석해서 쉽게 명해드립니다.
835
  </p>
836
 
837
  <div class="badges">
@@ -1464,36 +1464,41 @@ class LLMAnalyzer:
1464
  return None
1465
 
1466
  def analyze_news_simple(self, title: str, content: str = "") -> Dict:
1467
- """뉴스 기사 중고등학생 수준으로 분석 - LLM API 사용"""
1468
-
1469
  # LLM API가 사용 가능한 경우 실제 분석
1470
  if self.api_available:
1471
  try:
1472
  messages = [
1473
  {
1474
  "role": "system",
1475
- "content": """당신은 중고등학생도 이해할 있게 AI 뉴스를 게 설명하 전문가입니다.
1476
- 한국어로 답변하며, 다음 형식의 JSON으로만 응답하세요:
 
 
 
 
 
1477
 
1478
  {
1479
- "summary": "뉴스 내용을 8-10문장으로 자세 구체적으로 설명 (수치, 사실, 배경 포함)",
1480
- "significance": "이 뉴스가 왜 중요한지 2-3문장으로 명",
1481
  "impact_level": "high 또는 medium 또는 low",
1482
  "impact_text": "높음 또는 중간 또는 낮음",
1483
- "impact_description": "어떤 영향이 있을지 2-3문장으로 설명",
1484
- "action": "중고등학생이 할 수 있는 을 2-3문장으로 제안"
1485
  }
1486
 
1487
  반드시 위 형식의 JSON만 출력하세요."""
1488
  },
1489
  {
1490
  "role": "user",
1491
- "content": f"""다음 AI 뉴스를 중고등학생이 이해할 수 있도록 분석해주세요:
1492
 
1493
  제목: {title}
1494
 
1495
- 각 항목을 구체적이고 자세하게 작성하되, 중고등학생 수준에 맞춰 게 설명해주세요.
1496
- 특히 summary는 8-10문장으로 충분히 상세하게 작성하세요."""
1497
  }
1498
  ]
1499
 
@@ -1574,20 +1579,20 @@ GPU는 AI 모델 학습과 추론에 필수적인 하드웨어로, 수천 개의
1574
  if keyword.lower() in title.lower():
1575
  return template
1576
 
1577
- # 기본 분석 (중고등학생 수준)
1578
  return {
1579
- "summary": f"""'{title}'는 최신 AI 기술 동향을 다루는 중요한 뉴스입니다.
1580
- 인공지능 분야는 매일 새로운 발전을 이루고 있으며, 이러한 기술 변화는 우리의 일상생활, 교육, 그리고 미래 직업 세계에 직접적인 영향을 미 것으로 예상됩니다.
1581
- 최근 AI 기술은 단순 데이터 처리하는 수준을 넘어, 창의적 콘텐츠 생성하고잡한 문제 해결하는 단계로 진화하고 있습니다.
1582
- 특히 대규모 언어 모델(LLM)과 생성형 AI의 발전은 산업 전반에 걸쳐 혁신을 가져오고 있습니다.
1583
- 이러한 기술 변화는 새로운 일자리를 창출하는 동시에, 기존 직업의 성격을 변화시키고 있어 우리 모두가 주목해야 할 트렌드입니다.
1584
- 전문가들은 향후 5-10년 내 AI가 모든 산업 분야에 통합될 것으로 전망하고 있습니다.
1585
- 따라서 관련 기술 원리 이해하고, 사회적 파급효과를 고민하는 것이 미래 세에게 매우 중요한 역량 것입니다.""",
1586
- "significance": "AI 기술의 발전은 단순한 기술 혁신을 넘어 사회, 경제, 윤리 측면 다양한 논의불러일으키고 있습니다. 이러한 변화를 이해하고 비하는 미래 세대에게 중요한 역량니다.",
1587
  "impact_level": "medium",
1588
  "impact_text": "중간",
1589
- "impact_description": "AI 기술의 발전은 교육, 취업, 산업 전반에 걸쳐 구조적 변화를 가져올 이며, 이에 대한 이해와 준비가 필요합니다.",
1590
- "action": "AI 기술의 기본 원리 학습하고, 관련 프로그래밍(Python 등)이나 데이터 과학 기초 공부해보세요. 또한 AI 윤리사회적 영향에 대해서비판적으로 사고하는 습관을 기르세요."
1591
  }
1592
 
1593
  def analyze_model(self, model_name: str, task: str, downloads: int) -> str:
@@ -1602,7 +1607,7 @@ GPU는 AI 모델 학습과 추론에 필수적인 하드웨어로, 수천 개의
1602
  messages = [
1603
  {
1604
  "role": "system",
1605
- "content": "당신은 중고등학생도 이해할 있게 AI 모델을 게 설명하는 전문가입니다. 한 답변요."
1606
  },
1607
  {
1608
  "role": "user",
@@ -1610,12 +1615,12 @@ GPU는 AI 모델 학습과 추론에 필수적인 하드웨어로, 수천 개의
1610
 
1611
  {model_card}
1612
 
1613
- 이 모델을 중고등학생이 이해할 있도록 3-4문장으로 쉽게 설명해주세요. 다음 내용을 포함하세요:
1614
- 1. 이 모델이 무엇을 하는지
1615
- 2. 어떤 특징
1616
- 3. 누가 사용하면 좋은
1617
 
1618
- 답변은 반드시 3-4문장의 한국어로만 작성하세요."""
1619
  }
1620
  ]
1621
 
@@ -1651,7 +1656,7 @@ GPU는 AI 모델 학습과 추론에 필수적인 하드웨어로, 수천 개의
1651
  else:
1652
  popularity = "어느 정도"
1653
 
1654
- return f"이 모델은 {task_desc} AI예요. {popularity} 사람들이 다운로드해서 사용고 있어요. {model_name.split('/')[-1]}라는 이름으로 유명해!"
1655
 
1656
  def analyze_space(self, space_name: str, space_id: str, description: str) -> Dict:
1657
  """허깅페이스 스페이스 분석 - app.py를 LLM으로 분석"""
@@ -1665,7 +1670,7 @@ GPU는 AI 모델 학습과 추론에 필수적인 하드웨어로, 수천 개의
1665
  messages = [
1666
  {
1667
  "role": "system",
1668
- "content": "당신은 중고등학생도 이해할 있게 AI 애플리케이션을 게 설명하는 전문가입니다. 한 답변요."
1669
  },
1670
  {
1671
  "role": "user",
@@ -1673,12 +1678,12 @@ GPU는 AI 모델 학습과 추론에 필수적인 하드웨어로, 수천 개의
1673
 
1674
  {app_code}
1675
 
1676
- 이 앱을 중고등학생이 이해할 있도록 3-4문장으로 쉽게 설명해주세요. 다음 내용을 포함하세요:
1677
- 1. 이 앱 무엇을 는지
1678
- 2. 어떤 기술 용하는지
1679
- 3. 어떻게 활용 있는
1680
 
1681
- 답변은 반드시 3-4문장의 한국어로만 작성하세요."""
1682
  }
1683
  ]
1684
 
@@ -1713,7 +1718,7 @@ GPU는 AI 모델 학습과 추론에 필수적인 하드웨어로, 수천 개의
1713
 
1714
  # 3. Fallback: 템플릿 기반 설명
1715
  return {
1716
- "simple_explanation": f"{space_name}는 웹브라우저에서 바로 AI를 체험해볼 수 있는 곳이에요. 설치 없이 사용할 수 있어서 편리해요! 마치 온라인 게임처럼 바로 AI를 사용할 수 있니다.",
1717
  "tech_stack": ["Python", "Gradio", "Transformers", "PyTorch"]
1718
  }
1719
 
@@ -1973,39 +1978,42 @@ class AdvancedAIAnalyzer:
1973
  return all_news
1974
 
1975
  def _fallback_model_analysis(self, model_info: Dict) -> str:
1976
- """LLM 호출 실패/지연 시 사용할 즉시 fallback 설명"""
1977
  name = model_info['name'].split('/')[-1]
1978
  task = model_info.get('task', 'N/A') or 'N/A'
1979
  dl = model_info.get('downloads', 0)
1980
  task_kr = {
1981
- 'text-generation': '글을 자동으로 만들어주는',
1982
- 'image-to-text': '사진을 보고 설명을 써주는',
1983
- 'text-to-image': '글을 읽고 그림을 그려주는',
1984
- 'image-text-to-text': '이미지와 글을 함께 이해하는 멀티모달',
1985
- 'text-to-speech': '글을 음성으 변환하는',
1986
- 'automatic-speech-recognition': '음성을 받아쓰는',
1987
- 'translation': '다른 언어 번역해주는',
1988
- 'question-answering': '해주는',
1989
- 'summarization': '긴 글을 짧게 요약해주는',
1990
- 'text-classification': '글을 분류해주는',
1991
- 'feature-extraction': '의미 벡터를 추출하는',
1992
- 'sentence-similarity': '문장 의미 유사도를 비교하는',
1993
- 'fill-mask': '빈칸채워주는',
1994
- 'any-to-any': '여러 modality 처리하는',
1995
- }.get(task, '특별한 기능을 하는')
1996
- if dl > 10_000_000: pop = '엄청나게 많은'
1997
- elif dl > 1_000_000: pop = '아주 많은'
1998
- elif dl > 100_000: pop = '많은'
1999
- elif dl > 10_000: pop = '많은'
2000
- else: pop = '어느 정도'
2001
- return f"이 모델은 {task_kr} AI예요. {pop} 사람들이 다운로드해서 사용하고 어요. {name}라는 이름으로 유명해요!"
 
 
2002
 
2003
  def _fallback_space_analysis(self, space_info: Dict) -> Dict:
 
2004
  name = space_info.get('name', 'Space')
2005
  sdk = space_info.get('sdk', 'gradio') or 'gradio'
2006
  tech = ['Python', sdk.capitalize() if sdk else 'Gradio']
2007
  return {
2008
- 'simple_explanation': f"{name}는 웹브라우저에서 바로 AI를 체험해볼 있는 곳이에요. 설치 없이도 사용할 수 있어 편리해요!",
2009
  'tech_stack': tech,
2010
  }
2011
 
@@ -2414,13 +2422,13 @@ if __name__ == '__main__':
2414
  ╚════════════════════════════════════════════════════════════╝
2415
 
2416
  📌 매일 아침 전 세계 AI 생태계의 핵심 100가지를 한눈에!
2417
- 최신 뉴스·모델·서비스를 AI가 직접 분석해서 쉽게 명합니다.
2418
 
2419
  ✨ 주요 기능:
2420
  • 💾 SQLite DB 영구 스토리지
2421
  • 🌐 AI Times 실시간 뉴스 크롤링 (오늘+어제)
2422
  • 🔥 Hacker News Top Stories (36시간 이내)
2423
- • 📰 뉴스 중고등학생 수준 LLM 분석
2424
  • 🤗 허깅페이스 트렌딩 모델 TOP 30 (모델 카드 분석)
2425
  • 🚀 허깅페이스 트렌딩 스페이스 TOP 30 (app.py 분석)
2426
  • 🧠 Fireworks AI (Qwen3-235B) 실시간 LLM 분석
 
831
  <h1>🤖 투데이 AI : 데일리 TOP 100 소식</h1>
832
  <p class="subtitle">
833
  매일 아침 전 세계 AI 생태계의 핵심 100가지를 한눈에 확인하세요.<br>
834
+ 최신 뉴스·모델·서비스를 AI 전문 분석하여 핵심을확하게 전달해드립니다.
835
  </p>
836
 
837
  <div class="badges">
 
1464
  return None
1465
 
1466
  def analyze_news_simple(self, title: str, content: str = "") -> Dict:
1467
+ """뉴스 기사 분석 친절한 AI 전문가 톤 (LLM API 사용)"""
1468
+
1469
  # LLM API가 사용 가능한 경우 실제 분석
1470
  if self.api_available:
1471
  try:
1472
  messages = [
1473
  {
1474
  "role": "system",
1475
+ "content": """당신은 친절한 AI 전문가입니다. AI 산업의 최신 뉴스를 핵심을 짚어 명확하고 차분하게 설명하되, 누구나 이해할 수 있도록 친근한 한국어 어조를 유지합니다.
1476
+
1477
+ - 어조: 정중한 평어체 (~합니다 / ~입니다). "~예요", "~답니다", "~네요" 같은 구어체 어미는 피합니다.
1478
+ - 깊이: 기술적 핵심 + 시장·산업적 함의 + 일반 독자가 알아두면 좋은 맥락 균형
1479
+ - 가독성: 짧은 문장, 한 문장 한 메시지. 전문 용어가 나오면 1줄 풀이를 덧붙입니다.
1480
+
1481
+ 다음 JSON 형식으로만 응답하세요:
1482
 
1483
  {
1484
+ "summary": "뉴스 핵심을 8-10문장으로 정중 설명. 수치·사실·배경·기술 맥락 포함.",
1485
+ "significance": "이 뉴스가 왜 중요한지 2-3문장. 산업적·기술적 의미 시.",
1486
  "impact_level": "high 또는 medium 또는 low",
1487
  "impact_text": "높음 또는 중간 또는 낮음",
1488
+ "impact_description": "예상되는 파급 효과를 2-3문장으로 설명",
1489
+ "action": "독자가 할 수 있는 학습·실천 행동을 2-3문장으로 제안 (어조: 정중·실용)"
1490
  }
1491
 
1492
  반드시 위 형식의 JSON만 출력하세요."""
1493
  },
1494
  {
1495
  "role": "user",
1496
+ "content": f"""다음 AI 뉴스를 분석해주세요:
1497
 
1498
  제목: {title}
1499
 
1500
+ 각 항목을 구체적이고 자세하게 작성하되, 친절한 AI 전문가의 톤으로 명확하게 설명해주세요.
1501
+ 특히 summary는 8-10문장으로 핵심·배경·기술 맥락을 함께 담아 작성하세요."""
1502
  }
1503
  ]
1504
 
 
1579
  if keyword.lower() in title.lower():
1580
  return template
1581
 
1582
+ # 기본 분석 (친절한 AI 전문가 톤)
1583
  return {
1584
+ "summary": f"""'{title}'는 최신 AI 기술 동향을 다루는 중요한 뉴스입니다.
1585
+ 인공지능 분야는 매일 새로운 발전을 이루고 있으며, 이러한 기술 변화는 일상·교육·산업·직업 세계 전반에 직접적인 영향을 미치고 있습니다.
1586
+ 최근 AI 기술은 단순 데이터 처리 넘어 창의적 콘텐츠 생성합적 문제 해결로 진화하고 있습니다.
1587
+ 특히 대규모 언어 모델(LLM)과 생성형 AI의 발전은 산업 구조 자체를 재편하고 있습니다.
1588
+ 이러한 변화는 새로운 직무를 창출하는 동시에 기존 직업의 성격을 빠르게 바꾸고 있니다.
1589
+ 전문가들은 향후 5-10년 내 AI가 대부분의 산업 영역에 통합될 것으로 전망니다.
1590
+ 따라서 기술 원리 대한 기본 이해 사회·윤리적 함의에 균형 잡힌 시각점점 더 중요해집니다.""",
1591
+ "significance": "AI 기술의 발전은 단순한 기술 혁신을 넘어 사회·경제·윤리 전반걸친 변화만들어내고 있습니다. 흐름을 이해하고 비하는 개인과 조직 모두에게 중요한 역량으로 자리잡고 있습니다.",
1592
  "impact_level": "medium",
1593
  "impact_text": "중간",
1594
+ "impact_description": "AI 기술의 발전은 교육·취업·산업 구조에 점진적 변화를 가져올 가능성 높으며, 이에 대한 학습과 적응이 필요합니다.",
1595
+ "action": "AI의 기본 원리(LLM, RAG, 에이전트 등) Python·데이터 과학 기초 학습을 권장합니다. 함께 AI 윤리·안전·사회적 영향에 대한 균형 잡힌 시각함께 갖추시면 더욱 좋습니다."
1596
  }
1597
 
1598
  def analyze_model(self, model_name: str, task: str, downloads: int) -> str:
 
1607
  messages = [
1608
  {
1609
  "role": "system",
1610
+ "content": "당신은 친절한 AI 전문가입니다. AI 모델의 핵심정확하고 명확하게 설명하되, 누구나 이해할 수 있친근한 한국어 어조를 유지합니다. 정중 (~합니다 / ~입니다)를 사용고, '~예', '~답니다' 같은 구어체 어미는 피합니다."
1611
  },
1612
  {
1613
  "role": "user",
 
1615
 
1616
  {model_card}
1617
 
1618
+ 이 모델을 친절한 AI 전문가의 톤으로 3-4문장으로 설명해주세요. 다음을 포함하세요:
1619
+ 1. 이 모델이 어떤 작업(task)수행하는지 — 핵심 기능
1620
+ 2. 기술적 특징·강점 — 아키텍처·파라미터 규모·차별점 (전문 용어 1줄 풀이)
1621
+ 3. 적합한 활용 례 — 어떤 사자/팀에게 어떤 상황에서 유용한
1622
 
1623
+ 답변은 반드시 3-4문장의 한국어로만 작성하세요. 정중한 평어체."""
1624
  }
1625
  ]
1626
 
 
1656
  else:
1657
  popularity = "어느 정도"
1658
 
1659
+ return f"이 모델은 {task_desc} AI 모델입니다. 누적 다운로드 {downloads:,}회를 기록하며 {popularity} 사용자에게 활용되고 있습니다. '{model_name.split('/')[-1]}'(이)라는 이름으로 공개되어 있으며, 위 작업이 필한 프로젝트에서 후보로 검토할 만한 모델입니다."
1660
 
1661
  def analyze_space(self, space_name: str, space_id: str, description: str) -> Dict:
1662
  """허깅페이스 스페이스 분석 - app.py를 LLM으로 분석"""
 
1670
  messages = [
1671
  {
1672
  "role": "system",
1673
+ "content": "당신은 친절한 AI 전문가입니다. AI 애플리케이션의 핵심 기능과 기술 스택정확하고 명확하게 설명하되, 누구나 이해할 수 있친근한 한국어 어조를 유지합니다. 정중 (~합니다 / ~입니다)를 사용고, '~예', '~답니다' 같은 구어체 어미는 피합니다."
1674
  },
1675
  {
1676
  "role": "user",
 
1678
 
1679
  {app_code}
1680
 
1681
+ 이 앱을 친절한 AI 전문가의 톤으로 3-4문장으로 설명해주세요. 다음을 포함하세요:
1682
+ 1. 이 앱 핵심 기능 — 사용자가 무엇을 할 수 있는지
1683
+ 2. 사용 기술 스택 — 어떤 모델·라이브러리·프레임워크를 활용하는지
1684
+ 3. 적합한 활용 사례 — 어떤 상황에서 유용한
1685
 
1686
+ 답변은 반드시 3-4문장의 한국어로만 작성하세요. 정중한 평어체."""
1687
  }
1688
  ]
1689
 
 
1718
 
1719
  # 3. Fallback: 템플릿 기반 설명
1720
  return {
1721
+ "simple_explanation": f"'{space_name}'는 웹 브라우저에서 바로 실행할 수 있는 인터랙티브 AI 데모입니다. 별도 설치 없이 즉시 체험할 수 있으며, AI 모델의 기능을 입력·출력보며 확인할 수 있니다.",
1722
  "tech_stack": ["Python", "Gradio", "Transformers", "PyTorch"]
1723
  }
1724
 
 
1978
  return all_news
1979
 
1980
  def _fallback_model_analysis(self, model_info: Dict) -> str:
1981
+ """LLM 호출 실패/지연 시 사용할 즉시 fallback 설명 — 친절한 AI 전문가 톤"""
1982
  name = model_info['name'].split('/')[-1]
1983
  task = model_info.get('task', 'N/A') or 'N/A'
1984
  dl = model_info.get('downloads', 0)
1985
  task_kr = {
1986
+ 'text-generation': '텍스트를 자동 생성하 언어 모델',
1987
+ 'image-to-text': '이미지를 분석하여 텍스트 설명을 생성하 모델',
1988
+ 'text-to-image': '텍스트 프롬프트로부터 이미지를 생성하 확산(diffusion) 모델',
1989
+ 'image-text-to-text': '이미지와 텍스트를 함께 처리하는 멀티모달 모델',
1990
+ 'text-to-speech': '텍스트를 자연스러운 음성으��� 변환하는 TTS 모델',
1991
+ 'automatic-speech-recognition': '음성을 텍스트변환하 ASR 모델',
1992
+ 'translation': '언어 번역을 수행하 모델',
1993
+ 'question-answering': '문 기반 질의응을 수행하 모델',
1994
+ 'summarization': '긴 문서를 요약 모델',
1995
+ 'text-classification': '텍스트를 분류 모델',
1996
+ 'feature-extraction': '의미 벡터(임베딩)를 추출하는 모델',
1997
+ 'sentence-similarity': '문장 의미 유사도를 계산하는 모델',
1998
+ 'fill-mask': '마스킹된 토큰예측하 모델',
1999
+ 'text-to-video': '텍스트 프롬프트로부터 동영상을 생성하는 모델',
2000
+ 'image-text-to-image': '이미지·텍스트 입력으로부터 이미지를 생성/편집하는 모델',
2001
+ 'any-to-any': '여러 modality 입출력을 지원하는 통합 모델',
2002
+ }.get(task, '특정 작업에 특화된 AI 모델')
2003
+ if dl > 10_000_000: pop = '광범위한 사용자층이'
2004
+ elif dl > 1_000_000: pop = '많은 개발자가'
2005
+ elif dl > 100_000: pop = '활발히'
2006
+ elif dl > 10_000: pop = '관심 있는 사용자들'
2007
+ else: pop = '초기 사용자 중심으로'
2008
+ return f"이 모델은 {task_kr}입니다. 누적 다운로드 {dl:,}회를 기록하며 {pop} 활용 중인 모델이며, 'FINAL-Bench 컬렉션' 외부 커뮤니티에서도 폭넓게 검증되고 있습니다. '{name}'(이)라는 이름으로 공개되어 있으며, 위 작업이 필요한 프로젝트에서 후보로 검토하기 적합합니다."
2009
 
2010
  def _fallback_space_analysis(self, space_info: Dict) -> Dict:
2011
+ """LLM 실패 시 fallback — 친절한 AI 전문가 톤"""
2012
  name = space_info.get('name', 'Space')
2013
  sdk = space_info.get('sdk', 'gradio') or 'gradio'
2014
  tech = ['Python', sdk.capitalize() if sdk else 'Gradio']
2015
  return {
2016
+ 'simple_explanation': f"'{name}'은() 브라우저에서 바로 실행되는 인터랙티브 AI 데모입니다. 별도 설치 없이 즉시 입력·출력을 시하며 모델의 동작을 확인할 수 있고, {sdk.capitalize() if sdk else 'Gradio'} 기반으로 구축되있습니다.",
2017
  'tech_stack': tech,
2018
  }
2019
 
 
2422
  ╚════════════════════════════════════════════════════════════╝
2423
 
2424
  📌 매일 아침 전 세계 AI 생태계의 핵심 100가지를 한눈에!
2425
+ 최신 뉴스·모델·서비스를 AI 전문 분석하여 핵심을확하게 전달합니다.
2426
 
2427
  ✨ 주요 기능:
2428
  • 💾 SQLite DB 영구 스토리지
2429
  • 🌐 AI Times 실시간 뉴스 크롤링 (오늘+어제)
2430
  • 🔥 Hacker News Top Stories (36시간 이내)
2431
+ • 📰 친절한 AI 전문가 LLM 뉴스 분석
2432
  • 🤗 허깅페이스 트렌딩 모델 TOP 30 (모델 카드 분석)
2433
  • 🚀 허깅페이스 트렌딩 스페이스 TOP 30 (app.py 분석)
2434
  • 🧠 Fireworks AI (Qwen3-235B) 실시간 LLM 분석