virtual-insanity
← 뒤로

800 운영/820 플레이북/강의노트-생성-플레이북.md

검증된 워크플로우 (6단계)

1단계: 녹취록 수신 + 메타데이터 확인

  • Telethon(유저 세션)으로 봇 DM에서 파일 다운로드 (MCP get_updates는 메시지 소비됨)
  • 파일 헤더에서 날짜/시간 확인하되, 녹취 변환 시간 ≠ 실제 강의 시간 가능 → 사용자에게 확인
  • 강사명은 녹취록 상단의 이름이 아님 (녹음자일 수 있음) → 반드시 사용자에게 확인
  • 중복 파일 확인 (여의나루로 2/3처럼 동일 내용 가능)

2단계: 정밀 추출 (3개 병렬 Opus)

  • 녹취록을 3그룹으로 나눠 Opus 3개 병렬 분석
  • 추출 항목: 모든 개념 / 모든 숫자·데이터 / 모든 예시·사례 / 강사 강조 포인트 / 다이어그램 후보
  • 원문 인용 필수 (타임스탬프 포함)
  • 결과를 볼트에 영구 저장 (/tmp 아님): 600 데이터/630 학습자료/{과목}_원본/

3단계: 차트 생성 (matplotlib)

  • matplotlib + AppleSDGothicNeo.ttc 한글 폰트
  • 강사가 말한 숫자만 차트에 사용 — 임의 데이터 포인트 절대 금지
  • 개념 설명용 차트는 축에 숫자 대신 방향(↑↓) 또는 "예시" 라벨
  • 스타일: 큰 한글 라벨, 화살표 주석, 색상 구분, 배경 설명 (카드채 스프레드 차트 참고)
  • 볼트에 영구 저장: 600 데이터/630 학습자료/{과목}_차트/
  • dpi=200, facecolor='white'

4단계: PDF 생성 (Opus)

  • 소스: 2단계 정밀추출 파일 (요약 MD 아님!)
  • reportlab + AppleGothic.ttf
  • 한국어 100%, 영어는 괄호 안에만
  • 컬러 박스 4종: 핵심(파랑), 실전팁(녹색), 주의(빨강), 시험포인트(노랑)
  • 각 파트 최소 3페이지, 총 20페이지+
  • 별도 파일명 사용 (덮어쓰기 방지): {과목}_최종확정.pdf

5단계: 품질 게이트 (전송 전 필수)

from pdfminer.high_level import extract_text
text = extract_text(pdf_path)
lines = [l for l in text.split('\n') if l.strip()]
assert len(lines) > 700, f"내용 부족: {len(lines)}줄"
# 영어 제목 체크
# 원문 수치 존재 확인

6단계: 전송 + 피드백 반영

  • 텔레그램 DM 전송
  • 피드백 시 점진적 수정 (전체 재작성 금지)
  • 차트만 교체 요청 → 차트 PNG 파일만 교체 후 PDF 재생성
  • 내용 추가 요청 → 해당 섹션만 추가

절대 금지 사항

  1. 요약 MD를 PDF 소스로 사용 (정밀추출 파일만 사용)
  2. 강사가 말하지 않은 숫자를 차트/본문에 삽입
  3. 같은 파일명으로 덮어쓰기
  4. 전체 재작성 (부분 수정으로 해결)
  5. 내부 검증 자료(대조표 등)를 사용자에게 노출
  6. 영어로 PDF 생성
  7. "최현우 = 강사" 같은 메타데이터 오류

성공 사례 수치

  • 정밀추출: 1,968줄 (3개 파일, 107KB)
  • 최종 PDF: 32페이지, 807줄, 1.5MB
  • 차트: 한국어 13개 (영어 4개 제외)
  • 소요: 정밀추출 15분 + 차트 5분 + PDF 생성 10분