Blog
AI/Voice
10 de diciembre de 20258 min

Construir un pipeline de voz en tiempo real: del audio en bruto a la respuesta de IA

El corazón de TAMSIV es la voz. No es un truco, la voz ES la interfaz principal. Construir un pipeline de voz en tiempo real en solitario es entrar en un mundo donde cada milisegundo cuenta.

La arquitectura del pipeline

Audio PCM 16kHz mono → WebSocket (JWT) → Deepgram Live STT (VAD) → OpenRouter LLM → Function calling → OpenAI TTS → Audio response

El audio debe ser PCM de 16 bits, 16kHz, mono. El teléfono envía fragmentos binarios brutos a través de WebSocket.

El WebSocket autenticado

Token JWT de Supabase en la cadena de consulta: ws://backend:3001?token=eyJhbG.... Validación al conectar. Si el token expira en medio de una conversación, reconexión automática con un token nuevo.

Deepgram Live STT y el VAD

El VAD (Voice Activity Detection) de Deepgram detecta cuándo el usuario ha terminado de hablar. Sin VAD, se necesitaría un tiempo de espera de silencio en el cliente, demasiado corto se corta, demasiado largo se ralentiza. Deepgram lo gestiona con precisión.

La dificultad: gestionar los resultados intermedios (is_final: false) frente a los finales (is_final: true). Es necesario acumular los resultados finales para construir la transcripción completa.

La orquestación LLM

La transcripción se envía a OpenRouter con function calling. El modelo es configurable con un fallback automático. La latencia total: finalización STT (~200ms) + LLM (~800ms-2s) + TTS (~500ms). Entre 1.5 y 3 segundos.

OpenAI TTS

Voz nova. El audio se transmite de vuelta a través del mismo WebSocket. El frontend comienza a reproducir desde los primeros fragmentos, sin esperar la respuesta completa.

Las lecciones del tiempo real

Todo puede fallar en cualquier momento. Reintentos inteligentes, disyuntores, fallbacks en cada etapa. El pipeline es robusto hoy, pero cada línea de gestión de errores representa un error experimentado.