Saltar al contenido
Volver a proyectos

VoiceAgent

Agente de voz para finanzas personales con degradación en cascada: si los dos proveedores de IA caen, la interfaz sigue respondiendo en vez de romperse.

Resultado

Nunca

se queda mudo, aunque falle el proveedor de IA

4

tareas de dinero que resuelve hablando

Cero

claves expuestas en el navegador del usuario

17 meses

de evolución continua del producto

Restricciones

  • El cliente no puede contener credenciales de IA ni de base de datos. Todo pasa por un proxy en el backend, aunque cueste una capa extra de rutas.
  • Si OpenAI y Gemini están caídos a la vez, /api/chat devuelve una respuesta local en streaming en lugar de fallar. La interfaz nunca queda sin respuesta.
  • Sin clave de ElevenLabs el sistema funciona igual, con transcripción de menor calidad. Ninguna dependencia opcional puede ser un requisito encubierto.

El problema

Un agente conversacional por voz que registra gastos, lista movimientos, convierte divisas y sigue metas de ahorro. La parte conversacional es la visible; la difícil es que un producto de voz depende de tres servicios ajenos a la vez —modelo de lenguaje, transcripción y síntesis— y cualquiera de los tres puede estar caído cuando el usuario abre la boca.

Un agente que responde «error de proveedor» es un agente que el usuario deja de abrir.

Lo que decidí, y por qué

Degradación en cascada, no un único proveedor. OpenAI primero, Gemini como respaldo, y si ambos fallan una respuesta local en streaming. El usuario nota que la calidad bajó; no se encuentra con una pantalla rota. La misma lógica aplica a la transcripción: ElevenLabs mejora la calidad, pero su ausencia no impide usar el producto.

Las credenciales nunca tocan el navegador. El cliente es interfaz y rutas de proxy; el backend es dueño de la orquestación del chat, las herramientas, la persistencia y el STT/TTS. Cuesta una capa extra de rutas y evita la clase entera de fugas por clave embebida en el bundle.

Las herramientas son endpoints, no funciones sueltas. Registrar un gasto, listar gastos, convertir divisa y fijar una meta de ahorro viven detrás de rutas con secreto propio. El modelo pide; no ejecuta directamente contra la base de datos.

Cuatro servicios en Compose. Frontend, backend, PostgreSQL y Qdrant se levantan con un comando. Un proyecto con dos motores de persistencia y tres proveedores externos que no arranca de un tirón no lo prueba nadie.

Qué me llevo

Es el proyecto de recorrido más largo que tengo —de enero de 2025 a mayo de 2026— y lo que más cambió en ese tiempo no fue el modelo ni la interfaz: fue cuánta desconfianza tiene el sistema hacia los servicios de los que depende. La primera versión asumía que la API respondía. Las siguientes asumieron que no.