나만의 AI 뉴스 요약 서비스 만들기: 개발자를 위한 튜토리얼
요약
Python과 NewsAPI, LLM을 활용하여 개인화된 AI 뉴스 요약 서비스를 구축하는 개발 튜토리얼입니다. 뉴스 수집부터 관련성 필터링, LLM을 이용한 요약 및 자동화 배포 과정을 단계별로 안내합니다.
핵심 포인트
- NewsAPI를 활용한 최신 AI 뉴스 데이터 수집 방법
- 키워드 및 임베딩 유사도를 이용한 뉴스 필터링 기법
- OpenAI API 또는 로컬 LLM을 활용한 뉴스 요약 구현
- GitHub Actions를 통한 뉴스 요약 서비스 자동화
이 튜토리얼에서는 Python, 몇 가지 무료 API, 그리고 LLM (GPT 또는 로컬 모델 등)을 사용하여 정확히 이러한 서비스를 구축하는 방법을 보여드리겠습니다. 군더더기 없이, 오후 한나절이면 배포할 수 있는 코드와 시스템만을 다룹니다.
왜 직접 만들어야 할까요?
- 노이즈 없는 큐레이션 – 관심 있는 주제(예: "LLMs", "computer vision", "AI safety")별로 필터링합니다.
- 요약 제공 – 클릭 유도용 기사(clickbait)는 건너뛰고, 한두 문장으로 핵심 통찰을 얻습니다.
- 자동화 – GitHub Actions(또는 본인의 서버)에서 매일 실행되어 요약본을 전송합니다.
- 확장성 – 감성 분석(sentiment analysis), 출처 점수 매기기(source scoring), 또는 로컬 요약 기능을 추가하고 싶으신가요? 얼마든지 가능합니다.
준비물
- Python 3.9+
- NewsAPI 키 (무료 티어: 일일 100회 요청) – 또는 RSS 피드를 사용할 수 있습니다.
- OpenAI API 키 (또는 모든 LLM 엔드포인트; 예시로는 GPT-3.5-turbo를 사용합니다).
- 선택 사항: 전송을 위한 Telegram 봇 토큰 또는 SMTP 자격 증명.
1단계: 최신 AI 뉴스 가져오기
NewsAPI를 사용하여 "AI"라는 키워드가 포함된 기사를 쿼리하겠습니다. arXiv, Hacker News 또는 RSS에서도 가져올 수 있지만, API를 사용하는 것이 가장 간단합니다.
import requests
from datetime import datetime, timedelta
...
출력값: title, description, url, source, publishedAt을 포함하는 딕셔너리(dict) 리스트.
2단계: (선택 사항) 관련성에 따른 점수 산정 및 필터링
모든 기사가 시간을 들일 가치가 있는 것은 아닙니다. 간단한 키워드 밀도 체크를 사용하거나, 더 나아가 사용자의 관심사와 임베딩 유사도(embedding similarity)를 사용하여 순위를 매겨봅시다.
가벼운 필터를 위해, functools.lru_cache를 사용하여 제목 + 설명을 기반으로 "관련성 점수(relevance score)"를 계산합니다:
KEYWORDS = ["transformer", "GPT", "PyTorch", "fine-tuning", "RAG", "diffusion", "agent"]
def relevance_score(article):
...
전문가 팁: 더 정교한 필터를 원한다면, sentence-transformers를 사용하여 기사 임베딩을 사용자의 관심사 벡터와 비교하세요. 하지만 그것은 별도의 포스팅 주제이므로, 우선은 단순하게 유지하세요.
3단계: LLM으로 요약하기
이제 재미있는 부분입니다. 각 기사의 제목과 설명을 LLM (Large Language Model)에 보내고 한 문장 요약을 요청할 것입니다. 이렇게 하면 여러분의 뉴스 요약본(digest)이 밀도 있고 훑어보기 쉬워집니다.
import openai
openai.api_key = "sk-..."
...
이 방식이 효과적인 이유: LLM은 노이즈(noise)를 신호(signal)로 응축합니다. gpt-3.5-turbo-0125와 같은 무료 모델조차 기사당 0.001달러 미만의 비용으로 꽤 괜찮은 성능을 보여줍니다.
주의: 기사 10개 기준, 실행당 약 0.01달러가 소요됩니다. 비용이 전혀 들지 않고 완전한 프라이버시를 원한다면 로컬 모델(예: Ollama를 통한 Phi-3-mini)을 사용하세요.
4단계: 뉴스 요약본 형식 지정하기
저는 마크다운 (Markdown)을 선호합니다. 깔끔하며 이메일이나 GitHub Issue에 바로 넣을 수 있기 때문입니다. 여기 간단한 템플릿이 있습니다:
def build_digest_md(articles_summaries):
lines = ["# 🤖 AI News Digest", f"**{datetime.now().strftime('%A, %B %d, %Y')}**\n"]
for title, summary, url in articles_summaries:
...
출력 예시:
- OpenAI Launches GPT-4o Mini OpenAI releases a smaller, cheaper model for developers, with vision and improved latency. [Read more]
5단계: 뉴스 요약본 전달하기
여러 가지 옵션이 있습니다:
- 콘솔에 출력 (Print to console) – 로컬 테스트용.
- 이메일 (Email) – Gmail 또는 SendGrid와 함께
smtplib사용. - Slack 웹훅 (Slack webhook) – JSON 페이로드(payload)를 POST 하기만 하면 됩니다.
- GitHub Issue – 개인 저장소(private repo)에 매일 이슈를 생성합니다 (무료 호스팅에 매우 좋습니다!).
간단한 이메일 버전을 보여드리겠습니다:
import smtplib
from email.mime.text import MIMEText
...
(Gmail의 경우 앱 비밀번호(app-specific password)를 사용하세요. 보안 비밀값(secrets)을 절대 코드에 직접 입력(hardcode)하지 말고 환경 변수(environment variables)를 사용하세요.)
6단계: GitHub Actions로 자동화하기
.github/workflows/digest.yml 파일을 생성합니다:
name: Daily AI Digest
...
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기