Compétence Diffuseur de Journal Quotidien
Cette compétence permet à l'agent de récupérer des actualités en temps réel, de les organiser en un script de podcast conversationnel, puis de générer un fichier audio lisant le script à voix haute.
Instructions de flux de travail
Lorsque l'utilisateur demande les dernières nouvelles et souhaite en faire un podcast, suivez strictement ces étapes :
Étape 1 : Vérifier la présence des compétences requises
Vérifiez que news-aggregator-skill et tts existent dans l'espace de travail (dans skills/ ou .cursor/skills/). Si l'une d'entre elles manque, informez l'utilisateur de la ou des compétences manquantes et demandez-lui de les installer manuellement avant de continuer. N'essayez PAS d'installer automatiquement les compétences.
Étape 2 : Récupérer les dernières actualités
Localisez fetch_news.py dans le répertoire de la compétence news-aggregator-skill (par exemple, skills/news-aggregator-skill/scripts/fetch_news.py). Lisez son SKILL.md pour comprendre son utilisation si nécessaire.
Exécutez le script pour récupérer les actualités en temps réel. Vous pouvez spécifier une source (par exemple, hackernews, github, all) ou des mots-clés en fonction de la demande de l'utilisateur.
Exemple de commande :
python3 skills/news-aggregator-skill/scripts/fetch_news.py --source all --limit 10 --deep
Étape 3 : Rédiger le script du podcast (étape interne)
Lisez les données d'actualités récupérées et réécrivez les informations en un script de podcast au format Markdown. Crucialement, privilégiez un format conversationnel à deux animateurs (dialogue entre deux personnes) (par exemple, Animateur A et Animateur B) dans un style questions-réponses dynamique.
Le script doit être :
- Conversationnel à deux animateurs mais concis : Rédigez un échange engageant entre deux animateurs. L'animateur A doit poser des questions pertinentes et à forte valeur ajoutée pour guider la conversation, et l'animateur B doit fournir des réponses informatives et concises. Cela doit ressembler à un dialogue Q&A intelligent et rythmé.
- Éviter les remplissages : N'incluez pas de remplissages inutiles ou de transitions trop longues. Restez concis (言简意赅) tout en conservant toutes les informations et faits essentiels.
- Intervenants clairement identifiés : Commencez chaque ligne ou paragraphe par le nom de l'intervenant (par exemple,
Animateur A :ouAnimateur B :). - Texte clair pour la parole : Évitez les URL complexes, les liens Markdown bruts ou les caractères imprononçables dans le texte parlé.
Enregistrez ce script dans un fichier local nommé podcast_script.md.
Exemple de contenu podcast_script.md :
**Animateur A :** Bienvenue dans notre tour d'horizon des actualités du jour. Nous avons des mises à jour technologiques passionnantes aujourd'hui. Pour commencer, il y a une grande annonce de [Nom de l'entreprise]. Quelles sont les implications concrètes de cette nouvelle version pour les utilisateurs quotidiens ?
**Animateur B :** Le principal enseignement est que... [Insérer une réponse concise et un résumé de l'actualité 1]. Cela change complètement notre approche du [Sujet].
**Animateur A :** Fascinant. Mais cette nouvelle approche soulève-t-elle des préoccupations de sécurité, surtout compte tenu des récentes fuites de données ?
**Animateur B :** Exactement. Les experts soulignent que... [Insérer une analyse ou un contexte].
**Animateur A :** Passons au monde open-source. Qu'est-ce qui est tendance sur GitHub aujourd'hui et que les développeurs devraient suivre ?
**Animateur B :** Un projet remarquable est... [Insérer un résumé concis de l'actualité 2].
**Animateur A :** Excellentes perspectives. C'est tout pour notre bref résumé d'aujourd'hui. Merci de nous avoir écoutés !
Étape 4 : Générer l'audio du podcast phrase par phrase
Pour éviter d'envoyer l'intégralité du script à l'API en une seule fois, vous devez générer l'audio phrase par phrase (一人一句地生成) puis les concaténer.
Utilisez tts.py de la compétence tts locale (skills/tts/scripts/tts.py). Lisez le SKILL.md de la compétence tts pour une utilisation complète et les options de backend.
1. Générer l'audio pour chaque ligne :
Pour chaque ligne de dialogue du script, exécutez la commande speak. Utilisez la voix appropriée ou l'audio de référence pour l'animateur concerné. Si l'utilisateur a fourni des fichiers audio de référence pour les deux rôles, utilisez-les via l'option --ref-audio (nécessite le backend noiz et NOIZ_API_KEY). Sans clé API, les voix en mode invité sont disponibles (voir le SKILL.md de tts pour la liste des voix).
python3 skills/tts/scripts/tts.py -t "Bienvenue dans notre tour d'horizon des actualités du jour..." --ref-audio animateur_A.wav -o ligne_01.wav
python3 skills/tts/scripts/tts.py -t "Le principal enseignement est que..." --ref-audio animateur_B.wav -o ligne_02.wav
2. Concaténer les fichiers audio :
Créez un fichier texte (par exemple, liste.txt) listant tous les fichiers audio générés dans l'ordre :
file 'ligne_01.wav'
file 'ligne_02.wav'
Utilisez ensuite ffmpeg pour les fusionner en un seul fichier audio de podcast :
ffmpeg -f concat -safe 0 -i liste.txt -c copy podcast_final.wav
Étape 5 : Présenter le résultat final
Une fois l'audio complet généré et fusionné, présentez les résultats à l'utilisateur. Vous DEVEZ fournir les deux éléments suivants :
- Affichez le script du podcast complet au format Markdown dans le chat pour que l'utilisateur puisse le lire.
- Fournissez le chemin vers le fichier
podcast_final.wavfinal pour qu'il puisse écouter l'audio. - Résumez brièvement les titres inclus dans le podcast.
Sécurité et divulgation de données
Cette compétence est uniquement basée sur des instructions – elle ne contient aucun code exécutable par elle-même. Lors de son exécution, elle orchestre des scripts provenant de deux compétences dépendantes :
- Scripts exécutés :
news-aggregator-skill/scripts/fetch_news.py(récupère les actualités de sources publiques) ettts/scripts/tts.py(génère l'audio vocal). Les deux doivent être présents localement avant que cette compétence ne s'exécute ; examinez leur code et leur SKILL.md pour plus de détails sur leur comportement réseau et leurs exigences en matière d'identifiants. - Identifiants : Cette compétence ne nécessite directement aucune clé API ni variable d'environnement. La dépendance
ttspeut nécessiterNOIZ_API_KEYpour les fonctionnalités de clonage vocal (backend noiz) ; sans cela, les voix en mode invité fonctionnent directement. Consultez le SKILL.md de la compétence tts pour plus de détails. - Accès réseau : Tous les appels réseau sont effectués par les compétences dépendantes, pas par les instructions de cette compétence. La compétence news-aggregator récupère les données de sources d'actualités publiques ; la compétence tts contacte
noiz.aiuniquement lorsque le backend noiz est utilisé. - Fichiers écrits :
podcast_script.md,ligne_*.wav(audio temporaire par phrase),liste.txt(liste de concaténation ffmpeg),podcast_final.wav(fichier final). Tous sont écrits dans le répertoire de travail courant. - Aucun état persistant : Cette compétence n'écrit pas de fichiers de configuration, ne stocke pas d'identifiants et ne modifie pas d'autres compétences.