Habilidade de Geração de Podcast
Visão Geral
Esta habilidade gera áudio de podcast de alta qualidade a partir de conteúdo textual. O fluxo de trabalho inclui a criação de um roteiro JSON estruturado (diálogo conversacional) e a execução da geração de áudio por meio de síntese de fala.
Capacidades Principais
- Converter qualquer conteúdo textual (artigos, relatórios, documentação) em roteiros de podcast
- Gerar diálogo conversacional natural entre dois apresentadores (masculino e feminino)
- Sintetizar áudio de fala usando texto-para-fala
- Mixar segmentos de áudio em um arquivo MP3 final do podcast
- Suportar conteúdo em inglês e chinês
Fluxo de Trabalho
Etapa 1: Entender os Requisitos
Quando um usuário solicitar a geração de um podcast, identifique:
- Conteúdo de origem: O texto/artigo/relatório a ser convertido em podcast
- Idioma: Inglês ou chinês (com base no conteúdo)
- Local de saída: Onde salvar o podcast gerado
- Você não precisa verificar a pasta em
/mnt/user-data
Etapa 2: Criar Roteiro JSON Estruturado
Gere um arquivo de roteiro JSON estruturado em /mnt/user-data/workspace/ com o padrão de nomenclatura: {nome-descritivo}-script.json
A estrutura JSON:
{
"locale": "en",
"lines": [
{"speaker": "male", "paragraph": "texto do diálogo"},
{"speaker": "female", "paragraph": "texto do diálogo"}
]
}
Etapa 3: Executar a Geração
Chame o script Python:
python /mnt/skills/public/podcast-generation/scripts/generate.py \
--script-file /mnt/user-data/workspace/arquivo-roteiro.json \
--output-file /mnt/user-data/outputs/podcast-gerado.mp3 \
--transcript-file /mnt/user-data/outputs/podcast-gerado-transcricao.md
Parâmetros:
--script-file: Caminho absoluto para o arquivo JSON do roteiro (obrigatório)--output-file: Caminho absoluto para o arquivo MP3 de saída (obrigatório)--transcript-file: Caminho absoluto para o arquivo de transcrição em markdown (opcional, mas recomendado)
[!IMPORTANT]
- Execute o script em uma única chamada completa. NÃO divida o fluxo de trabalho em etapas separadas.
- O script lida com todas as chamadas de API TTS e geração de áudio internamente.
- NÃO leia o arquivo Python, apenas chame-o com os parâmetros.
- Sempre inclua
--transcript-filepara gerar uma transcrição legível para o usuário.- O provedor TTS e sua concorrência são selecionados automaticamente a partir de variáveis de ambiente — você não os escolhe nem os ajusta.
Formato do Roteiro JSON
O arquivo JSON do roteiro deve seguir esta estrutura:
{
"title": "A História da Inteligência Artificial",
"locale": "en",
"lines": [
{"speaker": "male", "paragraph": "Olá Deer! Bem-vindos de volta a mais um episódio."},
{"speaker": "female", "paragraph": "Olá a todos! Hoje temos um tópico empolgante para discutir."},
{"speaker": "male", "paragraph": "Isso mesmo! Vamos falar sobre..."}
]
}
Campos:
title: Título do episódio do podcast (opcional, usado como cabeçalho na transcrição)locale: Código do idioma - "en" para inglês ou "zh" para chinêslines: Matriz de linhas de diálogospeaker: "male" (masculino) ou "female" (feminino)paragraph: O texto do diálogo para este apresentador
Diretrizes para Escrita do Roteiro
Ao criar o roteiro JSON, siga estas diretrizes:
Requisitos de Formato
- Apenas dois apresentadores: masculino e feminino, alternando naturalmente
- Duração alvo: aproximadamente 10 minutos de diálogo (cerca de 40-60 linhas)
- Comece com o apresentador masculino dizendo uma saudação que inclua "Hello Deer"
Tom e Estilo
- Diálogo natural e conversacional - como dois amigos conversando
- Use expressões casuais e transições conversacionais
- Evite linguagem excessivamente formal ou tom acadêmico
- Inclua reações, perguntas de acompanhamento e interjeições naturais
Diretrizes de Conteúdo
- Troca frequente entre os apresentadores
- Mantenha frases curtas e fáceis de acompanhar quando faladas
- Apenas texto simples - sem formatação markdown na saída
- Traduza conceitos técnicos para uma linguagem acessível
- Sem fórmulas matemáticas, código ou notação complexa
- Torne o conteúdo envolvente e acessível para ouvintes apenas de áudio
- Exclua informações meta como datas, nomes de autores ou estrutura do documento
Exemplo de Geração de Podcast
Solicitação do usuário: "Gere um podcast sobre a história da inteligência artificial"
Etapa 1: Crie o arquivo de roteiro /mnt/user-data/workspace/ia-historia-script.json:
{
"title": "A História da Inteligência Artificial",
"locale": "en",
"lines": [
{"speaker": "male", "paragraph": "Olá Deer! Bem-vindos de volta a mais um episódio fascinante. Hoje vamos mergulhar em algo que está literalmente moldando nosso futuro - a história da inteligência artificial."},
{"speaker": "female", "paragraph": "Ah, eu adoro esse tópico! Sabe, a IA parece tão moderna, mas na verdade tem raízes que remontam a mais de setenta anos."},
{"speaker": "male", "paragraph": "Exatamente! Tudo começou nos anos 1950. O termo inteligência artificial foi cunhado por John McCarthy em 1956 em uma famosa conferência em Dartmouth."},
{"speaker": "female", "paragraph": "Espera, eles já estavam pensando em máquinas que poderiam pensar naquela época? Isso é incrível!"},
{"speaker": "male", "paragraph": "Né? Os primeiros pioneiros eram tão otimistas. Achavam que teríamos IA a nível humano dentro de uma geração."},
{"speaker": "female", "paragraph": "Mas as coisas não saíram exatamente como planejado, não é?"},
{"speaker": "male", "paragraph": "Não, de jeito nenhum. Os anos 1970 trouxeram o que é chamado de primeiro inverno da IA..."}
]
}
Etapa 2: Execute a geração:
python /mnt/skills/public/podcast-generation/scripts/generate.py \
--script-file /mnt/user-data/workspace/ia-historia-script.json \
--output-file /mnt/user-data/outputs/ia-historia-podcast.mp3 \
--transcript-file /mnt/user-data/outputs/ia-historia-transcricao.md
Isso gerará:
ia-historia-podcast.mp3: O arquivo de áudio do podcastia-historia-transcricao.md: Uma transcrição em markdown legível do podcast
Modelos Específicos
Leia o seguinte arquivo de modelo somente quando corresponder à solicitação do usuário.
- Explicador Técnico - Para converter documentação técnica e tutoriais
Formato de Saída
O podcast gerado segue o formato "Hello Deer":
- Dois apresentadores: um masculino, um feminino
- Diálogo natural e conversacional
- Começa com a saudação "Hello Deer"
- Duração alvo: aproximadamente 10 minutos
- Apresentadores alternados para um fluxo envolvente
Tratamento da Saída
Após a geração:
- Podcasts e transcrições são salvos em
/mnt/user-data/outputs/ - Compartilhe tanto o MP3 do podcast quanto a transcrição MD com o usuário usando a ferramenta
present_files - Forneça uma breve descrição do resultado da geração (tópico, duração, apresentadores)
- Ofereça-se para regenerar se forem necessários ajustes
Requisitos
As seguintes variáveis de ambiente devem estar definidas:
- Para Volcengine:
VOLCENGINE_TTS_APPIDeVOLCENGINE_TTS_ACCESS_TOKEN - Para MiniMax:
MINIMAX_API_KEY VOLCENGINE_TTS_CLUSTER: Cluster TTS Volcengine (opcional, padrão para "volcano_tts")
Notas
- Sempre execute o pipeline completo em uma única chamada - não há necessidade de testar etapas individuais ou se preocupar com timeouts
- O JSON do roteiro deve corresponder ao idioma do conteúdo (en ou zh)
- Conteúdo técnico deve ser simplificado para acessibilidade de áudio no roteiro
- Notações complexas (fórmulas, código) devem ser traduzidas para linguagem simples no roteiro
- Conteúdo longo pode resultar em podcasts mais longos
Provedores (Volcengine / MiniMax)
Selecionados automaticamente por variáveis de ambiente:
VOLCENGINE_TTS_APPID+VOLCENGINE_TTS_ACCESS_TOKENdefinidos → TTS Volcengine (padrão).- Apenas
MINIMAX_API_KEYdefinida → TTS MiniMax (/v1/t2a_v2). - Forçar com
PODCAST_GENERATION_PROVIDER=volcengine|minimax.
Substituições para MiniMax: MINIMAX_API_HOST (padrão https://api.minimaxi.com),
MINIMAX_TTS_MODEL (padrão speech-2.6-hd), MINIMAX_TTS_VOICE_MALE
(padrão male-qn-qingse), MINIMAX_TTS_VOICE_FEMALE (padrão female-tianmei).
A concorrência é gerenciada internamente por cada provedor — MiniMax executa em thread única para reduzir falhas de limite de taxa, Volcengine usa 4 workers. Não há botão de concorrência visível para o chamador; limites de taxa transitórios são tratados por nova tentativa automática com backoff.