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