Skill Locutor de Notícias Diárias
Esta skill permite que o agente busque notícias em tempo real, organize-as em um roteiro de podcast conversacional e gere um arquivo de áudio lendo o roteiro em voz alta.
Instruções de Fluxo de Trabalho
Quando o usuário solicitar as últimas notícias e transformá-las em um podcast, siga estas etapas rigorosamente:
Etapa 1: Garantir que as Skills Necessárias estejam Presentes
Verifique se news-aggregator-skill e tts existem no workspace (em skills/ ou .cursor/skills/). Se alguma estiver faltando, informe ao usuário qual(is) skill(s) não foi(ram) encontrada(s) e peça para instalá-las manualmente antes de prosseguir. NÃO tente instalar skills automaticamente.
Etapa 2: Buscar as Últimas Notícias
Localize fetch_news.py no diretório da skill news-aggregator-skill (ex.: skills/news-aggregator-skill/scripts/fetch_news.py). Leia seu SKILL.md para entender o uso, se necessário.
Execute o script para buscar notícias em tempo real. Você pode especificar uma fonte (ex.: hackernews, github, all) ou palavras-chave com base na solicitação do usuário.
Exemplo de comando:
python3 skills/news-aggregator-skill/scripts/fetch_news.py --source all --limit 10 --deep
Etapa 3: Rascunhar o Roteiro do Podcast (Etapa Interna)
Leia os dados das notícias obtidas e reescreva as informações em um roteiro de podcast em Markdown. Crucialmente, priorize um formato conversacional de dois apresentadores (dupla-host) (ex.: Apresentador A e Apresentador B) em um estilo dinâmico de perguntas e respostas. O roteiro deve ser:
- Conversacional entre dois apresentadores, mas conciso: Escreva um diálogo envolvente entre dois apresentadores. O Apresentador A deve fazer perguntas perspicazes e de alto valor para guiar a conversa, e o Apresentador B deve fornecer respostas informativas e concisas. Deve parecer um diálogo inteligente e dinâmico de perguntas e respostas.
- Evite enrolação: Não inclua enrolação desnecessária ou transições muito longas. Seja direto e objetivo, retendo todas as informações e fatos críticos.
- Palestrantes Claramente Rotulados: Inicie cada linha ou parágrafo com o nome do palestrante (ex.:
Apresentador A:ouApresentador B:). - Texto claro para fala: Evite URLs complexos, links Markdown brutos ou caracteres impronunciáveis no texto falado.
Salve este roteiro em um arquivo local chamado podcast_script.md.
Exemplo de Conteúdo de podcast_script.md:
**Apresentador A:** Bem-vindos ao resumo de notícias de hoje. Temos algumas atualizações empolgantes de tecnologia. Para começar, há uma grande novidade da [Nome da Empresa]. Quais são as principais implicações desse novo lançamento para os usuários comuns?
**Apresentador B:** A principal conclusão é que... [Inserir resposta concisa e resumo da Notícia 1]. Isso muda completamente a forma como abordamos [Tópico].
**Apresentador A:** Fascinante. Mas essa nova abordagem levanta preocupações de segurança, especialmente considerando as recentes violações de dados?
**Apresentador B:** Exatamente. Especialistas apontam que... [Inserir análise ou contexto].
**Apresentador A:** Falando em mundo de código aberto, o que está em alta no GitHub hoje que os desenvolvedores devem ficar de olho?
**Apresentador B:** Um projeto de destaque é... [Inserir resumo conciso da Notícia 2].
**Apresentador A:** Ótimas ideias. Isso é tudo para a atualização rápida de hoje. Obrigado por nos acompanhar!
Etapa 4: Gerar o Áudio do Podcast Linha por Linha
Para evitar enviar o roteiro inteiro para a API de uma só vez, você deve gerar o áudio frase por frase (一人一句地生成) e depois concatená-las.
Use tts.py da skill tts local (skills/tts/scripts/tts.py). Leia o SKILL.md da skill tts para obter o uso completo e as opções de backend.
1. Gerar Áudio para Cada Linha:
Para cada linha de diálogo no roteiro, execute o comando speak. Use a voz apropriada ou áudio de referência para o respectivo apresentador. Se o usuário forneceu arquivos de áudio de referência para os dois papéis, use-os através da flag --ref-audio (requer backend noiz e NOIZ_API_KEY). Sem uma chave de API, as vozes do modo convidado estão disponíveis (consulte o SKILL.md do tts para a lista de vozes).
python3 skills/tts/scripts/tts.py -t "Bem-vindos ao resumo de notícias de hoje..." --ref-audio host_A.wav -o line_01.wav
python3 skills/tts/scripts/tts.py -t "A principal conclusão é que..." --ref-audio host_B.wav -o line_02.wav
2. Concatenar os Arquivos de Áudio:
Crie um arquivo de texto (ex.: list.txt) listando todos os arquivos de áudio gerados na ordem:
file 'line_01.wav'
file 'line_02.wav'
Em seguida, use ffmpeg para mesclá-los em um único arquivo de áudio do podcast:
ffmpeg -f concat -safe 0 -i list.txt -c copy podcast_output.wav
Etapa 5: Apresentar o Resultado Final
Após o áudio completo ser gerado e mesclado, apresente os resultados ao usuário. Você DEVE fornecer ambos os conteúdos:
- Exiba o roteiro do podcast em Markdown totalmente redigido no chat para que o usuário possa lê-lo.
- Forneça o caminho para o arquivo
podcast_output.wavfinal para que ele possa ouvir o áudio. - Resuma brevemente as manchetes que foram incluídas no podcast.
Segurança e Divulgação de Dados
Esta skill é apenas de instrução — não contém código executável por si só. Em tempo de execução, ela orquestra scripts de duas skills dependentes:
- Scripts executados:
news-aggregator-skill/scripts/fetch_news.py(busca notícias de fontes públicas) etts/scripts/tts.py(gera áudio de fala). Ambos devem estar presentes localmente antes que esta skill seja executada; revise seus códigos e SKILL.md para detalhes sobre o comportamento de rede e requisitos de credenciais. - Credenciais: Esta skill não requer chaves de API ou variáveis de ambiente diretamente. A dependência
ttspode exigirNOIZ_API_KEYpara recursos de clonagem de voz (backend noiz); sem ela, as vozes do modo convidado funcionam imediatamente. Consulte o SKILL.md da skill tts para detalhes. - Acesso à rede: Todas as chamadas de rede são feitas pelas skills dependentes, não pelas instruções desta skill. O agregador de notícias busca em fontes públicas de notícias; a skill tts contata
noiz.aiapenas quando o backend noiz é usado. - Arquivos escritos:
podcast_script.md,line_*.wav(áudio temporário por frase),list.txt(lista de concatenação do ffmpeg),podcast_output.wav(saída final). Todos são escritos no diretório de trabalho atual. - Sem estado persistente: Esta skill não escreve arquivos de configuração, armazena credenciais ou modifica outras skills.