Podcast Research(ポッドキャスト調査)
インストール時に使用したPythonインタプリタを、同梱のスクリプトでも使用してください。macOS/Linuxではpython3、Windowsではpy -3を推奨します。ユーザーがインストール時に別のランチャーを使用した場合は、そのランチャーを使い続けてください。プライマリワークフローにAPIキーは必要ありません。
事前確認
このファイルのディレクトリを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で、ダウンロードした音声にも追加の容量が必要です。
ワークフロー
1. 検索
カバレッジが向上する場合は英語のクエリを選択し、ユーザーの意図したトピックを維持してください。
python3 "$SKILL_DIR/scripts/search_podcasts.py" \
--topic "TOPIC" \
--days-back 30 \
--max 10 \
--output-dir "WORK_DIR"
ユーザーが承認した作業ディレクトリを使用してください。このスクリプトはepisodes.jsonを作成します。
2. ユーザーにエピソードを選択させる
番号付きの結果を、タイトル、番組名、日付、再生時間、説明とともに表示します。どのエピソードを分析するかユーザーに尋ねてください。ユーザーがすでにすべての結果を要求していない限り、ユーザーの選択なしにすべての結果をダウンロードしないでください。
3. ダウンロード
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. 文字起こし
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. 出典に忠実に分析する
選択されたすべてのエピソードの文字起こしとepisodes_with_audio.jsonを読み込んでください。説明やウェブの要約は二次的な証拠として扱い、文字起こしとしては決して使用しないでください。音声が利用できない場合は、利用可能な場合にのみエピソードの説明とウェブ検索を使用し、証拠を二次的であるとラベル付けし、再構成されたテキストを直接の引用として提示しないでください。
簡潔なMarkdownレポートをWORK_DIR/[topic]_podcast_report.mdに書き出してください:
# [トピック] ポッドキャスト視点概要
**調査日**: YYYY-MM-DD | **出典**: Apple Podcasts/RSS | **範囲**: Nエピソード
## 一文の結論
支配的な見解と最も重要な相違点を2~3文で述べてください。
## 視点の概要
| 話者または組織 | 立場 | 中心となる見解 | 逐語引用 | エピソード |
|---|---|---|---|---|
## 主な相違点
2~3の真の相違点のみを挙げてください。すべての立場を、文字起こしから話者が明らかな場合は名前付きのエピソードと話者に帰属させてください。
## エピソードの要約
### [番組名]: [エピソードタイトル]
**ゲスト**: ... | **日付**: ... | **再生時間**: ...
1. 3~5の出典に基づくポイント。
話者の同一性、引用、日付、立場を捏造しないでください。文字起こしから誰が発言したか特定できない場合は、推測するのではなく、エピソードに帰属させてください。
6. 成果物の受け渡し
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スクリプト自体は翻訳しないでください。
完了基準
タスクは以下の条件がすべて満たされた場合にのみ完了します:
- 検索範囲と選択されたエピソードが明記されていること。
- ダウンロードされたすべてのエピソードに文字起こしがあるか、利用不可と明示的にマークされていること。
- 直接引用は文字起こしから取得され、二次的な要約はラベル付けされていること。
- レポートがコンセンサスと相違点を区別し、主張をエピソードに帰属させていること。
- レポートと関連メタデータが作業ディレクトリに保存されていること。
代替手段
- 検索結果がない場合: より明確な英語クエリまたはより広い日付範囲で一度再試行してください。
- RSSが失敗した場合: FFmpegがインストールされていれば、同梱のYouTube代替手段を許可してください。
- 両方の音声パスが失敗した場合: 説明と利用可能なウェブ証拠を使用し、制限をラベル付けし、直接引用は省略してください。
- 文字起こしがコンテキストに対して長すぎる場合: 順次チャンクに分割して要約し、エピソードの帰属を保持した後、チャンクの要約を比較してください。
- ローカル文字起こしが利用できない場合:
references/setup.mdを読み、明示的なユーザーの承認と設定済みのキーがある場合にのみOpenAIを使用してください。