Construindo Experiências Conversacionais Naturais
Para criar interações de conversação genuinamente naturais, é fundamental contar com síntese de voz que acompanhe o ritmo das trocas em tempo real. A AWS anunciou uma solução inovadora: a nova API de Streaming Bidirecional para o Amazon Polly, que possibilita síntese de texto para voz (TTS) simplificada e em tempo real, permitindo enviar texto e receber áudio simultaneamente.
Este novo recurso foi desenvolvido especificamente para aplicações de IA conversacional que geram texto ou áudio incrementalmente — como as respostas de modelos de linguagem de grande escala (LLMs) — onde o usuário precisa começar a sintetizar áudio antes mesmo que o texto completo esteja disponível.
O Amazon Polly já oferecia suporte para transmissão de áudio sintetizado de volta ao usuário. A inovação agora vai além, focando em comunicação bidirecional sobre HTTP/2, que traz ganhos significativos em velocidade, redução de latência e simplificação da implementação.
O Desafio da Síntese de Voz Tradicional
As APIs convencionais de conversão de texto para voz seguem um padrão simples: requisição e resposta. Isso obriga o desenvolvedor a ter o texto completo disponível antes de fazer a requisição de síntese. Embora o Amazon Polly transmita áudio de volta de forma incremental, o gargalo estava no lado da entrada — não era possível começar a enviar texto até que ele estivesse totalmente pronto.
Em aplicações conversacionais alimentadas por LLMs, onde o texto é gerado token por token, isso significava aguardar a resposta completa do modelo antes de iniciar a síntese. Imagine um assistente virtual: o modelo de linguagem gera tokens progressivamente durante vários segundos, e com TTS tradicional, o usuário tinha que esperar por:
- O LLM terminar de gerar a resposta completa
- O serviço de TTS sintetizar todo o texto
- O áudio ser baixado antes da reprodução começar
A nova API de streaming bidirecional do Amazon Polly foi projetada especificamente para eliminar esses gargalos.
O Que Mudou: Streaming Bidirecional
A API StartSpeechSynthesisStream introduz uma abordagem fundamentalmente diferente:
- Enviar texto incrementalmente: Transmita texto para o Amazon Polly conforme fica disponível — sem necessidade de aguardar sentenças ou parágrafos completos.
- Receber áudio imediatamente: Obtenha bytes de áudio sintetizados em tempo real conforme são gerados.
- Controlar o tempo de síntese: Use configuração de flush para disparar síntese imediata do texto em buffer.
- Comunicação true duplex: Envie e receba simultaneamente através de uma única conexão.
Componentes-chave da Arquitetura
A API funciona através de eventos estruturados que trafegam em ambas as direções:
| Componente | Direção | Finalidade |
| TextEvent | Entrada (Cliente → Amazon Polly) | Enviar texto a ser sintetizado |
| CloseStreamEvent | Entrada (Cliente → Amazon Polly) | Sinalizar fim da entrada de texto |
| AudioEvent | Saída (Amazon Polly → Cliente) | Receber chunks de áudio sintetizado |
| StreamClosedEvent | Saída (Amazon Polly → Cliente) | Confirmação de conclusão do stream |
Comparação: Antes e Depois
Implementação Tradicional (Separação de Arquivo)
Alcançar TTS com baixa latência costumava exigir implementações no nível da aplicação:
- Lógica customizada de separação de texto no servidor
- Múltiplas chamadas paralelas à API do Amazon Polly
- Remontagem complexa de áudio
Nova Abordagem: Streaming Bidirecional Nativo
Os benefícios agora são diretos:
- Nenhuma lógica de separação necessária
- Uma única conexão persistente
- Streaming nativo em ambas as direções
- Redução significativa da complexidade infraestrutural
Resultados de Performance
Para medir o impacto real, a AWS comparou a API tradicional SynthesizeSpeech com a nova API StartSpeechSynthesisStream usando as mesmas condições:
- 7.045 caracteres de prosa (970 palavras)
- Voz Matthew com mecanismo Generative
- Saída em MP3 a 24kHz na região us-west-2
Metodologia de Teste
Ambos os testes simularam um LLM gerando tokens a aproximadamente 30ms por palavra. No teste da API tradicional, palavras foram agrupadas até um limite de sentença, e então a sentença completa foi enviada como uma requisição SynthesizeSpeech, aguardando a resposta de áudio completa antes de continuar. O teste de streaming bidirecional enviou cada palavra conforme chegava, permitindo que o Amazon Polly começasse a síntese antes que o texto estivesse completo.
| Métrica | SynthesizeSpeech Tradicional | Streaming Bidirecional | Melhoria |
| Tempo total de processamento | 115.226 ms (~115s) | 70.071 ms (~70s) | 39% mais rápido |
| Chamadas à API | 27 | 1 | 27x menos chamadas |
| Sentenças enviadas | 27 (sequencial) | 27 (transmitidas como tokens chegam) | — |
| Total de bytes de áudio | 2.354.292 | 2.324.636 | — |
A vantagem arquitetural é clara: a API bidirecional permite enviar texto de entrada e receber áudio sintetizado simultaneamente por uma única conexão. Em vez de aguardar cada sentença se acumular antes de solicitar síntese, o texto flui para o Amazon Polly palavra por palavra conforme o LLM o produz. Para IA conversacional, isso significa que o Polly recebe e processa texto incrementalmente durante toda a geração, não tudo de uma vez após o modelo terminar. O resultado é menos tempo em espera pela síntese após a geração ser concluída — a latência de ponta a ponta do prompt até a entrega completa do áudio se reduz significativamente.
Implementação Técnica
Começando a Usar
A API de streaming bidirecional está disponível nos AWS SDKs para Java 2.x, JavaScript v3, .NET v4, C++, Go v2, Kotlin, PHP v3, Ruby v3, Rust e Swift. Suporte para CLIs (AWS Command Line Interface v1 e v2, PowerShell v4 e v5), Python e .NET v3 ainda não estão disponíveis.
Um exemplo básico de inicialização:
// Criar o cliente Polly assíncrono
PollyAsyncClient pollyClient = PollyAsyncClient.builder()
.region(Region.US_WEST_2)
.credentialsProvider(DefaultCredentialsProvider.create())
.build();
// Criar a requisição de stream
StartSpeechSynthesisStreamRequest request = StartSpeechSynthesisStreamRequest.builder()
.voiceId(VoiceId.JOANNA)
.engine(Engine.GENERATIVE)
.outputFormat(OutputFormat.MP3)
.sampleRate("24000")
.build();
Fonte
Introducing Amazon Polly Bidirectional Streaming: Real-time speech synthesis for conversational AI (https://aws.amazon.com/blogs/machine-learning/introducing-amazon-polly-bidirectional-streaming-real-time-speech-synthesis-for-conversational-ai/)
Leave a Reply