Habilidad Daily News Caster
Esta habilidad permite al agente obtener noticias en tiempo real, organizarlas en un guion de podcast conversacional y generar un archivo de audio que lea el guion en voz alta.
Instrucciones de flujo de trabajo
Cuando el usuario pida obtener las últimas noticias y crear un podcast a partir de ellas, sigue estrictamente estos pasos:
Paso 1: Asegurar que las habilidades requeridas estén presentes
Verifica que news-aggregator-skill y tts existan en el espacio de trabajo (bajo skills/ o .cursor/skills/). Si falta alguna, informa al usuario cuál(es) no se encontraron y pídele que las instale manualmente antes de continuar. NO intentes instalar habilidades automáticamente.
Paso 2: Obtener las últimas noticias
Localiza fetch_news.py en el directorio de la habilidad news-aggregator-skill (ej., skills/news-aggregator-skill/scripts/fetch_news.py). Lee su SKILL.md para entender su uso si es necesario.
Ejecuta el script para obtener noticias en tiempo real. Puedes especificar una fuente (ej., hackernews, github, all) o palabras clave según la solicitud del usuario.
Ejemplo de comando:
python3 skills/news-aggregator-skill/scripts/fetch_news.py --source all --limit 10 --deep
Paso 3: Redactar el guion del podcast (paso interno)
Lee los datos de noticias obtenidos y reescribe la información en un guion de podcast en Markdown. Fundamentalmente, prioriza un formato conversacional de dos anfitriones (dos personas) (ej., Anfitrión A y Anfitrión B) en un estilo dinámico de preguntas y respuestas. El guion debe ser:
- Conversacional de dos anfitriones pero conciso: Redacta un intercambio atractivo entre dos anfitriones. El Anfitrión A debe hacer preguntas perspicaces y de alto valor para guiar la conversación, y el Anfitrión B debe proporcionar respuestas informativas y concisas. Debe sentirse como un diálogo inteligente y rápido de preguntas y respuestas.
- Sin relleno: No incluyas relleno innecesario ni transiciones demasiado largas. Mantén la información al grano (言简意赅) conservando todos los datos y hechos críticos.
- Oradores claramente etiquetados: Comienza cada línea o párrafo con el nombre del orador (ej.,
Anfitrión A:oAnfitrión B:). - Texto claro para el habla: Evita URLs complejas, enlaces Markdown sin procesar o caracteres impronunciables en el texto hablado.
Guarda este guion en un archivo local llamado podcast_script.md.
Ejemplo de contenido de podcast_script.md:
**Anfitrión A:** Bienvenidos al resumen de noticias de hoy. Tenemos actualizaciones tecnológicas emocionantes. Para empezar, hay una gran novedad de [Nombre de la Empresa]. ¿Cuáles son las implicaciones principales de su nuevo lanzamiento para los usuarios cotidianos?
**Anfitrión B:** La conclusión principal es que... [Insertar respuesta concisa y resumen de la Noticia 1]. Esto cambia completamente cómo abordamos [Tema].
**Anfitrión A:** Eso es fascinante. Pero, ¿este nuevo enfoque plantea preocupaciones de seguridad, especialmente dado los recientes incidentes de datos?
**Anfitrión B:** Exactamente. Los expertos señalan que... [Insertar análisis o contexto].
**Anfitrión A:** Pasando al mundo del código abierto, ¿qué está trending en GitHub hoy que los desarrolladores deberían tener en cuenta?
**Anfitrión B:** Un proyecto destacado es... [Insertar resumen conciso de la Noticia 2].
**Anfitrión A:** Grandes ideas. Eso es todo por la actualización rápida de hoy. ¡Gracias por sintonizarnos!
Paso 4: Generar el audio del podcast línea por línea
Para evitar enviar todo el guion a la API de una sola vez, debes generar el audio frase por frase (一人一句地生成) y luego concatenarlas.
Usa tts.py de la habilidad tts local (skills/tts/scripts/tts.py). Lee el SKILL.md de la habilidad tts para conocer el uso completo y las opciones de backend.
1. Generar audio para cada línea:
Por cada línea de diálogo en el guion, ejecuta el comando speak. Usa la voz o el audio de referencia adecuado para el anfitrión correspondiente. Si el usuario proporcionó archivos de audio de referencia para los dos roles, úsalos mediante la bandera --ref-audio (requiere backend noiz y NOIZ_API_KEY). Sin una clave API, están disponibles las voces en modo invitado (consulta el SKILL.md de tts para la lista de voces).
python3 skills/tts/scripts/tts.py -t "Bienvenidos al resumen de noticias de hoy..." --ref-audio host_A.wav -o linea_01.wav
python3 skills/tts/scripts/tts.py -t "La conclusión principal es que..." --ref-audio host_B.wav -o linea_02.wav
2. Concatenar los archivos de audio:
Crea un archivo de texto (ej., lista.txt) que enumere todos los archivos de audio generados en orden:
file 'linea_01.wav'
file 'linea_02.wav'
Luego usa ffmpeg para fusionarlos en un único archivo de audio de podcast:
ffmpeg -f concat -safe 0 -i lista.txt -c copy podcast_final.wav
Paso 5: Presentar el resultado final
Una vez que se haya generado y fusionado el audio completo, presenta los resultados al usuario. DEBES proporcionar ambos contenidos:
- Muestra el guion del podcast en Markdown completamente redactado en el chat para que el usuario pueda leerlo.
- Proporciona la ruta al archivo final
podcast_final.wavpara que puedan escuchar el audio. - Resume brevemente los titulares que se incluyeron en el podcast.
Seguridad y divulgación de datos
Esta habilidad es solo de instrucciones: no contiene código ejecutable en sí misma. En tiempo de ejecución, orquesta scripts de dos habilidades dependientes:
- Scripts ejecutados:
news-aggregator-skill/scripts/fetch_news.py(obtiene noticias de fuentes públicas) ytts/scripts/tts.py(genera audio de voz). Ambos deben estar presentes localmente antes de que esta habilidad se ejecute; revisa su código y SKILL.md para obtener detalles sobre su comportamiento de red y requisitos de credenciales. - Credenciales: Esta habilidad no requiere ninguna clave API o variable de entorno directamente. La dependencia
ttspuede requerirNOIZ_API_KEYpara funciones de clonación de voz (backend noiz); sin ella, las voces en modo invitado funcionan sin configuración adicional. Consulta el SKILL.md de la habilidad tts para más detalles. - Acceso a red: Todas las llamadas de red las realizan las habilidades dependientes, no las instrucciones de esta habilidad. El agregador de noticias obtiene datos de fuentes públicas; la habilidad tts contacta a
noiz.aisolo cuando se usa el backend noiz. - Archivos escritos:
podcast_script.md,linea_*.wav(audio temporal por frase),lista.txt(lista de concatenación de ffmpeg),podcast_final.wav(salida final). Todos se escriben en el directorio de trabajo actual. - Sin estado persistente: Esta habilidad no escribe archivos de configuración, almacena credenciales ni modifica otras habilidades.