wandres.dev
AI GATEWAY · gobernar la IA

Multi-proveedor: una puerta, muchos modelos

Workers AI, OpenAI, Anthropic, Google, Groq, Mistral o tu propio modelo alojado: todos detrás del mismo gateway y, si quieres, de la misma API. Vemos las dos formas de atravesar esa puerta —el camino nativo de cada proveedor y la API unificada donde el modelo es solo una cadena de texto—, cómo se guardan las claves con `BYOK` o se paga todo con facturación unificada, y por qué la portabilidad no es un lujo de arquitecto sino la única defensa razonable ante un mercado de modelos que se reordena cada trimestre.

⏱ 17 min

El mercado de modelos de 2026 tiene una propiedad incómoda para quien construye: el mejor modelo para tu caso concreto cambia de dueño cada pocos meses, y el precio de lo que hoy es caro cae un orden de magnitud sin avisar. Cualquier arquitectura que ate tu producto a un proveedor concreto está apostando a que esa rueda se detenga, y no se va a detener. La respuesta no es elegir bien: es diseñar para no tener que elegir para siempre. Ese es el último y quizá más estratégico papel del gateway —ser la capa de indirección donde el nombre del modelo deja de ser una dependencia y pasa a ser un parámetro.

🎯 Al terminar esta lección sabrás
  • Distinguir el camino nativo de cada proveedor de la API unificada, y saber cuándo conviene cada uno.
  • Enrutar entre Workers AI y proveedores externos cambiando únicamente el identificador del modelo.
  • Elegir entre guardar tus propias claves con BYOK y pagarlo todo con facturación unificada.
  • Usar rutas dinámicas para probar, repartir y sustituir modelos sin desplegar la aplicación.

Dos maneras de atravesar la misma puerta

La primera es el camino nativo. Cada proveedor soportado tiene su ruta propia dentro del gateway, y bajo ella hablas exactamente el dialecto de ese proveedor: su formato de petición, sus parámetros peculiares, su respuesta tal cual. El SDK oficial sigue funcionando sin cambios porque lo único que ha cambiado es la URL base. Es la vía de adopción con fricción cero y la que conserva hasta el último rincón de la API original.

La segunda es la API unificada, que expone endpoints compatibles en api.cloudflare.com y hace que el proveedor sea parte del nombre del modelo. Hay una ruta universal para cualquier modelo y modalidad, y rutas compatibles con el formato de chat de OpenAI, con su API de respuestas y con el formato de mensajes de Anthropic. Ahí un modelo se escribe como proveedor y modelo separados por una barra, y cambiar de casa es editar una cadena.

Que existan varias formas compatibles y no una sola inventada es una decisión deliberada y muy práctica: en lugar de pedirte que aprendas un formato nuevo, adopta los que tu equipo ya escribe. El SDK que tienes instalado sigue sirviendo, tus tipos siguen valiendo y la migración se reduce a la URL base. Es la misma filosofía que viste en el runtime al apostar por las APIs web estándar en vez de por una API propietaria.

// misma llamada, mismo SDK: solo cambia la cadena del modelo
const cliente = new OpenAI({
  apiKey: env.CF_API_TOKEN,
  baseURL: `https://api.cloudflare.com/client/v4/accounts/${env.CF_ACCOUNT_ID}/ai/v1`,
});

const barato = await cliente.chat.completions.create({
  model: "workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast",
  messages,
});

const potente = await cliente.chat.completions.create({
  model: "anthropic/claude-4-5-sonnet",
  messages,
});

Las dos vías aplican todo lo que has aprendido en este nivel: registro, caché, límites y protecciones se activan igual atravieses la puerta por donde la atravieses. La elección entre ellas no es de capacidades del gateway, sino de a qué renuncias.

Hay un detalle de esa API unificada que parece administrativo y es conceptual: Workers AI aparece ahí como un proveedor más, con su prefijo, junto a los externos. Los modelos que corren dentro de la propia red y los que viven en la nube de otra empresa dejan de ser dos integraciones distintas con dos SDK, dos formas de autenticarse y dos facturas, para convertirse en dos valores de la misma cadena. Esa nivelación es la que hace realista la estrategia de tener un escalón barato y local por debajo de un escalón caro y externo.

Criterio Camino nativo API unificada
Formato El dialecto exacto del proveedor Un formato común para todos
Cambiar de modelo Reescribir la integración Editar una cadena de texto
Rasgos peculiares Disponibles al completo Solo lo que el formato común cubre
Encaja en Sacar todo el jugo a un modelo Carteras de modelos intercambiables
💡
El mínimo común denominador es una elección, no un defecto

Toda capa de normalización cuesta expresividad: si un proveedor ofrece algo que los demás no tienen, la API común difícilmente lo expondrá. Eso no la invalida, la sitúa. Usa el camino nativo donde exprimas una capacidad concreta e irremplazable, y la vía unificada para el ochenta por ciento del tráfico que solo pide texto de calidad a un precio razonable. Mezclar ambas en el mismo producto no es incoherencia: es reconocer que no todas tus llamadas tienen el mismo grado de compromiso.

Las llaves del reino

Poner un proxy delante resuelve otra cosa que suele pasar desapercibida: dónde viven las claves de los proveedores. Con el modelo tradicional, cada aplicación, cada entorno y cada servicio guarda su copia de la clave de OpenAI, la de Anthropic y la de Google, y rotarlas es un ejercicio de arqueología.

BYOK invierte eso: guardas tus claves una sola vez en el gateway y tu aplicación se autentica solo contra Cloudflare. El secreto del proveedor deja de circular por tu código y por tus despliegues, la rotación pasa a ser un cambio en un sitio, y quien consigue tu token de gateway se encuentra con un permiso acotado en lugar de una clave con crédito ilimitado.

Ese cambio de credencial es más profundo de lo que parece y conecta con una idea que ya viste con los bindings: pasas de repartir un secreto que otorga poder ilimitado sobre una cuenta ajena a repartir una capacidad acotada sobre tu propia puerta. Si el token se filtra, lo revocas tú, en tu panel, sin hablar con nadie, y mientras tanto los límites de gasto que configuraste siguen acotando el daño. Con una clave de proveedor filtrada no tienes ninguna de esas tres cosas.

La alternativa va un paso más allá: con facturación unificada cargas crédito en tu cuenta de Cloudflare y llamas a modelos de terceros sin tener ninguna clave de proveedor. Recibes una sola factura, se aplica un recargo del cinco por ciento sobre el crédito que compras y el precio de inferencia se traslada sin margen añadido. Para un equipo que quiere probar seis modelos de cinco empresas distintas sin abrir seis contratos, la diferencia entre eso y el camino clásico no se mide en dinero sino en semanas.

Vale la pena mirar ese recargo con la calculadora del coste total y no solo con la del precio unitario. Frente a él hay que poner el tiempo de alta y de compras con cada proveedor, la gestión y rotación de varios secretos, la conciliación de facturas distintas con periodos distintos y, sobre todo, el coste de oportunidad de las pruebas que no haces porque abrir una cuenta más da pereza. Para un equipo pequeño en fase de exploración, ese cinco por ciento suele ser lo más barato del presupuesto; para uno grande con consumo comprometido y tarifas negociadas, BYOK es evidentemente mejor. La decisión no es de precio, es de en qué fase estás.

🔑

BYOK

Ya tienes contratos, tarifas negociadas o compromisos de consumo con tus proveedores y quieres conservarlos, pero sin repartir las claves por tu código.

🧾

Facturación unificada

Quieres empezar hoy con varios proveedores sin abrir cuentas ni gestionar secretos, y prefieres una sola factura a cambio de un recargo pequeño.

🏠

Proveedores a medida

Cualquier API por HTTPS puede registrarse como proveedor propio: un modelo interno, uno regional o uno especializado hereda caché, límites y logs igual que los demás.

Workers AI como suelo

Los modelos que corren en la propia red son el escalón barato natural: mismo gateway, misma observabilidad, sin salir de la infraestructura.

La indirección como estrategia

Con todo lo anterior en su sitio, el paso final es dejar de nombrar modelos en el código. Una ruta dinámica es un nombre con versión que tu aplicación pide como si fuera un modelo, y detrás de ese nombre puede haber una condición, un reparto porcentual, una cuota o una cadena de alternativas. La aplicación pide dynamic/soporte; qué significa eso hoy lo decide la configuración, y mañana puede significar otra cosa sin desplegar nada.

Nombrar bien esas rutas importa más de lo que sugiere su apariencia técnica. El buen nombre describe la tarea, no el modelo ni el proveedor: clasificar tickets, redactar el resumen del cliente, extraer campos de una factura. Un nombre así sobrevive a todos los cambios de catálogo y convierte la configuración en un inventario legible de lo que tu producto le pide a la IA. Un nombre que menciona al proveedor reintroduce por la puerta de atrás exactamente el acoplamiento que acabas de eliminar.

flowchart TB
APP[La aplicacion pide una ruta con nombre] --> RT[Ruta dinamica versionada]
RT --> A[Workers AI modelo pequeno]
RT --> B[OpenAI modelo generalista]
RT --> C[Anthropic modelo de razonamiento]
RT --> D[Proveedor propio autoalojado]
A --> OUT[Misma forma de respuesta]
B --> OUT
C --> OUT
D --> OUT
style RT fill:#89b4fa,color:#11111b
style OUT fill:#a6e3a1,color:#11111b

Esa indirección desbloquea prácticas que sin ella son inviables. Un reparto porcentual convierte el cambio de modelo en un despliegue gradual con vuelta atrás inmediata, en lugar de un salto de fe el viernes por la tarde. Una condición sobre metadatos manda a los usuarios de pago al modelo bueno y a los gratuitos al económico sin una sola bifurcación en tu código. Y comparar dos modelos deja de ser una hoja de cálculo con precios de catálogo para convertirse en un experimento real sobre tu tráfico real, medido con las métricas de la lección anterior.

Fíjate en el desplazamiento que acaba de ocurrir. Elegir modelo era una decisión de ingeniería, tomada una vez, defendida con argumentos de catálogo y revisada cuando algo se rompía. Convertida en una ruta con versiones, pasa a ser una decisión operativa: se propone, se despliega a una fracción del tráfico, se mide contra el coste por respuesta útil y se acepta o se revierte en minutos. No has automatizado la elección; has abaratado el error, que es lo único que permite equivocarse a menudo y barato en lugar de poco y caro.

Lo que no viaja en el cambio

Conviene desactivar aquí una fantasía cómoda: que con una API común los modelos se sustituyen como piezas de recambio. La forma de la petición se normaliza; el comportamiento del modelo no. Cambiar de modelo mueve cosas que ninguna capa de compatibilidad puede alinear por ti.

✍️

Los prompts

Un prompt afinado durante meses lo está contra las manías de un modelo concreto. En otro puede rendir peor sin que nada falle: mismo formato, misma latencia, peores respuestas.

🧮

La cuenta de tokens

Cada familia tokeniza distinto, así que el mismo texto ocupa un número diferente de tokens y el precio por millón no es directamente comparable entre catálogos.

🛠️

Herramientas y formato

La llamada a herramientas y la salida estructurada son donde antes se notan las diferencias de fiabilidad, incluso cuando la sintaxis coincide al milímetro.

📏

Tu evaluación

Sin un conjunto propio de casos con criterio de acierto, no tienes forma de afirmar que el modelo nuevo es mejor. Migrar a ciegas es cambiar un riesgo conocido por uno mudo.

Nada de esto es un argumento contra la portabilidad; es la definición precisa de lo que la portabilidad te da. No te regala la equivalencia entre modelos: te reduce el coste de probar si la hay. La parte mecánica del cambio pasa a costar minutos, y todo el presupuesto de esfuerzo se concentra donde de verdad está la incertidumbre, que es la evaluación. Un equipo portable no cambia de modelo sin pensar; cambia de modelo habiendo pensado solo en lo que importaba.

Aquí encajan las cuatro lecciones anteriores en una sola pieza. La observabilidad te da el criterio con el que juzgar el cambio; los metadatos te dan la dimensión sobre la que segmentarlo; el reparto porcentual te da la forma de probarlo sin arriesgar el producto entero; y el fallback te da la vuelta atrás cuando el experimento sale mal. Ninguna de las cuatro es interesante por separado, y juntas describen un ciclo completo: proponer, repartir, medir, quedarse o revertir. Eso es gobernar la IA, y es lo que da nombre a este nivel.

La portabilidad no se compra al final, se conserva desde el principio

Hay una asimetría brutal en el coste de la portabilidad y explica por qué tantos equipos acaban atrapados sin haber tomado nunca la decisión de atraparse. Mantenerla desde el primer día es casi gratis: significa llamar a través de una puerta en vez de directamente, tratar el nombre del modelo como configuración y no como constante, y resistir la tentación de apoyarte en un rasgo exclusivo cuando lo genérico te bastaba. Recuperarla después es carísimo: para entonces el formato peculiar de un proveedor se ha filtrado a tus tipos, tus prompts están ajustados a las manías de un modelo concreto, tu evaluación asume su comportamiento y tu factura depende de un contrato que negociaste cuando tenías otra escala. Nadie decidió eso; se llegó ahí sumando atajos razonables. Y aquí conviene ser honesto con la palabra portabilidad, porque no significa que los modelos sean intercambiables —no lo son, y un cambio siempre exige reevaluar—. Significa algo más modesto y mucho más útil: que el coste de intentarlo sea lo bastante bajo como para que la pregunta se plantee. Un equipo que puede probar un modelo nuevo en una tarde y repartirle el cinco por ciento del tráfico lo hará varias veces al año, y en un mercado que se mueve tan rápido esa cadencia de experimentación vale más que cualquier elección puntual, por acertada que fuera el día que se tomó. La puerta única no te da el mejor modelo: te da la capacidad permanente de descubrir que ha dejado de serlo. En un dominio donde el suelo se mueve cada trimestre, esa capacidad no es una comodidad de arquitecto, es la propia estrategia.

⚔️ Hazte portable en una tarde
  1. Recorre tu código y localiza cada literal con el nombre de un modelo: conviértelos en configuración y cuenta cuántos eran.
  2. Envía la misma petición al camino nativo y a la API unificada, y anota exactamente qué pierdes en el segundo.
  3. Decide entre BYOK y facturación unificada para tu equipo, argumentando desde los contratos que ya tienes y no desde el precio.
  4. Monta una ruta dinámica que reparta el tráfico entre dos modelos y compara coste por respuesta útil con los datos del log.
  5. Escribe el plan de sustitución de tu proveedor principal y cronométralo: si pasa de una tarde, ya sabes qué deuda tienes pendiente.