Modelos omni: Qwen2.5-Omni y el pensador-hablante dividido
Type: Build
Languages: Python (stdlib, streaming pipeline latency simulator + VAD loop)
Prerequisites: Phase 12 · 19 (audio-LLMs), Phase 12 · 16 (any-to-any)
Time: ~180 minutes
Objetivos de aprendizaje
- Divide la línea de inferencia en Pensador (razón del texto) y Hablador (sintesis del habla) y explique por qué funciona la transmisión paralela.
- Calcular el presupuesto de tiempo a primer byte de audio (TTFAB) para una interacción de conversación, componente por componente.
- Describa la posición de TMRoPE en línea con el tiempo codificando en la visión, el audio y el texto dentro del Pensador.
- Nombren los tres patrones de conversación en tiempo real: medio duplex, turno, doble completo.
El problema
Un asistente de voz en tiempo real tiene que hacer mucho, rápido:
- Escucha al usuario. Tokenización de voz en tiempo real, detección de actividad de voz (VAD) para saber cuando terminan de hablar.
- Opcionalmente, la entrada de la cámara a 2-4 FPS, fluye al Thinker junto con el audio.
- Piensa, compone una respuesta condicionada al historial de conversación.
- Sintéese tokens de audio, decodifique a forma de onda, transmita a los altavoces del usuario.
Cada paso añade latencia. La sensación de conversación requiere un total de ida y vuelta < 500ms por debajo de eso, el usuario deja de notar el retraso. GPT-4o reclama ~250ms. Moshi ~160ms. Qwen2.5-Omni ~350-500ms.
Todo componente tiene que ser transmitido. Nada puede ser "parcela todo y luego decodificar".
El concepto
Pensador y hablador
La descomposición de Qwen2.5 Omni:
- Pensador: un transformador de generación de texto 7B-80B. Consume tokens de texto + imagen + audio entrelazados. Saque tokens de texto que representan lo que se dice.
- Hablante: un transformador generador de voz más pequeño (200M-1B). Consume los tokens de salida de texto de Thinker más los tokens recientes de contexto de habla.
- Decodificador de voz: un decodificador de forma de onda de transmisión (SNAC, familia MoVQGAN) que lleva tokens de voz a muestras de audio en tiempo real.
La separación es importante. El pensador tiene que ser grande para un buen razonamiento. El hablante puede ser pequeño porque su trabajo es local convertir texto en tokens de habla. El hablante más grande no es más expresivamente; es más lento.
Correr ambos en paralelo:
- El pensador emite un token de texto.
- El hablante consume t_i (a través de streaming) y emite tokens de habla s_i, s_{i+1}, ..., s_{i+k}.
- El decodificador de voz consume tokens de voz a medida que vienen y emite muestras de audio.
- Para cuando Thinker esté en el token de texto, Talker ya ha transmitido audio para t_0..t_{i+2}.
Posiciones multimodal TMRoPE alineadas en el tiempo
El pensador necesita integrar marcos de imagen (alcanzando, digamos, 4 FPS), marcos de audio (alcanzando a 50 marcos/segundo) y texto del historial de conversaciones.
TMRoPE asigna sellos de tiempo absolutos a cada token. El token de visión en t=2.3s. El token de audio en t=2.32s. El token de texto del usuario "detenta" en t=2.35s. RoPE gira la atención por sello de tiempo; el modelo los ve como temporalmente simultáneos.
Esta es la infraestructura para "el saludaba mientras saludaba" para que funcione el modelo ve el marco de vídeo y el audio en el mismo momento conceptual.
Sintesis de habla en streaming
Los tokens de voz deben transmitirse. Mini-Omni (Xie & Wu, 2024) introdujo "modelos de lenguaje pueden escuchar, hablar mientras piensan en transmisión": los tokens de salida de pensador y los tokens de salida de conversador se intercaudan en la misma secuencia.
Moshi (Défossez et al., octubre 2024) es la implementación abierta más rápida. 160ms TTFAB en un solo A100. Arquitectura: un único transformador 7B que emite tokens de texto y habla en posiciones alternadas, con un "monólogo interno" que separa el flujo de pensamiento del flujo de habla. Esto es efectivamente Thinker + Talker fusionado en un modelo con un entrenamiento cuidadoso.
VAD y la toma de vueltas
La detección de la actividad de voz se ejecuta en el lado de entrada.
- Medio dúplex: el usuario habla, el modelo escucha. El modelo habla, el usuario escucha.
- Duplex completo: ambos pueden hablar simultáneamente. El modelo puede retrocanicular ("uh-huh") o interrumpir.
Qwen2.5 Omni admite medio duplex por defecto, con la toma de vueltas a través del umbral de silencio.
Qwen3-Omni (novembre 2025)
El sucesor. Qwen3-80B Thinker, más grande Talker, mejoró TMRoPE-v2. La latencia cerca de 250ms de GPT-4o. Pesos abiertos.
Presupuesto de latencia de producción
Para una interacción de transmisión típica:
- Mic -> fichas de audio: 40-80 ms.
- Preempleo (prompt + historial): 100-200 ms en 7B, mucho más en 70B.
- Primero token de texto de pensador: 40ms.
- El hablador procesa el primer token de texto: 20 ms.
- Los primeros tokens de voz se comprometen: 40 ms.
- Descodificación residual-VQ: 30 ms.
- Descodificación de la forma de onda de habla: 50-80 ms.
TTFAB total: 320-510ms en 7B, 600-900ms en 70B. La calidad fronteriza generalmente significa 70B +; de ahí la brecha de latencia fronteriza.
Matemáticas de la tasa de tokens
En 16 kHz de habla con 50 Hz de tokens de voz base, se necesitan 50 tokens de voz por segundo de salida. El hablante debe emitir ≥50 tok/s para mantenerse al día. En un rendimiento típico de LLM de 30-80 tok/s en un H100, un pequeño 200-300M de hablante es lo suficientemente rápido; un 7B de hablante quedaría atrás.
Esta es la razón por la cual existen pequeños modelos dedicados Talker en lugar de "sólo usar el modelo principal".
Usalo
code/main.py¿Qué es esto ?
- Simula una línea de pensadores-hablantes con tasas falsas de emisión de tokens.
- Computa TTFAB para los tamaños de modelos configurables y las tasas de muestra de micrófono.
- Demuestra medio doble giro con umbral de silencio VAD.
Envío
Esta lección produceoutputs/skill-omni-streaming-budget.md. Dado el objetivo TTFAB y el conjunto de características (vision-in, bilingüe, duplex completo) de un producto de voz en tiempo real, elige Qwen2.5-Omni, Qwen3-Omni, Moshi o Mini-Omni y mide el Thinker/Talker.
Los ejercicios
- Su objetivo TTFAB es de 300ms. En un pensador 7B y 300M Talker, escriba la latencia de cada componente.
- Qwen2.5 Omni utiliza TMRoPE. Describa lo que el modelo ve para un prompt donde el usuario comienza a hablar a t=1s y la cámara capta un gesto a t=1.2s.
- El soporte de doble completo requiere que el modelo emita audio mientras escucha. Proponga un formato de datos de entrenamiento que enseñe esto.
- Lea el artículo de Moshi, sección 4. Describa la separación del "monólogo interno" y por qué evita la división Pensador-Hablador.
- Calcule el presupuesto de rendimiento: ¿a qué velocidad debe emitir un Talker tokens para mantenerse al día con el habla de 16 kHz a 50 tokens de capa base/segundo?
Términos clave
| Term | What people say | What it actually means |
|---|---|---|
| Thinker | "Reasoning brain" | Large text-generating transformer producing what to say |
| Talker | "Speech-generating mouth" | Small transformer producing discrete speech tokens from Thinker's text |
| TTFAB | "Latency budget" | Time-to-first-audio-byte: from user speech end to first audio sample out |
| TMRoPE | "Time-aligned RoPE" | Position encoding using absolute timestamps across vision, audio, text |
| Half-duplex | "Turn-taking" | User and model alternate; VAD silence detects user-done |
| Full-duplex | "Simultaneous" | Model can speak and listen at the same time; backchannel capable |
| Inner monologue | "Moshi separation" | Single-model design where thinking-stream and speaking-stream interleave |
Leer más
- Xu et al. — Qwen2.5-Omni (arXiv:2503.20215)
- Qwen Team — Qwen3-Omni (arXiv:2509.17765)
- Xie & Wu — Mini-Omni (arXiv:2408.16725)
- Défossez et al. — Moshi (arXiv:2410.00037)
- Zeng et al. — GLM-4-Voice (arXiv:2412.02612)
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.