블로그 자동 포스팅 에이전트 요약

개요

  • GitHub Actions 워크플로가 매일 09:10 KST(UTC 00:10) 또는 workflow_dispatch로 실행되어, 랜덤 소스 마크다운을 Jekyll 포스트로 변환합니다.
  • 에이전트는 _agent_source/에서 소스를 선택하고 LLM으로 변환한 뒤 검증을 통과하면 _posts/에 저장합니다. 중복 방지는 state 기록아카이브 이동으로 처리합니다.
  • 소스 문서의 Obsidian 첨부 링크(![[...]], @files/...)는 발행 시 공개 경로(/assets/agent-source/...)로 치환되며, 참조 파일은 구조를 유지한 채 복사됩니다.
  • 발행 방식은 PR 모드(기본)direct 모드(옵션)를 지원합니다.
  • LLM 쿼터 소진(insufficient_quota) 시 기본 동작은 워크플로 실패가 아닌 스킵 처리이며, FAIL_ON_LLM_ERROR=true로 실패 모드 전환이 가능합니다.

실행 흐름(요약)

  1. tools/blog_agent/config.yml 설정을 읽고(없으면 기본값 사용) 실행합니다.
  2. _agent_source/.md 파일 목록에서 .blog-agent/state.json에 기록된 사용 이력을 제외합니다.
  3. 랜덤 소스를 선택한 뒤 LLM 프롬프트로 게시용 포스트를 생성합니다.
  4. 결과물을 검증합니다.
    • front matter 파싱 및 필수 필드 확인
    • 날짜 형식 검증
    • 카테고리 2단 구조 및 태그 3–8개 확인
    • 본문 최소 길이(기본 600자)
    • 코드 펜스 균형 및 민감정보 패턴 차단
  5. _posts/YYYY-MM-DD-<slug>.md로 저장하고, 원본은 _agent_archive/로 이동합니다.
  6. .blog-agent/state.json에 사용 이력 기록 및 workflow summary를 출력합니다.
  7. MODE=direct면 현재 브랜치에 커밋/푸시합니다.

중복 방지

  • State 기록: .blog-agent/state.jsonused_sources에 저장된 파일은 다음 실행에서 제외됩니다.
  • Archive 이동: 처리된 원본은 _agent_archive/로 이동되어 재사용을 방지합니다.

Workflow Summary 출력

워크플로 요약에 아래 항목이 기록됩니다.

  • 선택된 원본 파일명
  • 생성된 포스트 파일명
  • 검증 결과

Discord 모니터링(선택)

  • DISCORD_WEBHOOK_URL을 설정하면 실행 단계별 상세 로그가 Discord로 전송됩니다.
  • 소스 선택, LLM 요청, 검증 결과, 생성된 포스트 정보(제목/카테고리/태그/요약), GitHub Actions 실행 링크 등이 포함됩니다.
  • 설정 방법은 tools/blog_agent/NOTIFICATIONS.md 문서를 참고하세요.

실행 방법

로컬 실행

export LLM_API_KEY=... 
# 선택: LLM_API_BASE, LLM_MODEL, MODE=direct
python tools/blog_agent/main.py

GitHub Actions 실행

  • 스케줄 실행 또는 workflow_dispatch로 실행합니다.
  • mode 입력값(pr/direct)으로 발행 방식을 제어합니다.

필요한 Secrets

  • LLM_API_KEY (필수)
  • LLM_API_BASE (선택)
  • LLM_MODEL (선택)

© 2024. Chiptune93 All rights reserved.