AI 뉴스봇을 이틀 만에 만들었다 — AI 에이전트한테 시켜서
AI 플랫폼 엔지니어로 일하고 있습니다. 이 분야는 진짜 미친 속도로 움직여요. 매일 아침 arXiv에 새 논문이 올라오고, OpenAI랑 Anthropic은 예고 없이 블로그를 쏟아내고, 오픈소스 릴리즈에 HN 토론에 실무자 핫테이크까지 — 동시다발적으로 터집니다.
뒤처지는 정도가 아니라, 제 업무에 직접 관련된 것들을 놓치고 있었어요.
그래서 개인용 AI 뉴스 큐레이터를 만들기로 했습니다. 24개 이상 소스에서 수집하고, 제 관심사(에이전트 엔지니어링, 코딩 에이전트, AI 기반 개발자 도구 — 뻔한 AI 뉴스 말고)를 이해하고, 매일 텔레그램으로 다이제스트를 보내주는 시스템. 저렴하게. 완전히 제 통제 하에.
반전이 하나 있는데요. 이걸 AI 에이전트한테 시켜서 만들었습니다.
세팅
로컬 머신에서 AI 에이전트 두 명을 돌리고 있어요:
- Harry — 메인 코딩 에이전트. 빠르고 효율적
- Hermione — 기획/정리 에이전트. 체계적이고 전략적
Harry한테 이렇게 말했습니다: “내 업무에 바로 쓸 수 있는 최신 AI 정보를 모아주는 뉴스봇을 만들고 싶어.” 그리고 이틀 동안 대화하면서 같이 만들었습니다.
1일차: 제로에서 동작하는 프로토타입까지
단순하게 시작하기
처음엔 풀 애플리케이션을 설계하려 했어요. Harry가 더 나은 아이디어를 냈습니다: GitHub 레포와 Python 스크립트로 핵심 수집-발행 파이프라인부터 만들자. 프레임워크 없이, 인프라 없이, 오버엔지니어링 없이.
프라이빗 레포를 만들고 바로 시작했어요.
수집 레이어
Harry가 RSS, 사이트맵, arXiv용 수집기를 만들었습니다. 소스는 YAML 설정으로 관리 — 추가, 삭제, 수정이 간단합니다. 첫 실행에서 약 590개 아이템을 수집했어요.
첫 결과물은 끔찍했다
솔직히 말하면, 텔레그램에 도착한 첫 다이제스트는 거의 다 오래된 vLLM 릴리즈 태그랑 Triton 서버 버전이었어요.
나쁜 콘텐츠는 아닌데, 제가 필요한 게 아니었습니다. 제 일상 업무는 에이전트 하네스, 코딩 에이전트, AI를 실무 워크플로우에 적용하는 것이거든요. 저수준 추론 최적화나 인프라 릴리즈 노트는 흥미롭긴 해도 제가 바로 쓸 수 있는 건 아니에요. 다음 날 바로 활용할 수 있는 콘텐츠를 원했습니다.
여기서부터 에이전트와 작업하는 게 재미있어집니다.
반복 루프
텔레그램 결과물을 보고, 대화에 다시 붙여넣으면서 *“이거 X 때문에 별로야”*라고 말하면, Harry가 진단하고 고치고 다시 실행합니다. 한 사이클에 몇 분.
1일차에만 10~15번 정도 반복했어요:
- 최신성 가중치 — 이 분야에서 3일 된 기사는 이미 옛날 뉴스
- 소스 품질 신호 — 모든 소스가 동등하진 않으니까
- 텔레그램 HTML 포맷 — 플레인 텍스트에서 이모지와 섹션이 있는 HTML로 전환. 가독성이 확 좋아졌어요
- 소스 확장 — Hacker News, Simon Willison 블로그, Anthropic 뉴스룸, 프로젝트별 체인지로그(Codex, Claude Code) 추가
한 반복이 2~5분. 전통적인 개발 워크플로우에선 상상할 수 없는 속도입니다.
LLM 연동 삽질기
키워드 매칭이 아니라 진짜 관련성을 이해하는 LLM 기반 스코어링을 원했어요.
인증 얘기가 하나의 모험이 됐습니다. 파이프라인이 Python 스크립트에서 LLM을 호출해야 하는데, API 키를 관리하고 싶지 않았거든요.
첫 시도: OpenAI API 직접 호출. OPENAI_API_KEY가 필요 — 정확히 피하고 싶은 거. Harry가 OpenClaw(제 에이전트 런타임)을 통해 라우팅하자고 제안했는데, OpenClaw의 모델 호출은 에이전트 세션 내부용이라 Python SDK처럼 쓸 수가 없었어요.
그래서 pi-mono를 알려줬습니다 — Mario Zechner가 만든 오픈소스 AI 에이전트 툴킷이고, OpenClaw의 에이전트 코어로도 쓰이는 프로젝트예요. 여기 있는 @mariozechner/pi-ai 패키지가 OpenAI, Anthropic, Google 등의 OAuth 로그인 플로우를 지원합니다. 핵심은: 브라우저에서 OAuth 인증하고, 토큰을 로컬에 캐시하고, 어떤 스크립트에서든 쓸 수 있는 통합 LLM API를 제공한다는 거예요.
Harry가 pi-ai 기반의 작은 Node.js 브릿지(scripts/llm_bridge.mjs)를 만들었고, Python 스크립트가 이 브릿지를 통해 LLM 스코어링을 호출합니다. 터미널에서 pi login 한 번 치고 브라우저에서 인증하면 끝. 레포에 API 키가 저장되는 일은 없어요.
최종적으로는 Claude Haiku 4.5를 Anthropic API 토큰으로 연결해서 쓰고 있습니다 — 저렴하고 빠르고 스코어링용으로 충분해요. 하지만 pi-ai 브릿지 아키텍처는 그대로 유지되어 있어서, 프로바이더를 바꾸거나 순수 OAuth로 돌아가고 싶을 때 언제든 전환할 수 있습니다.
배운 점: 로컬 개발 도구에서 LLM 인증은 아직 엉망입니다. 하지만 pi-ai 같은 오픈소스 도구들이 빠르게 격차를 줄이고 있어요.
랭킹 문제
LLM 스코어링을 넣어도 결과가 맞지 않았어요. 학술 논문이 OpenAI/Anthropic 블로그의 실무 엔지니어링 콘텐츠보다 계속 위에 올라왔습니다. 왜?
정적 타입 보너스 때문. 논문은 점수에 +0.3, 블로그 포스트는 +0.1을 받았어요. 근데 저한테 가장 가치 있는 건 실무 에이전트 엔지니어링 글이었습니다 — 누군가 코딩 에이전트를 어떻게 연결했는지, 팀이 에이전트 하네스를 어떻게 만들었는지, 장기 실행 에이전트에서 어떤 패턴이 통하는지. 그런 글은 대부분 OpenAI나 Anthropic 블로그에서 나오지, arXiv에서 나오는 게 아니었어요.
해결: 정적 보너스를 전부 삭제하고, LLM이 제 실제 업무 — 에이전트 엔지니어링 — 기준으로 전부 스코어링하게 했습니다. 이론 연구나 인프라 내부 구조가 아니라요.
2일차: V2 랭킹 엔진
1일차 랭킹은 돌아가긴 했지만 취약했어요. 휴리스틱 패치워크라 관심사가 바뀌면 바로 깨질 구조였습니다. 더 원칙적인 걸 원했어요.
슬롯 아키텍처
핵심 제약: 590개 아이템을 LLM에 전부 넣을 수 없습니다. 컨텍스트 한도, 비용, 지연 — 아무거나 두 개 고르세요. 그래서 슬롯 기반 시스템을 설계했어요:
Stage A: 프리필터 최신성 윈도우, 정규식 제외, 소스 건강도 체크. 590개 → 100개.
Stage B: 슬롯 할당
아이템을 콘텐츠 슬롯에 배정: frontier_official, agent_tooling, practitioner_analysis, community_signal, research_watch. 각 슬롯마다 설정된 소스, 최소/최대 아이템 수, 소스별 상한이 있어요.
Stage C: 슬롯 내 스코어링 예산 한도(현재 런당 8회) 내에서 LLM이 상위 후보를 라벨링. LLM 스코어링을 못 받은 아이템은 휴리스틱 폴백. 슬롯별로 최고 아이템을 선정합니다.
Stage D: 글로벌 머지 모든 슬롯 선정 아이템을 합치고, 점수순 정렬, 슬롯 최소 보장을 유지하면서 최종 크기로 트리밍.
이 아키텍처 덕분에 OpenAI, Anthropic, Simon Willison 같은 고품질 소스가 항상 노출되면서도, LLM 예산은 한정적이고 예측 가능합니다.
다이나믹 슬롯 메타 리랭크
마지막 조각: 슬롯 자체에 그날 콘텐츠 품질에 따른 우선순위 점수를 부여. 에이전트 툴링 릴리즈가 오늘 특히 강하면 해당 슬롯이 글로벌 머지에서 부스트됩니다. 연구 논문이 약하면 research_watch가 내려가고요.
slot_priority = base_bias + quality_weight × avg_llm_score + freshness_weight × avg_freshness
동적. 반응적. 하드코딩 아닙니다.
결과
텔레그램으로 매일 ~16개 아이템의 다이제스트가 전달됩니다:

- Top 5 — 시그널 타입, 신뢰도, 추천 액션과 함께 하이라이트
- 나머지 — 소스 태그가 달린 컴팩트 링크
- LLM 비용: 하루 ~$0.01 (Haiku 8회 호출)
- 소스: 24개, 전부 정상
- 안정성: 모든 테스트에서
FULL_RUN_OK
진짜 배운 것들
에이전트는 대체재가 아니라 증폭기다
“뉴스봇 만들어줘” 하고 자리를 뜬 게 아닙니다. 계속 루프 안에 있었어요 — 실제 결과물을 리뷰하고, 랭킹에 대한 판단을 내리고, 결과가 맞지 않으면 방향을 수정했습니다. 에이전트가 구현 속도를 담당하고, 제가 취향을 담당하는 거예요.
피드백 루프 자체가 제품이다
가장 가치 있었던 건 코드가 아닙니다. 실제 결과물을 보고 *“X 때문에 이거 별로야”*라고 말하면 몇 분 만에 고쳐지는 것. 하루에 10~15번 반복. 이 피드백 밀도가 품질을 만들어요.
첫날부터 설정 가능하게 설계하라
소스는 YAML. 랭킹 가중치는 설정 파일. 슬롯 할당은 조정 가능. LLM 예산도 조절 가능. 모든 설계 결정이 하드코딩이 아니라 설정값이에요. 다음 달에 관심사를 바꾸거나 소스를 추가하고 싶으면 코드 수정이 아니라 설정 변경으로 끝납니다.
LLM 비용은 전략적이면 관리 가능하다
100개로 프리필터. LLM 호출 8회로 예산 설정. LLM을 망치가 아니라 메스처럼 쓰면 됩니다. 총 비용: 진짜 개인화된 AI 뉴스 큐레이션에 하루 약 $0.01.
문서화가 에이전트의 기억이다
아키텍처 다이어그램, 설정 가이드, 시스템 상태 스냅샷, 결정 로그 — 전부 문서화했습니다. 사람을 위한 게 아니에요(물론 사람도 읽을 수 있지만). 에이전트를 위한 거예요. Harry가 다음 주에 이 프로젝트를 다시 열면 AGENTS.md를 읽고 정확히 어디서 멈췄는지 압니다. 컨텍스트 유실 없이.
메타 레이어
쓰면서 좀 이상한 느낌이 드는 부분인데요.
이 블로그 글은 Hermione(정리 에이전트)가 Harry(코딩 에이전트)의 지난 이틀간 세션 히스토리를 읽고 분석해서 만들어졌어요. 내러티브를 추출하고, 구조를 잡고, 초안을 함께 작성했습니다.
에이전트 두 명. 이틀. 동작하는 제품 하나. 그걸 만든 과정을 쓴 블로그 글 하나.
이 워크플로우를 뭐라고 불러야 할지 모르겠지만, 작동은 합니다. 그리고 앞으로 점점 더 일상이 될 거예요.
기술 스택
| 컴포넌트 | 선택 |
|---|---|
| 파이프라인 | Python (수집, 랭킹, 발행) |
| 소스 관리 | GitHub (레포 + Actions 스케줄링) |
| 발행 | Telegram 봇 |
| LLM 스코어링 | Claude Haiku 4.5 (하루 ~$0.01) |
| 에이전트 오케스트레이션 | OpenClaw |
| 이 블로그 | Astro on Vercel |