En la segunda mitad del año pasado, actuamos como consultores técnicos para un equipo que desarrolla un SaaS de logística transfronteriza. Al principio, su funcionalidad de IA solo llamaba a GPT-4o y funcionaba con bastante estabilidad. Más tarde, el área de negocio pidió añadir modelos nacionales: la revisión de contratos iría por DeepSeek, los guiones de atención al cliente por Qwen y los textos de marketing por ERNIE. Tres semanas después, su código de backend tenía metidos 4 SDK, la lógica de autenticación estaba dispersa en 7 archivos, las facturas no cuadraban y la salida en streaming en el frontend unas veces funcionaba bien y otras mostraba caracteres corruptos. El problema no estaba en los modelos en sí, sino en la falta de una capa de pasarela de modelos.
Los escollos de la integración multimodelo casi siempre se pisan en el mismo lugar
Primero, los conflictos entre SDK. El SDK de Python de OpenAI y los SDK de varias empresas nacionales se llaman todos client, las versiones de dependencias chocan entre sí, y los clientes HTTP de Qwen y ERNIE incluso manejan los parámetros de timeout con lógicas distintas. La solución final de sus ingenieros fue crear un entorno virtual independiente para cada modelo y aislar las llamadas con subprocess. Funcionaba, pero el coste de operación y mantenimiento era absurdamente alto.
Ahora hablemos de la gestión de Keys. Los paneles de control de los cuatro proveedores tienen cada uno su propio sistema de Keys: algunos por proyecto, otros por aplicación y otros incluso con subcuentas. Las Keys de entorno de pruebas y de producción estaban mezcladas. En una ocasión, un becario subió una Key de producción a un repositorio público de GitHub. Aunque se revocó en diez minutos, esa tarde todo el equipo estuvo revisando los logs de llamadas.
La facturación era aún más dolorosa. DeepSeek cobra por token, algunos modelos de Qwen facturan entrada y salida por separado, y ciertas versiones de ERNIE todavía arrastran una lógica heredada de cobro por número de caracteres. A fin de mes, Finanzas quería una factura consolidada y los ingenieros no tenían más remedio que exportar manualmente cuatro CSV y luego mapearlos. El formato de salida en streaming tampoco era uniforme: algunos devolvían el campo data de SSE, otros envolvían todo en un JSON, y el código de parseo del frontend estaba lleno de if else.
Qué hace realmente la pasarela de modelos en medio
La esencia de una pasarela de modelos es una capa de proxy inverso más una capa de adaptación de protocolos. Hacia fuera expone una interfaz unificada compatible con OpenAI; hacia dentro traduce las peticiones al formato que cada proveedor entiende. Más tarde, en otro proyecto, reconstruimos toda esta cadena usando la capacidad de agregación de API de IA de SiCore TokenWorks, y la experiencia fue bastante directa.
La autenticación unificada es el primer paso. El lado de negocio solo usa una Key; la pasarela mantiene internamente el mapeo de credenciales hacia cada proveedor, y la rotación de Keys, los límites de cuota y la lista blanca de IP se gestionan en la capa de pasarela. La traducción de protocolos es el segundo paso: convierte el array messages del formato OpenAI en el input de Qwen, el prompt de ERNIE, y luego unifica la respuesta de vuelta a la estructura choices. El formato de los chunks de salida en streaming también se aplana en esta capa, y el frontend solo escribe una única lógica de parseo.
El enrutamiento determina a qué modelo va la petición. Se puede enrutar estáticamente por tipo de tarea o elegir dinámicamente según el coste. Cuando probamos el enrutamiento multimodelo de token8341, fijamos las peticiones de revisión de contratos hacia DeepSeek-V3 y las peticiones cortas de atención al cliente hacia la versión ligera de Qwen. El coste total de llamadas bajó alrededor de un sesenta por ciento frente a mandar todo por GPT-4o. La consolidación de costes es el último paso: la pasarela marca los puntos según etiquetas de negocio y a fin de mes genera directamente la factura desglosada, sin que Finanzas tenga que volver a armar tablas a mano.
Algunas recomendaciones prácticas para la implementación
Primero, no llames directamente a los SDK de los proveedores desde el código de negocio, aunque solo integres un modelo. Deja una capa fina de encapsulación; cuando añadas modelos más adelante, la diferencia en el volumen de cambios será de un orden de magnitud. Segundo, las Keys deben pasar por una pasarela o por un servicio de gestión de secretos; la práctica de codificarlas directamente en archivos de configuración tarde o temprano causa problemas. Tercero, empieza con estrategias de enrutamiento estáticas y, tras dos semanas con datos reales de llamadas, considera el enrutamiento dinámico por coste; de lo contrario, es fácil que por ahorrar unos céntimos enrutes peticiones críticas a un modelo inadecuado.
A la hora de elegir, fíjate en dos cosas: si es compatible con el SDK de OpenAI, porque la compatibilidad implica un coste de migración casi nulo, basta cambiar una línea de base_url para hacer el cambio; y si soporta facturación por uso y consolidación de costes, algo imprescindible para empresas que comparten una misma capacidad de IA entre varias líneas de negocio. El enfoque de SiCore TokenWorks en este aspecto es cobertura completa de API de grandes modelos nacionales, facturación por uso, y en nuestro proyecto, tras comparar, la facturación resultó bastante clara.
En una frase: una pasarela de modelos no es obligatoria, pero cuando vas a integrar el tercer modelo, pasa de ser opcional a necesaria. Como lectura complementaria, puedes revisar la documentación de especificación de la interfaz compatible con OpenAI para entender cómo se diseña la capa de protocolo y evitar rodeos al escribir tu propia encapsulación.