Phase 12 - Lesson 20
Modelos Omni: Qwen2.5-Omni y la División Thinker-Talker
La demostración de producto de GPT-4o en mayo de 2024 fue disruptiva no por el modelo subyacente sino por el formato del producto: una interfaz de voz en la que hablas, el modelo ve lo que ve la cámara y responde en menos de 250ms. El ecosistema abierto pasó el resto de 2024 y 2025 corriendo para alcanzar esa interfaz de producto. Qwen2.5-Omni (marzo de 2025) es el diseño abierto de referencia: un Thinker (un gran transformer generador de texto) más un Talker (un transformer paralelo generador de voz), conectados por tokens de habla en streaming. Mini-Omni lo simplificó, Moshi igualó su latencia, GLM-4-Voice lo extendió al chino. Esta lección analiza la arquitectura Thinker-Talker y el presupuesto de latencia que hace que el diálogo en tiempo real por streaming funcione.
Tipo: Build Lenguajes: Python (stdlib, simulador de latência de pipeline de streaming + bucle de VAD) Prerrequisitos: Fase 12 · 19 (audio-LLMs), Fase 12 · 16 (any-to-any) Tiempo: ~180 minutos
Objetivos de Aprendizaje
- Dividir el pipeline de inferencia en Thinker (razonamiento de texto) y Talker (síntesis de voz) y explicar por que funciona el streaming paralelo.
- Calcular el presupuesto del tiempo hasta el primer byte de audio (TTFAB - time-to-first-audio-byte) para una interacción conversacional, componente por componente.
- Describir la codificación de posición alineada en el tiempo de TMRoPE a través de visión, audio y texto dentro del Thinker.
- Nombrar los tres patrones de conversación en tiempo real: half-duplex, turn-taking y full-duplex.
El Problema
Un asistente de voz en tiempo real tiene que hacer mucho, y rápido:
- Escuchar al usuario. Tokenización de voz en tiempo real, detección de actividad de voz (VAD) para saber cuándo terminó de hablar.
- Opcionalmente ver. Entrada de cámara a 2-4 FPS, transmitida vía streaming al Thinker junto con el audio.
- Pensar. Componer una respuesta condicionada por el historial de la conversación.
- Hablar. Sintetizar tokens de audio, decodificar a forma de onda, transmitir vía streaming a los altavoces del usuario.
Cada paso añade latencia. La sensación de conversación requiere un viaje de ida y vuelta (round-trip) total < 500ms; por debajo de esto, el usuario deja de notar el retraso. GPT-4o afirma ~250ms. Moshi ~160ms. Qwen2.5-Omni ~350-500ms.
Cada componente necesita transmitir en streaming. Nada puede ser "procesar todo en lote y luego decodificar".
El Concepto
Thinker y Talker
La descomposición de Qwen2.5-Omni:
- Thinker: un transformer de 7B-80B generador de texto. Consume tokens intercalados de texto + imagen + audio. Emite tokens de texto que representan qué decir.
- Talker: un transformer generador de voz más pequeño (200M-1B). Consume los tokens de texto de salida del Thinker más los tokens de contexto de voz recientes. Emite tokens de voz discretos (índices de residual-VQ).
- Decodificador de voz: un decodificador de forma de onda en streaming (familia SNAC, MoVQGAN) que convierte tokens de voz en muestras de audio en tiempo real.
La separación importa. Thinker tiene que ser grande para un buen razonamiento. Talker puede ser pequeño porque su trabajo es local: convertir texto en tokens de voz. Un Talker más grande no es más expresivo; es más lento.
Ejecutando ambos en paralelo:
- Thinker emite el token de texto
t_i. - Talker consume
t_i(vía streaming) y emite los tokens de vozs_i, s_{i+1}, ..., s_{i+k}. - El decodificador de voz consume los tokens de voz a medida que llegan y emite muestras de audio.
- Para cuando Thinker está en el token de texto
t_{i+3}, Talker ya ha transmitido audio en streaming parat_0..t_{i+2}.
TMRoPE — posiciones multimodales alinhadas en el tiempo
Thinker necesita integrar frames de imagen (que llegan a, por ejemplo, 4 FPS), frames de audio (que llegan a 50 frames por segundo) y texto del historial de conversación. Un orden secuencial ingenuo (todas las imágenes, luego todo el audio, luego el texto) pierde la alineación temporal.
TMRoPE asigna timestamps absolutos a cada token. Token de visión en t=2.3s. Token de audio en t=2.32s. Token de texto del usuario "stop" en t=2.35s. RoPE rota la atención según el timestamp; el modelo los ve como temporalmente concurrentes.
Esta es la infraestructura para que funcione "él saludó con la mano mientras decía hola": el modelo ve el frame de video y el audio en el mismo momento conceptual.
Síntesis de voz en streaming
Los tokens de voz deben transmitirse en streaming. Mini-Omni (Xie & Wu, 2024) introdujo la idea de que "los modelos de lenguaje pueden oír y hablar mientras piensan en streaming": los tokens de salida de Thinker y los tokens de salida de Talker se intercalan en la misma secuencia. Talker se activa tan pronto como Thinker confirma el siguiente token de texto. Sin límites de lote.
Moshi (Défossez et al., octubre de 2024) es la implementación abierta más rápida. 160ms de TTFAB en una sola GPU A100. Arquitectura: un único transformer de 7B que emite tokens de texto y voz en posiciones alternas, con un "monólogo interno" (inner monologue) que separa el flujo de pensamiento del flujo de habla. Esto es efectivamente Thinker + Talker fusionados en un solo modelo con un entrenamiento cuidadoso.
VAD y turn-taking
La detección de actividad de voz (VAD) se ejecuta en el lado de la entrada. Dos patrones:
- Half-duplex: el usuario habla, el modelo escucha. El modelo habla, el usuario escucha. Alternancia clara mediante detección de silencio VAD (~200ms).
- Full-duplex: ambos pueden hablar simultáneamente. El modelo puede emitir respuestas de apoyo ("uh-huh") o interrumpir. Mucho más difícil. Moshi soporta esto.
Qwen2.5-Omni soporta half-duplex de forma predeterminada, con alternancia de turnos (turn-taking) mediante umbral de silencio. El full-duplex requiere manejo a nivel de capa de aplicación.
Qwen3-Omni (Noviembre de 2025)
El sucesor. Thinker Qwen3-80B, Talker más grande, TMRoPE-v2 mejorado. Latencia cercana a los 250ms de GPT-4o. Pesos abiertos. Benchmarks en OmniBench competitivos con Gemini 2.0 Live.
Presupuesto de latencia en producción
Para una interacción típica de streaming:
- Micrófono -> tokens de audio: 40-80ms.
- Prefill (prompt + historial): 100-200ms en 7B, mucho más en 70B.
- Primer token de texto de Thinker: 40ms.
- Talker procesa el primer token de texto: 20ms.
- Confirmación de los primeros tokens de voz: 40ms.
- Decodificación Residual-VQ: 30ms.
- Decodificación de forma de onda de voz: 50-80ms.
TTFAB total: 320-510ms en 7B, 600-900ms en 70B. La calidad de frontera usualmente requiere más de 70B; de ahí la brecha de latencia de frontera.
Matemática de la tasa de tokens
Con voz a 16kHz y tokens de voz base a 50 Hz, necesitas 50 tokens de voz por segundo de salida. Talker debe emitir ≥50 tok/s para mantener el ritmo. Con un rendimiento típico de LLM de 30-80 tok/s en una GPU H100, un Talker pequeño (200-300M) es lo suficientemente rápido; un Talker de 7B se quedaría atrás.
Esta es la razón por la que existen modelos Talker pequeños y dedicados, en lugar de "simplemente usar el modelo principal".
Use It
code/main.py:
- Simula un pipeline Thinker-Talker con tasas de emisión de tokens ficticias.
- Calcula el TTFAB para tamaños de modelo y tasas de muestreo de micrófono configurables.
- Demuestra la alternancia de turnos half-duplex con un umbral de silencio VAD.
Ship It
Esta lección produce outputs/skill-omni-streaming-budget.md. Dado el TTFAB objetivo de un producto de voz en tiempo real y su conjunto de características (entrada de visión, bilingüe, full-duplex), selecciona Qwen2.5-Omni, Qwen3-Omni, Moshi o Mini-Omni y dimensiona el Thinker/Talker.
Ejercicios
Tu TTFAB objetivo es 300ms. Con un Thinker de 7B y un Talker de 300M, detalla la latencia de cada componente.
Qwen2.5-Omni usa TMRoPE. Describe lo que ve el modelo para un prompt donde el usuario comienza a hablar en
t=1sy la cámara captura un gesto ent=1.2s.El soporte full-duplex requiere que el modelo emita audio mientras escucha. Propón un formato de datos de entrenamiento que enseñe esto.
Lee la Sección 4 del artículo de Moshi. Describe la separación de "monólogo interno" (inner monologue) y por qué evita la división Thinker-Talker.
Calcula el presupuesto de rendimiento (throughput): ¿qué tan rápido debe emitir tokens un Talker para mantenerse al día con una voz de 16kHz a 50 tokens/segundo de la capa base?
Key Terms
| Término | Lo que dice la gente | Lo que realmente significa |
|---|---|---|
| Thinker | "Cerebro de razonamiento" | Gran transformer generador de texto que produce qué decir |
| Talker | "Boca generadora de voz" | Transformer pequeño que sintetiza tokens de voz discretos a partir del texto del Thinker |
| TTFAB | "Presupuesto de latencia" | Time-to-first-audio-byte: desde el final del habla del usuario hasta la primera muestra de audio de salida |
| TMRoPE | "RoPE alinhado al tiempo" | Codificación de posición que utiliza timestamps absolutos a través de visión, audio y texto |
| Half-duplex | "Alternancia de turnos" | El usuario y el modelo se alternan; el silencio del VAD detecta que el usuario ha terminado |
| Full-duplex | "Simultáneo" | El modelo puede hablar y escuchar al mismo tiempo; capaz de emitir respuestas de apoyo |
| Inner monologue | "Separación de Moshi" | Diseño de modelo único donde el flujo de pensamiento y el flujo de habla se intercalan |