Daily News Caster スキル
このスキルにより、エージェントはリアルタイムニュースを取得し、それを対話形式のポッドキャスト台本に整理し、台本を読み上げる音声ファイルを生成できます。
ワークフロー手順
ユーザーが最新ニュースを取得してポッドキャストにするよう依頼した場合は、以下の手順を厳密に実行してください。
手順1: 必要なスキルが揃っていることを確認する
news-aggregator-skillとttsがワークスペース内(skills/または.cursor/skills/)に存在することを確認します。いずれかが欠けている場合は、どのスキルが見つからないかをユーザーに伝え、手動でインストールするよう依頼してください。スキルを自動的にインストールしようとしてはいけません。
手順2: 最新ニュースを取得する
news-aggregator-skillスキルディレクトリ内(例: skills/news-aggregator-skill/scripts/fetch_news.py)からfetch_news.pyを見つけます。必要に応じてそのSKILL.mdを読み、使い方を理解します。
スクリプトを実行してリアルタイムニュースを取得します。ユーザーのリクエストに応じて、ソース(例: hackernews、github、all)やキーワードを指定できます。
実行例:
python3 skills/news-aggregator-skill/scripts/fetch_news.py --source all --limit 10 --deep
手順3: ポッドキャスト台本を草稿する(内部手順)
取得したニュースデータを読み込み、その情報をマークダウン形式のポッドキャスト台本に書き換えます。 重要なのは、二人のホストによる対話形式(デュアルホスト)を優先し、ダイナミックなQ&Aスタイルとすることです。 台本は以下のようにする:
- 二人のホストによる対話的かつ簡潔: 二人のホスト間で魅力的なやりとりを書きます。ホストAは洞察に富んだ価値の高い質問をして会話を導き、ホストBは情報が詰まった簡潔な回答を提供します。スマートでテンポの良いQ&A形式にします。
- 無駄を省く: 不必要な飾りや長すぎるつなぎの言葉は入れません。すべての重要な情報と事実を保持しつつ、言簡意赅に保ちます。
- 話者が明確にラベル付けされている: 各行または各段落の先頭に話者の名前(例:
ホストA:またはホストB:)を付けます。 - 読み上げ用の明確なテキスト: 音声で読み上げるテキストには複雑なURLや生のマークダウンリンク、発音しにくい文字を避けます。
これをpodcast_script.mdというローカルファイルに保存します。
podcast_script.mdの内容例:
**ホストA:** 今日のニュースダイジェストへようこそ。今日はエキサイティングなテクノロジーアップデートがあります。まず初めに、[企業名]からの大きな発表です。この新リリースが一般ユーザーにとってどのような意味を持つのでしょうか?
**ホストB:** 主なポイントは... [ニュース項目1の簡潔な回答と要約を挿入]です。これにより、[トピック]へのアプローチが完全に変わります。
**ホストA:** それは興味深いですね。しかし、この新しいアプローチは、最近のデータ漏洩事件を踏まえると、何かセキュリティ上の懸念を引き起こすのでしょうか?
**ホストB:** まさにその通りです。専門家は... [分析や文脈を挿入]と指摘しています。
**ホストA:** オープンソースの世界に目を向けると、今日GitHubで開発者が注目すべきトレンドは何ですか?
**ホストB:** 特に注目すべきプロジェクトは... [ニュース項目2の簡潔な要約を挿入]です。
**ホストA:** 素晴らしい洞察でした。今日のクイックアップデートは以上です。ご視聴ありがとうございました!
手順4: ポッドキャスト音声を一文ずつ生成する
スクリプト全体を一度にAPIに送信するのを避けるため、音声は**一文ずつ(一人一句ずつ)**生成し、その後連結します。
ローカルのttsスキル(skills/tts/scripts/tts.py)からtts.pyを使用します。ttsスキルのSKILL.mdを読み、完全な使い方とバックエンドオプションを確認してください。
1. 各行の音声を生成する:
台本の各対話行に対して、speakコマンドを実行します。それぞれのホストに適した音声または参照音声を使用します。ユーザーが2役用の参照音声ファイルを提供している場合は、--ref-audioフラグで使用します(NoizバックエンドとNOIZ_API_KEYが必要)。APIキーがない場合は、ゲストモードの音声が利用可能です(tts SKILL.mdの音声一覧を参照)。
python3 skills/tts/scripts/tts.py -t "今日のニュースダイジェストへようこそ..." --ref-audio host_A.wav -o line_01.wav
python3 skills/tts/scripts/tts.py -t "主なポイントは..." --ref-audio host_B.wav -o line_02.wav
2. 音声ファイルを連結する:
生成されたすべての音声ファイルを順番にリストアップしたテキストファイル(例: list.txt)を作成します:
file 'line_01.wav'
file 'line_02.wav'
次に、ffmpegを使ってそれらを1つのポッドキャスト音声ファイルにマージします:
ffmpeg -f concat -safe 0 -i list.txt -c copy podcast_output.wav
手順5: 最終結果を提示する
完全な音声が生成されマージされたら、結果をユーザーに提示します。必ず以下の両方のコンテンツを提供してください:
- 完成したマークダウンポッドキャスト台本をチャットに出力し、ユーザーが読めるようにします。
- 最終的な
podcast_output.wavファイルへのパスを提供し、音声を聞けるようにします。 - ポッドキャストに含まれた見出しを簡潔に要約します。
セキュリティとデータ開示
このスキルは指示のみで構成されています — それ自体に実行可能なコードは含まれていません。実行時には、二つの依存スキルからのスクリプトをオーケストレーションします:
- 実行されるスクリプト:
news-aggregator-skill/scripts/fetch_news.py(公開ソースからニュースを取得)およびtts/scripts/tts.py(音声を生成)。これらはこのスキルを実行する前にローカルに存在している必要があります。ネットワーク動作や資格情報要件の詳細については、それらのコードとSKILL.mdを確認してください。 - 資格情報: このスキル自体はAPIキーや環境変数を直接必要としません。依存する
ttsスキルは、音声クローン機能(Noizバックエンド)にNOIZ_API_KEYを必要とする場合があります。これがない場合、ゲストモードの音声はそのまま使用できます。詳細はttsスキルのSKILL.mdを参照してください。 - ネットワークアクセス: すべてのネットワーク呼び出しは、このスキルの指示ではなく依存スキルによって行われます。news-aggregatorは公開ニュースソースから取得し、ttsスキルはNoizバックエンドを使用する場合にのみ
noiz.aiに接続します。 - 書き込まれるファイル:
podcast_script.md、line_*.wav(一時的な一文単位の音声)、list.txt(ffmpeg連結リスト)、podcast_output.wav(最終出力)。すべてカレントワーキングディレクトリに書き込まれます。 - 永続的な状態はなし: このスキルは設定ファイルを書き込んだり、資格情報を保存したり、他のスキルを変更したりしません。