Por que migrar de texto para voz não é trivial
Transformar um agente de texto em um assistente de voz parece simples à primeira vista — afinal, a lógica de negócio já existe, certo? A AWS, no entanto, deixa claro que essa visão subestima as diferenças fundamentais entre os dois modelos de interação. Setores como finanças, saúde, educação e varejo estão explorando o Amazon Nova 2 Sonic para viabilizar interações de fala em tempo real, e entender o que muda na arquitetura é o primeiro passo para uma migração bem-sucedida.
A AWS também disponibilizou uma Skill no repositório de exemplos do Nova que funciona com IDEs de IA como Kiro e Claude Code para converter automaticamente um agente de texto em agente de voz.
As diferenças entre agentes de texto e de voz
Antes de qualquer decisão arquitetural, é preciso entender em quais dimensões esses dois tipos de agente se comportam de forma diferente:
- Entrada do usuário: No texto, o usuário digita no próprio ritmo, rola a tela e copia conteúdo. Na voz, tudo acontece em tempo real, com possibilidade de interrupção (barge-in) e pausas que carregam significado.
- Estilo de resposta: Agentes de texto entregam parágrafos, listas, tabelas e links de uma vez. Agentes de voz precisam de frases curtas, uma informação por vez, com confirmações intermediárias (“Quer que eu continue?”).
- Tolerância à latência: No texto, alguns segundos de espera são aceitáveis com um indicador de carregamento. Na voz, o silêncio parece falha de conexão — a resposta precisa chegar em centenas de milissegundos.
- Gerenciamento de turnos: Texto é estritamente sequencial: o usuário envia, o agente responde. Voz é fluida, com sobreposição de fala, detecção de atividade de voz (VAD) e suporte a interrupções.
- Transporte: Agentes de texto usam HTTP/REST ou Server-Sent Events (SSE). Agentes de voz exigem conexão bidirecional persistente, como WebSocket ou WebRTC.
Design de resposta: menos é mais na voz
Um exemplo prático ilustra bem a diferença. Um agente bancário de texto poderia retornar um resumo completo de todas as contas de uma vez, com saldos formatados em lista. Já um agente de voz deve quebrar essa informação em partes, guiando o usuário ativamente:
Texto: “Aqui está o resumo da sua conta: Corrente (****4521): R$ 3.245,67 | Poupança (****8903): R$ 12.450,00 | Cartão de Crédito (****2187): -R$ 1.823,45 (vencimento: 15 de março)”
Voz: “Você tem três contas. Sua conta corrente termina em 4521 com saldo de três mil duzentos e quarenta e cinco reais. Quer que eu continue com as outras ou prefere detalhes desta?”
O agente de voz fragmenta a informação e confirma antes de prosseguir, adotando um estilo de conversa autônomo que guia o usuário em vez de despejar tudo de uma vez.
Latência e chamadas de ferramentas
No texto, múltiplas chamadas sequenciais a ferramentas são toleráveis. Na voz, cada chamada adiciona um silêncio perceptível. O Amazon Nova 2 Sonic suporta chamadas assíncronas de ferramentas, o que significa que a conversa continua naturalmente enquanto as ferramentas processam em segundo plano. O modelo aceita novas entradas, pode executar múltiplas ferramentas em paralelo e se adapta caso o usuário mude de assunto no meio do processo.
Arquitetura da migração: três componentes, três evoluções
A AWS divide a arquitetura de um agente de texto em três componentes principais, e cada um evolui de forma diferente na transição para voz:

1. A aplicação cliente
O cliente de um agente de texto geralmente se comunica via REST ou streaming HTTP unidirecional — algo relativamente simples de implementar. Um cliente de voz, por outro lado, exige conexão bidirecional persistente, codificação e decodificação de áudio, lógica de barge-in, controle de ruído e exibição de transcrição. Isso frequentemente significa refatoração completa ou reescrita do componente. Por exemplo, um protótipo construído com Streamlit provavelmente precisaria ser reconstruído com um framework como React para suportar conexões bidirecionais. A AWS disponibiliza um exemplo de cliente web leve em React com WebSocket.
2. O orquestrador
O orquestrador é o núcleo de qualquer agente — gerencia o system prompt, seleciona ferramentas ou sub-agentes e mantém o contexto da conversa. Em agentes de texto, ele conecta o cliente ao modelo de raciocínio e às ferramentas. Em agentes de voz, as mesmas responsabilidades se mantêm, mas adicionam streaming de áudio, Reconhecimento Automático de Fala (ASR), Detecção de Atividade de Voz (VAD) e Síntese de Fala (TTS).
O Amazon Nova 2 Sonic oferece uma interface de streaming bidirecional que unifica todas essas funcionalidades. Em vez de encadear componentes separados de ASR → Modelo de Linguagem Grande (LLM) → TTS, o Sonic integra reconhecimento de fala, raciocínio, uso de ferramentas e síntese de fala em um único modelo. Isso permite reutilizar prompts e ferramentas existentes, simplificando a arquitetura e reduzindo a latência.

3. A camada de lógica de negócio
As ferramentas que conectam o agente aos sistemas de negócio — APIs, bancos de dados, pipelines de Geração Aumentada por Recuperação (RAG), sub-agentes — podem ser reaproveitadas com pouca ou nenhuma alteração de código. A integração usa protocolos como Protocolo de Contexto de Modelo (MCP), Agente-para-Agente (A2A) e HTTP padrão.
Exemplo prático com Strands Agents
A AWS demonstra a migração usando o framework Strands Agents. O ponto central é que o estilo de código para agentes de texto e de voz é muito parecido. Abaixo, o exemplo de ferramentas compartilhadas entre os dois tipos de agente:
from strands import Agent, tool
from strands.models import BedrockModel
# ---- Mock tools will be used in both text and voice agents ----
@tool
def authenticate_customer(account_id: str, date_of_birth: str) -> str:
"""Verify customer identity and return an auth token."""
# In real implementation, call your auth service / API
if account_id == "123456":
return "AUTH_TOKEN_ABC123"
return "Authentication failed"
@tool
def get_account_balance(auth_token: str) -> str:
"""Return the customer's current account balance."""
if auth_token == "AUTH_TOKEN_ABC123":
return "Your current checking account balance is $5,420."
return "Unauthorized request"
@tool
def get_recent_transactions(auth_token: str) -> str:
"""Return recent transactions."""
if auth_token == "AUTH_TOKEN_ABC123":
return "Recent transactions: $45 groceries, $120 utilities, $18 coffee."
return "Unauthorized request"
O agente de texto com Amazon Nova 2 Lite como LLM:
# ---- Nova 2 Lite model ----
model = BedrockModel(model_id="amazon.nova-2-lite-v1:0")
# ---- Banking assistant text agent ----
bank_agent = Agent(
model=model,
system_prompt="""You are a banking assistant. Answer user questions about account balances, recent transactions accurately. Always validate user identity before providing sensitive information.
""",
tools=[authenticate_customer, get_account_balance, get_recent_transactions],
)
E o agente de voz usando o Strands BidiAgent com Nova 2 Sonic, reaproveitando as mesmas ferramentas:
# voice_orchestrator.py — BidiAgent with sub-agents as tools
from strands.experimental.bidi.agent import BidiAgent
from strands.experimental.bidi.models.nova_sonic import BidiNovaSonicModel
# ---- Nova 2 Sonic model ----
model = BidiNovaSonicModel(
region="us-east-1",
model_id="amazon.nova-2-sonic-v1:0",
provider_config={"audio": {"voice": "tiffany", "input_sample_rate": 16000, "output_sample_rate": 16000}},
)
# ---- Banking assistant voice agent ----
agent = BidiAgent(
model=model,
system_prompt="""
You are a banking assistant. Speak naturally and answer questions about account balances, recent transactions. Confirm the customer's identity before sharing sensitive details. Use short, clear responses and acknowledge when retrieving data.
""",
tools=[authenticate_customer, get_account_balance, get_recent_transactions],
)
await agent.run(inputs=[ws_input], outputs=[ws_output])
Adaptando o system prompt para voz
O system prompt é a base tanto de agentes de texto quanto de voz — define o papel, o tom e as restrições do agente. Na transição para voz, ele precisa ser adaptado para o contexto de áudio em tempo real: mais conciso, conversacional, com orientações divididas em etapas menores e considerando a latência e o contexto de múltiplos turnos.
Exemplo de adaptação para o agente bancário:
- Prompt de texto: “You are a banking assistant. Answer user questions about account balances, recent transactions accurately. Always validate user identity before providing sensitive information.”
- Prompt adaptado para voz: “You are a banking assistant. Speak naturally and answer questions about account balances, recent transactions. Confirm the customer’s identity before sharing sensitive details. Use short, clear responses and acknowledge when retrieving data.”
No orquestrador de voz com Nova 2 Sonic, o próprio modelo gerencia o system prompt, a seleção de ferramentas e o contexto da sessão — não é mais necessário um LLM separado para raciocínio no nível do orquestrador.
Reutilizando sub-agentes com ajustes para voz
Se a arquitetura atual já usa múltiplos agentes especializados, eles podem ser reaproveitados para voz com alguns ajustes. O diagrama abaixo mostra um assistente bancário onde o orquestrador de voz aciona sub-agentes de autenticação e de consultas de hipoteca:

Os principais ajustes recomendados pela AWS são:
- Respostas mais curtas: Um sub-agente de texto pode retornar um parágrafo detalhado. Para voz, o ideal é 1 a 2 frases que o orquestrador possa falar naturalmente. A instrução no system prompt do sub-agente deve ser algo como “Resuma em 1 a 2 frases concisas”.
- Redução de latência: Escolha modelos menores e mais rápidos para sub-agentes — por exemplo, começar com Nova 2 Lite em vez de um modelo maior. Em conversas de voz, cada inferência adicional gera uma pausa perceptível. Para o Nova 2 Lite, a recomendação é limitar ou evitar o modo de raciocínio estendido para reduzir latência. Mais detalhes no Amazon Nova Developer Guide para Amazon Nova 2.
- Menor verbosidade nos resultados de ferramentas: Sub-agentes que retornam grandes payloads JSON aumentam a latência, podem reduzir a precisão e expor dados sensíveis. Respostas enxutas e direcionadas são críticas em experiências de voz.
- Mensagens de preenchimento: Com o Nova 2 Sonic, é possível fazer chamadas assíncronas de ferramentas e personalizar mensagens intermediárias, mantendo o usuário engajado enquanto o agente processa tarefas mais longas.
A maioria desses ajustes envolve mudanças de prompt e configuração, não modificações arquiteturais. As ferramentas, a lógica de negócio e o deployment dos sub-agentes permanecem os mesmos. Para mais padrões de arquitetura e boas práticas de gerenciamento de latência em agentes de voz, consulte este post.
Conclusão
Migrar um agente de texto para um assistente de voz não é apenas adicionar uma camada de áudio. O modelo de interação é fundamentalmente diferente — do design de resposta ao orçamento de latência, passando pelo gerenciamento de turnos. Com uma arquitetura multi-agente bem estruturada e o Amazon Nova 2 Sonic, a camada de lógica de negócio permanece intacta, e a transição se torna muito mais gerenciável.
Para um exemplo funcional completo de agente de voz com Amazon Nova 2 Sonic, a AWS disponibiliza o Amazon Nova 2 Sonic no Strands BidiAgent. Documentação e recursos adicionais:
- Amazon Nova 2 Sonic
- Exemplos de código e padrões reutilizáveis do Amazon Nova 2 Sonic
- Guia do usuário do Amazon Nova 2 Sonic
- Relatório técnico e model card do Amazon Nova 2 Sonic
Fonte
Migrating a text agent to a voice assistant with Amazon Nova 2 Sonic (https://aws.amazon.com/blogs/machine-learning/migrating-a-text-agent-to-a-voice-assistant-with-amazon-nova-2-sonic/)
Leave a Reply