Phase 12 - Lesson 20
Modelos Omni: Qwen2.5-Omni e a Divisão Thinker-Talker
A demonstração de produto do GPT-4o em maio de 2024 foi disruptiva não por causa do modelo subjacente, mas por causa do formato do produto — uma interface de voz em que você fala, o modelo vê o que a câmera vê e responde de volta em menos de 250ms. O ecossistema aberto passou o resto de 2024 e 2025 correndo para alcançar essa interface de produto. O Qwen2.5-Omni (março de 2025) é o design aberto de referência: um Thinker (grande transformer gerador de texto) mais um Talker (transformer paralelo gerador de fala), conectados por tokens de fala em streaming. O Mini-Omni simplificou isso, o Moshi igualou sua latência e o GLM-4-Voice o estendeu para o chinês. Esta lição analisa a arquitetura Thinker-Talker e o orçamento de latência que faz com que o diálogo em tempo real por streaming funcione.
Tipo: Build Linguagens: Python (stdlib, simulador de latência de pipeline de streaming + loop de VAD) Pré-requisitos: Phase 12 · 19 (audio-LLMs), Phase 12 · 16 (any-to-any) Tempo: ~180 minutos
Objetivos de Aprendizado
- Dividir o pipeline de inferência em Thinker (raciocínio de texto) e Talker (síntese de fala) e explicar por que o streaming paralelo funciona.
- Calcular o orçamento do tempo até o primeiro byte de áudio (TTFAB - time-to-first-audio-byte), componente por componente, para uma interação conversacional.
- Descrever a codificação de posição alinhada ao tempo do TMRoPE em visão, áudio e texto dentro do Thinker.
- Nomear os três padrões de conversação em tempo real: half-duplex, turn-taking e full-duplex.
O Problema
Um assistente de voz em tempo real precisa fazer muita coisa, rapidamente:
- Ouvir o usuário. Tokenização de fala em tempo real, detecção de atividade de voz (VAD) para saber quando o usuário terminou de falar.
- Opcionalmente ver. Entrada de câmera a 2-4 FPS, transmitida via streaming para o Thinker junto com o áudio.
- Pensar. Compor uma resposta condicionada ao histórico da conversa.
- Falar. Sintetizar tokens de áudio, decodificar para forma de onda, transmitir via streaming para os alto-falantes do usuário.
Cada etapa adiciona latência. A sensação de conversação natural requer um tempo total de ida e volta (round-trip) < 500ms — abaixo disso, o usuário deixa de notar o atraso. O GPT-4o alega ~250ms. O Moshi ~160ms. O Qwen2.5-Omni ~350-500ms.
Cada componente precisa de streaming. Nada pode ser "processar em lote tudo e depois decodificar".
O Conceito
Thinker e Talker
A decomposição do Qwen2.5-Omni:
- Thinker: um transformer gerador de texto de 7B-80B. Consome tokens intercalados de texto + imagem + áudio. Emite tokens de texto que representam o que dizer.
- Talker: um transformer gerador de fala menor (200M-1B). Consome os tokens de texto de saída do Thinker mais os tokens recentes de contexto de fala. Emite tokens discretos de fala (índices residual-VQ).
- Decodificador de fala: um decodificador de forma de onda em streaming (família SNAC, MoVQGAN) que transforma tokens de fala em amostras de áudio em tempo real.
A separação é importante. O Thinker precisa ser grande para um bom raciocínio. O Talker pode ser pequeno porque seu trabalho é local — converter texto em tokens de fala. Um Talker maior não é mais expressivo; ele é mais lento.
Executando ambos em paralelo:
- O Thinker emite o token de texto
t_i. - O Talker consome
t_i(via streaming) e emite os tokens de falas_i, s_{i+1}, ..., s_{i+k}. - O decodificador de fala consome os tokens de fala à medida que chegam e emite amostras de áudio.
- No momento em que o Thinker estiver no token de texto
t_{i+3}, o Talker já terá transmitido o áudio det_0..t_{i+2}.
TMRoPE — posições multimodais alinhadas ao tempo
O Thinker precisa integrar frames de imagem (chegando a, digamos, 4 FPS), frames de áudio (chegando a 50 frames/segundo) e texto do histórico da conversa. Uma ordenação de sequência ingênua (todas as imagens, depois todo o áudio, depois o texto) perde o alinhamento temporal.
O TMRoPE atribui timestamps absolutos a cada token. Token de visão em t=2.3s. Token de áudio em t=2.32s. Token de texto do usuário "stop" em t=2.35s. O RoPE rotaciona a atenção pelo timestamp; o modelo os vê como temporalmente concorrentes.
Esta é a infraestrutura necessária para que "ele acenou enquanto dizia olá" funcione — o modelo vê o frame de vídeo e o áudio no mesmo momento conceitual.
Síntese de fala em streaming
Os tokens de fala precisam ser transmitidos via streaming. O Mini-Omni (Xie & Wu, 2024) introduziu a ideia de que "modelos de linguagem podem ouvir e falar enquanto pensam em streaming": os tokens de saída do Thinker e os tokens de saída do Talker se intercalam na mesma sequência. O Talker dispara assim que o Thinker confirma o próximo token de texto. Sem limites de lote.
O Moshi (Défossez et al., Outubro de 2024) é a implementação aberta mais rápida. TTFAB de 160ms em uma única GPU A100. Arquitetura: um único transformer de 7B que emite tokens de texto e fala em posições alternadas, com um "monólogo interno" (inner monologue) que separa o fluxo de pensamento do fluxo de fala. Isso é efetivamente o Thinker + Talker fundidos em um único modelo com treinamento cuidadoso.
VAD e turn-taking
A detecção de atividade de voz (VAD) é executada no lado da entrada. Dois padrões:
- Half-duplex: o usuário fala, o modelo escuta. O modelo fala, o usuário escuta. Alternância clara via detecção de silêncio do VAD (~200ms).
- Full-duplex: ambos podem falar simultaneamente. O modelo pode emitir respostas de apoio ("uh-huh") ou interromper. Muito mais difícil. O Moshi suporta isso.
O Qwen2.5-Omni suporta half-duplex por padrão, com alternância de turnos (turn-taking) via limiar de silêncio. O full-duplex requer tratamento na camada de aplicação.
Qwen3-Omni (Novembro de 2025)
O sucessor. Thinker Qwen3-80B, Talker maior, TMRoPE-v2 aprimorado. Latência próxima aos 250ms do GPT-4o. Pesos abertos. Benchmarks no OmniBench competitivos com o Gemini 2.0 Live.
Orçamento de latência em produção
Para uma interação típica em streaming:
- Mic -> tokens de áudio: 40-80ms.
- Prefill (prompt + histórico): 100-200ms em 7B, muito mais em 70B.
- Primeiro token de texto do Thinker: 40ms.
- Talker processa o primeiro token de texto: 20ms.
- Confirmação dos primeiros tokens de fala: 40ms.
- Decodificação Residual-VQ: 30ms.
- Decodificação da forma de onda da fala: 50-80ms.
TTFAB total: 320-510ms em 7B, 600-900ms em 70B. A qualidade de fronteira geralmente exige mais de 70B; daí a lacuna de latência de fronteira.
Matemática da taxa de tokens
Com fala de 16kHz e 50 Hz de tokens de fala base, são necessários 50 tokens de fala por segundo de saída. O Talker deve emitir ≥50 tok/s para acompanhar. Em uma taxa de transferência típica de LLM de 30-80 tok/s em uma GPU H100, um Talker pequeno (200-300M) é rápido o suficiente; um Talker de 7B ficaria para trás.
É por isso que existem modelos dedicados pequenos de Talker, em vez de "apenas usar o modelo principal".
Use It
code/main.py:
- Simula um pipeline Thinker-Talker com taxas simuladas de emissão de tokens.
- Calcula o TTFAB para tamanhos de modelo e taxas de amostragem de microfone configuráveis.
- Demonstra a alternância de turnos half-duplex com limiar de silêncio do VAD.
Ship It
Esta lição produz outputs/skill-omni-streaming-budget.md. Dado o TTFAB alvo e o conjunto de recursos de um produto de voz em tempo real (entrada de visão, bilíngue, full-duplex), escolhe Qwen2.5-Omni, Qwen3-Omni, Moshi ou Mini-Omni e dimensiona o Thinker/Talker.
Exercícios
Seu TTFAB alvo é 300ms. Em um Thinker de 7B e um Talker de 300M, escreva a latência de cada componente.
O Qwen2.5-Omni usa TMRoPE. Descreva o que o modelo vê para um prompt em que o usuário começa a falar em
t=1se a câmera captura um gesto emt=1.2s.O suporte a full-duplex exige que o modelo emita áudio enquanto ouve. Proponha um formato de dados de treinamento que ensine isso.
Leia a Seção 4 do artigo do Moshi. Descreva a separação do "monólogo interno" (inner monologue) e por que ela evita a divisão Thinker-Talker.
Compute o orçamento de taxa de transferência: quão rápido um Talker deve emitir tokens para acompanhar uma fala de 16kHz a 50 tokens/segundo na camada base?
Key Terms
| Termo | O que as pessoas dizem | O que realmente significa |
|---|---|---|
| Thinker | "Cérebro de raciocínio" | Grande transformer gerador de texto que produz o que dizer |
| Talker | "Boca geradora de fala" | Pequeno transformer que o sintetiza para tokens discretos de fala a partir do texto do Thinker |
| TTFAB | "Orçamento de latência" | Time-to-first-audio-byte: do fim da fala do usuário até a primeira amostra de áudio de saída |
| TMRoPE | "RoPE alinhado ao tempo" | Codificação de posição usando timestamps absolutos entre visão, áudio e texto |
| Half-duplex | "Alternância de turnos" | Usuário e modelo se alternam; o silêncio no VAD detecta que o usuário terminou |
| Full-duplex | "Simultâneo" | O modelo pode falar e ouvir ao mesmo tempo; capaz de emitir respostas de apoio |
| Inner monologue | "Separação do Moshi" | Design de modelo único em que o fluxo de pensamento e o fluxo de fala se intercalam |