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:

  1. 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.
  2. Opcionalmente ver. Entrada de câmera a 2-4 FPS, transmitida via streaming para o Thinker junto com o áudio.
  3. Pensar. Compor uma resposta condicionada ao histórico da conversa.
  4. 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:

  1. O Thinker emite o token de texto t_i.
  2. O Talker consome t_i (via streaming) e emite os tokens de fala s_i, s_{i+1}, ..., s_{i+k}.
  3. O decodificador de fala consome os tokens de fala à medida que chegam e emite amostras de áudio.
  4. No momento em que o Thinker estiver no token de texto t_{i+3}, o Talker já terá transmitido o áudio de t_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

  1. Seu TTFAB alvo é 300ms. Em um Thinker de 7B e um Talker de 300M, escreva a latência de cada componente.

  2. 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=1s e a câmera captura um gesto em t=1.2s.

  3. O suporte a full-duplex exige que o modelo emita áudio enquanto ouve. Proponha um formato de dados de treinamento que ensine isso.

  4. 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.

  5. 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

Leituras Adicionais

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).