Tienes una función de IA que funciona. ¿Dónde debería vivir el código?
Hay tres respuestas defendibles: dentro de la aplicación que la usa, en un servicio hoja al que llama el resto de tu sistema, o disuelta en el cliente llamando al proveedor directamente. El capítulo 5 despachó la tercera. Este trata de las otras dos, y de la disciplina de elegir entre ellas con evidencia.
Qué compra un servicio hoja
El nuestro vive en un servicio pequeño que no hace más que hablar con proveedores de modelos y de imágenes. Lo que eso compró:
Un solo sitio con credenciales de proveedor. No siete aplicaciones cada una con una clave en su entorno. Rotar una es un despliegue.
Un solo sitio que conoce la API de un proveedor. Cuando renombran un campo, cambia un repositorio.
Credenciales por cliente y contabilidad en una implementación, en vez de que cada consumidor reinvente la atribución.
Una caché que de verdad se comparte. Dos aplicaciones pidiendo lo mismo generado golpean una caché.
El principio general: un servicio hoja merece la pena cuando lo que envuelve es un contrato externo compartido, con credenciales y cambiante. Las cuatro palabras importan —un contrato estable, sin credenciales y usado por un solo consumidor debería ser simplemente una clase.
Qué cuesta
Un salto de red, con sus propios tiempos de espera y su propio modo de fallo. Un servicio más que desplegar, monitorizar y mantener en versión. Una frontera que hay que autenticar, que es todo el capítulo 5. Y latencia que no puedes eliminar optimizando ninguno de los dos lados.
El coste es real, y la tentación de eliminarlo es más fuerte justo cuando peor equipado estás para juzgarlo.
El salto que nadie midió
Nuestro chat llega a sus herramientas pidiéndole al proveedor que las llame, así que una invocación cruza internet dos veces más de lo estrictamente necesario. Hay un arreglo evidente —ser cliente de nuestro propio conjunto de herramientas y sacar al proveedor de ese tramo— que además desbloquea el streaming.
Es como una semana de trabajo, y durante meses el argumento a favor fue enteramente estético. Ese salto extra tiene que ser caro. ¿Tiene que serlo? Nadie lo sabía. El número no existía.
Así que en lugar de reconstruir, construimos el instrumento del capítulo 14: dos relojes del lado de las herramientas, un registro por ida y vuelta del lado del cliente y dos herramientas que no hacen entrada/salida como sondas limpias. Resta una de otra y lo que queda es inferencia más transporte.
El resultado importa menos que la disciplina:
Adivinar ese número habría sido una mala razón para rehacer el bucle de agente, y una razón igual de mala para no hacerlo.
Las dos mitades de esa frase son el punto. La medición no existe para bloquear la reescritura; existe para que, vayas por donde vayas, hayas ido a propósito. Un cambio de arquitectura justificado por una sensación es indistinguible de uno justificado por un hecho, justo hasta que no ayuda.