Daily News Caster Skill
Dieser Skill erlaubt es dem Agenten, Echtzeit-Nachrichten abzurufen, sie in ein gesprächiges Podcast-Skript zu überführen und eine Audio-Datei zu erstellen, die das Skript vorliest.
Arbeitsablauf
Wenn der Benutzer darum bittet, die neuesten Nachrichten zu holen und daraus einen Podcast zu machen, führe die folgenden Schritte strikt aus:
Schritt 1: Erforderliche Skills prüfen
Vergewissere dich, dass news-aggregator-skill und tts im Arbeitsbereich vorhanden sind (unter skills/ oder .cursor/skills/). Falls einer fehlt, informiere den Benutzer, welcher Skill nicht gefunden wurde, und bitte ihn, den Skill manuell zu installieren, bevor es weitergeht. Installiere Skills nicht automatisch.
Schritt 2: Neueste Nachrichten abrufen
Suche fetch_news.py im Skill-Verzeichnis von news-aggregator-skill (z. B. skills/news-aggregator-skill/scripts/fetch_news.py). Lies ggf. dessen SKILL.md, um die Nutzung zu verstehen.
Führe das Skript aus, um aktuelle Nachrichten zu holen. Du kannst eine Quelle angeben (z. B. hackernews, github, all) oder Schlüsselwörter basierend auf der Benutzeranfrage.
Beispiel-Befehl:
python3 skills/news-aggregator-skill/scripts/fetch_news.py --source all --limit 10 --deep
Schritt 3: Podcast-Skript entwerfen (interner Schritt)
Lies die abgerufenen Nachrichten und formatiere die Informationen als Markdown-Podcast-Skript. Priorisiere unbedingt ein dialogbasiertes Format mit zwei Sprechern (zwei Personen) in dynamischem Frage-und-Antwort-Stil (z. B. Moderator A und Moderator B). Das Skript sollte:
- Zweisprecher-dialogisch, aber prägnant: Schreibe einen ansprechenden Schlagabtausch zwischen zwei Moderatoren. Moderator A sollte tiefgründige, wertvolle Fragen stellen und das Gespräch lenken, während Moderator B informative, präzise Antworten gibt. Es soll sich wie ein kluger, schneller Q&A-Dialog anfühlen.
- Keine Füllwörter: Vermeide unnötiges Beiwerk oder überlange Übergänge. Bleibe auf den Punkt (言简意赅), behalte aber alle wichtigen Informationen und Fakten.
- Sprecher klar kennzeichnen: Beginne jede Zeile oder jeden Absatz mit dem Namen des Sprechers (z. B.
Moderator A:oderModerator B:). - Sprechtext klar halten: Vermeide komplexe URLs, rohe Markdown-Links oder schwer aussprechbare Zeichen im gesprochenen Text.
Speichere dieses Skript in einer lokalen Datei mit dem Namen podcast_script.md.
Beispiel für den Inhalt von podcast_script.md:
**Moderator A:** Herzlich willkommen zu unserer heutigen Nachrichtenrunde. Wir haben aufregende Tech-News für Sie. Fangen wir gleich an: Es gibt ein großes Update von [Firmenname]. Welche Kernauswirkungen hat die neue Veröffentlichung für die täglichen Nutzer?
**Moderator B:** Die wichtigste Erkenntnis ist, dass... [Kurze Antwort und Zusammenfassung von Nachricht 1]. Das ändert vollkommen, wie wir [Thema] angehen.
**Moderator A:** Faszinierend. Aber wirft dieser neue Ansatz nicht Sicherheitsbedenken auf, besonders angesichts der jüngsten Datenlecks?
**Moderator B:** Genau. Experten weisen darauf hin, dass... [Analyse oder Kontext einfügen].
**Moderator A:** Kommen wir zur Open-Source-Welt. Was ist heute auf GitHub angesagt, worauf Entwickler achten sollten?
**Moderator B:** Ein herausragendes Projekt ist... [Kurze Zusammenfassung von Nachricht 2].
**Moderator A:** Großartige Einblicke. Das war's für heute. Danke fürs Zuhören!
Schritt 4: Podcast-Audio Satz für Satz generieren
Um zu vermeiden, dass das gesamte Skript auf einmal an die API gesendet wird, musst du das Audio Satz für Satz (一人一句地生成) erzeugen und anschließend zusammenfügen.
Verwende tts.py aus dem lokalen tts-Skill (skills/tts/scripts/tts.py). Lies die SKILL.md des tts-Skills für die vollständige Nutzung und die Backend-Optionen.
1. Audio für jede Zeile generieren:
Führe für jede Dialogzeile im Skript den speak-Befehl aus. Verwende die passende Stimme oder Referenzaudio für den jeweiligen Moderator. Falls der Benutzer Referenz-Audiodateien für die beiden Rollen bereitgestellt hat, nutze sie mit dem --ref-audio-Flag (erfordert noiz-Backend und NOIZ_API_KEY). Ohne API-Key stehen Gast-Modus-Stimmen zur Verfügung (siehe tts SKILL.md für die Stimmenliste).
python3 skills/tts/scripts/tts.py -t "Herzlich willkommen zu unserer heutigen Nachrichtenrunde..." --ref-audio moderator_A.wav -o zeile_01.wav
python3 skills/tts/scripts/tts.py -t "Die wichtigste Erkenntnis ist, dass..." --ref-audio moderator_B.wav -o zeile_02.wav
2. Audio-Dateien zusammenfügen:
Erstelle eine Textdatei (z. B. list.txt), die alle generierten Audiodateien in der richtigen Reihenfolge auflistet:
file 'zeile_01.wav'
file 'zeile_02.wav'
Verwende dann ffmpeg, um sie zu einer einzigen Podcast-Audiodatei zu verschmelzen:
ffmpeg -f concat -safe 0 -i list.txt -c copy podcast_ausgabe.wav
Schritt 5: Endergebnis präsentieren
Nachdem das gesamte Audio erzeugt und zusammengeführt wurde, präsentiere die Ergebnisse dem Benutzer. Du MUSST beide Inhalte bereitstellen:
- Gib das vollständig ausgearbeitete Markdown-Podcast-Skript in den Chat aus, damit der Benutzer es lesen kann.
- Gib den Pfad zur finalen
podcast_ausgabe.wav-Datei an, damit der Benutzer sie anhören kann. - Fasse kurz die Schlagzeilen zusammen, die im Podcast enthalten waren.
Sicherheit & Datenweitergabe
Dieser Skill besteht nur aus Anweisungen – er enthält selbst keinen ausführbaren Code. Zur Laufzeit orchestriert er Skripte von zwei abhängigen Skills:
- Ausgeführte Skripte:
news-aggregator-skill/scripts/fetch_news.py(holt Nachrichten von öffentlichen Quellen) undtts/scripts/tts.py(erzeugt Sprachaudio). Beide müssen lokal vorhanden sein, bevor dieser Skill läuft; lies ihren Code und ihre SKILL.md für Details zu ihrem Netzwerkverhalten und ihren Zugangsdatenanforderungen. - Zugangsdaten: Dieser Skill benötigt selbst keine API-Schlüssel oder Umgebungsvariablen. Die Abhängigkeit
ttsbenötigt möglicherweiseNOIZ_API_KEYfür Voice-Cloning-Funktionen (noiz-Backend); ohne ihn funktionieren Gast-Modus-Stimmen sofort. Siehe SKILL.md des tts-Skills für Details. - Netzwerkzugriff: Alle Netzwerkaufrufe werden von den abhängigen Skills durchgeführt, nicht von den Anweisungen dieses Skills. Der News-Aggregator ruft Daten von öffentlichen Nachrichtenquellen ab; der tts-Skill kontaktiert
noiz.ainur, wenn das noiz-Backend verwendet wird. - Geschriebene Dateien:
podcast_script.md,zeile_*.wav(temporäres Satz-Audio),list.txt(ffmpeg-Zusammenführungsliste),podcast_ausgabe.wav(endgültige Ausgabe). Alle werden in das aktuelle Arbeitsverzeichnis geschrieben. - Kein dauerhafter Zustand: Dieser Skill schreibt keine Konfigurationsdateien, speichert keine Zugangsdaten und ändert keine anderen Skills.