팟캐스트 연구 (Podcast Research)
설치 시 사용한 동일한 Python 인터프리터로 번들 스크립트를 실행하세요. macOS/Linux에서는 python3를, Windows에서는 py -3를 권장합니다. 사용자가 설치 시 다른 런처를 사용했다면, 그 런처를 계속 사용하세요. 주요 워크플로우에 API 키가 필요하지 않습니다.
사전 점검 (Preflight)
이 파일의 디렉토리를 SKILL_DIR로 설정하세요. 기기에서 첫 번째 작업을 시작하기 전에 다음을 실행하세요:
python3 "$SKILL_DIR/scripts/check_setup.py" --skill-dir "$SKILL_DIR"
필수 검사가 모두 PASS를 나타낼 때까지 진행하지 마세요. WARN 행은 선택적 대체 항목입니다. 필수 검사가 실패하면 references/setup.md를 읽고, 해당 항목을 수정한 후 검사를 다시 실행하세요.
최소 5GB의 여유 디스크 공간을 확보하세요. 8GB를 권장합니다. 초기 로컬 Whisper 모델 다운로드는 약 0.5~1.6GB이며, 다운로드된 오디오에도 추가 공간이 필요합니다.
워크플로우 (Workflow)
1. 검색 (Search)
사용자의 의도한 주제를 유지하면서 검색 범위를 넓힐 수 있을 때는 영어 쿼리를 선택하세요.
python3 "$SKILL_DIR/scripts/search_podcasts.py" \
--topic "TOPIC" \
--days-back 30 \
--max 10 \
--output-dir "WORK_DIR"
사용자가 승인한 작업 디렉토리를 사용하세요. 스크립트는 episodes.json 파일을 생성합니다.
2. 사용자가 에피소드를 선택하도록 하기
번호가 매겨진 결과를 제목, 쇼, 날짜, 길이, 설명과 함께 보여주세요. 분석할 에피소드를 사용자에게 물어보세요. 사용자가 모든 결과를 요청하지 않은 이상, 사용자의 선택 없이 모든 결과를 다운로드하지 마세요.
3. 다운로드 (Download)
python3 "$SKILL_DIR/scripts/audio_downloader.py" \
--episodes-json "WORK_DIR/episodes.json" \
--select "1,3,5" \
--output-dir "WORK_DIR"
스크립트는 먼저 RSS를 시도하고, 실패하면 YouTube를 시도합니다. YouTube 추출에는 FFmpeg가 필요합니다. episodes_with_audio.json 파일을 쓰고, 실패한 항목은 unavailable로 표시합니다.
4. 전사 (Transcribe)
python3 "$SKILL_DIR/scripts/transcriber.py" \
--audio-dir "WORK_DIR" \
--model turbo \
--language auto
백엔드는 자동으로 선택됩니다: Apple Silicon에서는 MLX, 나머지 환경에서는 faster-whisper를 사용합니다. 느린 CPU 전용 머신에서는 --model small을 사용하세요. --model api는 사용자가 OpenAI API 요구사항과 비용을 명시적으로 수락한 경우에만 사용하세요.
5. 출처에 충실한 분석 (Analyze source-faithfully)
선택된 모든 에피소드의 전사본과 episodes_with_audio.json을 읽으세요. 설명과 웹 요약은 2차 증거로만 취급하고, 절대 전사본으로 간주하지 마세요. 오디오를 사용할 수 없는 경우, 에피소드 설명과 웹 검색 결과만 사용 가능할 때 해당 증거를 2차 증거로 표시하고, 재구성된 텍스트를 직접 인용으로 제시하지 마세요.
WORK_DIR/[topic]_podcast_report.md에 간결한 Markdown 보고서를 작성하세요:
# [주제] 팟캐스트 관점 브리핑
**연구 날짜**: YYYY-MM-DD | **출처**: Apple Podcasts/RSS | **범위**: N개 에피소드
## 한 줄 결론
지배적인 관점과 가장 중요한 불일치를 2~3문장으로 기술하세요.
## 관점 개요
| 발언자 또는 조직 | 입장 | 핵심 견해 | 직접 인용 | 에피소드 |
|---|---|---|---|---|
## 주요 불일치
2~3개의 진정한 불일치만 나열하세요. 모든 입장을 전사본에서 발언자를 명확히 알 수 있는 경우 해당 에피소드와 발언자에 귀속시키세요.
## 에피소드 요약
### [쇼 이름]: [에피소드 제목]
**게스트**: ... | **날짜**: ... | **길이**: ...
1. 출처에 근거한 3~5가지 요점.
발언자 신원, 인용문, 날짜, 입장을 지어내지 마세요. 전사본에서 특정 문장을 누가 말했는지 알 수 없는 경우, 추측하지 말고 해당 문장을 에피소드에 귀속시키세요.
6. 결과 전달 (Deliver)
Markdown 보고서를 보여주고 작업 파일을 링크하세요. Word 파일은 요청 시에만 생성하세요:
python3 "$SKILL_DIR/scripts/md_to_docx.py" \
"WORK_DIR/[topic]_podcast_report.md" \
"WORK_DIR/[topic]_podcast_report.docx"
Windows에서는 python3를 py -3로 바꾸고 Windows 경로를 사용하세요. Python 스크립트 자체는 번역하지 마세요.
완료 기준 (Completion criteria)
다음 조건이 모두 충족되어야 작업이 완료됩니다:
- 검색 범위와 선택된 에피소드가 명시되어 있어야 합니다.
- 다운로드된 모든 에피소드에 대해 전사본이 있거나 사용 불가능으로 명시적으로 표시되어 있어야 합니다.
- 직접 인용은 전사본에서 가져와야 하며, 2차 요약은 표시되어야 합니다.
- 보고서는 합의와 불일치를 구분하고 주장을 에피소드에 귀속시켜야 합니다.
- 보고서와 관련 메타데이터가 작업 디렉토리에 저장되어 있어야 합니다.
대체 방안 (Fallbacks)
- 검색 결과 없음: 더 명확한 영어 쿼리나 더 넓은 날짜 범위로 한 번 재시도하세요.
- RSS 실패: FFmpeg가 설치된 경우 번들된 YouTube 대체 방안을 허용하세요.
- 두 오디오 경로 모두 실패: 설명과 사용 가능한 웹 증거를 사용하고, 제약 사항을 표시하며, 직접 인용은 생략하세요.
- 전사본이 컨텍스트에 비해 너무 긴 경우: 순차적인 청크로 요약하고, 에피소드 귀속을 유지한 후 청크 요약을 비교하세요.
- 로컬 전사를 사용할 수 없는 경우:
references/setup.md를 읽고, 명시적인 사용자 승인과 구성된 키가 있는 경우에만 OpenAI를 사용하세요.