Nunca fue el pipeline
He construido un pipeline de voz cinco veces en dos años. Entra audio, salen palabras, alguien las evalúa. Cada vez estuve seguro de que la parte difícil iba a ser el modelo. Cada vez fue otra cosa, y cada vez algo distinto. Poner los cinco uno al lado del otro es como llegué a lo que estoy construyendo ahora.
Uno: el modelo es un ingrediente
El primero fue para un call center, y empezó sobre una API de voz a texto. A mitad de camino, la transcripción pasó a ser un prompt a un modelo general, después a uno más nuevo, y después a uno más nuevo todavía. Lo que venía después no cambió. La evaluación no cambió, el almacenamiento no cambió, la gente que leía los resultados nunca lo notó. Había construido todo alrededor del único componente que resultó ser el más fácil de cambiar.
Esa fue la primera conclusión, y me resistí a ella un buen rato. El modelo es un ingrediente. No construyes una cocina alrededor de un solo ingrediente.
Dos: el silencio es dinero
El segundo fue solo el frente del pipeline, la parte que toca el audio antes de que alguien pague por un token. Cortar silencios de más de tres segundos, con un umbral lo bastante prudente como para conservar cada pausa real. Detectar la música de espera, y llamarla música de espera recién a los treinta segundos, porque un falso positivo borra las palabras de un cliente y un falso negativo cuesta centavos. Bajar la frecuencia de muestreo, mono, sin pérdida.
De ahí salieron dos cosas. Los umbrales eran el producto, y estaban como constantes en un archivo que solo yo podía tocar. Y la persona que debía ajustarlos no era un ingeniero. Una analista de calidad sabe qué significa una pausa larga en una llamada de cobranza. Yo no. Los parámetros necesitaban un dueño que no fuera yo, y rangos seguros para que ese dueño no pudiera romper nada.
Tres: nadie pidió un producto
El tercero fue para una red de salud: tres jobs y casi nada más. Cincuenta workers sobre el audio, cincuenta sobre el texto, un proceso para consolidar. Fue el más chico de los cinco y el que salió más rápido, porque había dejado de construir un producto y construí solo la receta. Todo lo que los dos primeros tenían y a este le faltaba era superficie. Pantallas, endpoints, auth. La receta de abajo era la misma.
Cuatro: la respuesta es el producto
El cuarto fue audio de terreno de una eléctrica. Transcribir, resumir, extraer quince atributos. Lo que importaba no eran los atributos. Era que cada uno volvía con evidencia y una confianza, para que un supervisor pudiera revisar el que le hacía dudar en vez de confiar o desconfiar de los quince a la vez. La forma de la respuesta decidía si alguien usaba el sistema. Yo venía tratando la salida como el último paso. Es la primera decisión.
Para entonces también podía ver el costo. Más de una versión terminó con su propia calculadora de costos, siempre tarde, siempre pegada encima. El costo por minuto nunca fue un reporte. Era una restricción que la receta debió haber llevado desde el principio.
Cinco: no puedes congelar una conversación
El quinto es en tiempo real, una voz al teléfono con una persona. Toda regla anterior se rompe. No puedes cortar el silencio: el silencio es cómo sabes que es tu turno. No puedes elegir el modelo lento y preciso, gana la latencia. No puedes reintentar, alguien está esperando. Y el primer bug serio no tuvo nada que ver con el modelo. La voz perdía el acento después de una interrupción, porque el acento estaba definido en tres lugares y ninguno mandaba.
Lo que sí puedes congelar, antes de la llamada, es quién es dueño de qué. Quién es dueño del camino del audio y quién de los efectos. Una vez que ese límite fue un contrato en vez de un supuesto, el bug del acento y toda su familia desaparecieron.
Lo que suma todo eso
Pon las cinco conclusiones en fila y describen una sola cosa.
Una aplicación no debería decir «usa este modelo, este endpoint, este prompt». Debería decir «necesito este resultado, bajo estas restricciones»: este presupuesto, esta latencia, esta privacidad, esta calidad. Algo convierte esa petición en una receta exacta y la congela. Una cocina especializada ejecuta la receta, y solo esa receta. Devuelve el resultado con un comprobante: qué se hizo, con qué pasos, a qué costo, con qué confianza.
El modelo es un ingrediente que la receta nombra. Los umbrales son parámetros que la receta lleva, con un dueño que no es un ingeniero. El costo es un presupuesto que la receta no puede exceder. La forma de la salida se declara antes de que algo corra. Y cada paso dice si puede correr dos veces.
Yo no diseñé eso. Seguí construyendo la misma cosa hasta que las partes que nunca cambiaban tuvieron nombre. Eso es lo que estoy construyendo ahora.