Kunho
KO EN

Project Report

arXiv-tracker: LLM 논문 자동 요약 레이더

이름
장건호
학과
정보컴퓨터공학부
학번
202255597
Keywords
arXiv, Gemini, FastAPI, Claude Code

요약

매일 arXiv에 올라오는 LLM 관련 논문을 키워드로 자동 수집하고, Google Gemini API로 한국어 5섹션 요약을 생성한 뒤 FastAPI 기반 웹 UI에서 검색, 즐겨찾기, 상세 확인까지 할 수 있도록 만든 개인 논문 레이더입니다.

1. 프로젝트 소개

LLM, RAG, agent, alignment처럼 빠르게 변하는 주제는 최신 논문을 놓치기 쉽습니다. 이 프로젝트는 관심 키워드와 arXiv 카테고리를 기준으로 최신 논문을 모으고, 초록을 한국어로 구조화해 요약하여 매일 확인 가능한 연구 대시보드로 정리합니다.

1.1 주요 기능

  • 자동 수집: arXiv 카테고리 cs.CL, cs.LG, cs.AI와 키워드 기반으로 최신 논문을 가져옵니다.
  • 한국어 요약: gemini-3.1-flash-lite로 핵심 기여, 방법론, 결과, 한계, 키워드 5개 섹션을 생성합니다.
  • 영구 저장: SQLite에 논문 메타데이터와 요약을 저장하고, 검색과 즐겨찾기를 지원합니다.
  • 웹 인터페이스: FastAPI와 Tailwind 스타일의 UI로 목록과 상세 페이지를 제공합니다.
arXiv-tracker 논문 목록 화면
Screen 1. 웹 UI 메인 화면
arXiv-tracker 논문 상세 페이지와 한국어 요약
Screen 2. 논문 상세 페이지

1.2 LLM 선택 근거

요약 백엔드로 gemini-3.1-flash-lite를 선택했습니다. Google AI Studio 무료 할당량이 개인용 데일리 트래킹에 충분하고, abstract 수준의 짧은 입력에 대한 응답 속도가 빠르며, 한국어 문장 품질도 안정적이기 때문입니다.

모델 설정은 config.yamlsummary_model 값으로 분리했습니다. 필요하면 Pro 계열 모델로 바꿀 수 있고, 개발 과정에서는 Claude Code를 코드 작성, 리팩토링, 디버깅 도구로 활용해 런타임 LLM과 개발 도구의 역할을 분리했습니다.

2. 사용한 Claude Code 기법

과제 요구사항 중 custom slash command, skills, subagent, hook을 사용했습니다. 반복 작업은 명령으로 줄이고, 요약과 평가처럼 규칙이 필요한 작업은 별도 스킬과 에이전트로 분리했습니다.

2.1 Custom Slash Commands

.claude/commands/에 자주 쓰는 작업을 슬래시 명령으로 만들었습니다. 매번 fetcher와 summarizer를 직접 실행하는 대신 /daily_papers 한 번으로 수집과 요약을 처리합니다.

daily papers, search topic, my save 슬래시 명령 표
Table 1. 정의한 슬래시 명령

2.2 Skills: paper-summary

.claude/skills/paper-summary/SKILL.md에 한국어 요약 포맷을 정의했습니다. 논문 abstract를 요약할 때 핵심 기여, 방법론, 결과, 한계, 키워드 순서를 따르게 해서 Gemini에 전달하는 SYSTEM_PROMPT와 Claude Code 내부 요약 형식이 일관되도록 맞췄습니다.

2.3 Subagent: paper-evaluator

.claude/agents/paper-evaluator.md에 정의한 subagent는 관심 적합도, 신규성, 실용성, 임팩트 가능성을 가중 평균해 논문을 1~10점으로 평가합니다. 평가 작업을 메인 세션에서 분리해 context를 아끼는 것이 핵심 장점입니다.

2.4 Hook: PreCompact

/update-config 자연어 명령으로 PreCompact 훅을 설정해, 컨텍스트가 자동 압축되기 전에 진행 상황을 CLAUDE.md에 백업하도록 했습니다. 긴 세션에서도 맥락이 유실되지 않도록 하기 위한 장치입니다.

Claude settings json permissions 설정 화면
Screen 3. .claude/settings.json 설정
daily papers 명령 실행 결과
Screen 4. /daily_papers 실행 결과

3. 사용법

3.1 설치

Gemini API 키는 Google AI Studio에서 발급받고, 프로젝트 환경에는 .env로 주입합니다.

conda create -n arxiv python=3.11 -y
conda activate arxiv
pip install -r requirements.txt
echo "GEMINI_API_KEY=AIza..." > .env
arXiv-tracker 설치 명령
Snippet 1. 설치 명령

3.2 실행

# CLI 방식
python -m src.fetcher       # 새 논문 수집
python -m src.summarizer    # 한국어 요약
uvicorn src.app:app --reload --port 8000

# Claude Code 방식
claude
> /daily_papers

실행 후 브라우저에서 http://localhost:8000으로 접속합니다. 월요일처럼 주말치 논문까지 포함해야 할 때는 config.yamldays_back을 3으로 설정합니다.

arXiv-tracker 실행 명령
Snippet 2. CLI와 Claude Code 실행 방식

4. 배운 점과 한계

  • 명령과 스킬의 결합: /daily_papers처럼 명시적으로 호출하는 명령 안에서 paper-summary 스킬의 암묵적 규칙이 함께 적용되어 반복 작업의 품질이 안정화됐습니다.
  • Hook의 낮은 진입장벽: 자연어로 설정할 수 있어 편했지만, 디버깅을 위해서는 .claude/settings.json을 직접 읽고 수정하는 방식도 익혀둘 필요가 있었습니다.
  • 개발 도구와 런타임 모델의 분리: Gemini는 실제 요약을 담당하고 Claude Code는 Gemini SDK 호출 코드 작성과 디버깅을 맡는 구조가 자연스럽게 작동했습니다.
  • 라이브러리 변화 대응: arxiv v4.0.0은 내부적으로 requests를 사용하므로 arxiv._USER_AGENT를 오버라이드해야 429 차단을 피할 수 있었습니다. 최신 Starlette에서는 TemplateResponse 호출 방식도 request= 키워드 인자로 분리됐습니다.
  • 한계: 현재는 abstract만 요약하므로 깊은 분석에는 제한이 있습니다. 향후 PDF 다운로드 후 본문까지 요약하는 기능을 추가할 예정입니다.