Creación de una capa de enrutamiento de IA resiliente y multiproveedor con Vercel AI SDK
Cómo crear una capa de enrutamiento de LLM de nivel de producción con conmutación por error (failover), modelos de respaldo y salidas estructuradas de Zod usando Vercel AI SDK.

Al implementar modelos de lenguaje grande (LLM) en producción, la confiabilidad suele ser el mayor cuello de botella. Depender de un único proveedor de modelos introduce riesgos de punto único de falla: límites de tasa de API (HTTP 429), tiempo de inactividad transitorio del servicio (HTTP 500/503) o picos repentinos de latencia.
Para garantizar el tiempo de actividad y la eficiencia de costos, los equipos necesitan una capa de enrutamiento dinámico que pueda realizar automáticamente una conmutación por error a modelos de respaldo o cambiar de proveedor según los parámetros de entrada.
En esta guía, implementaremos una capa de enrutamiento multiproveedor resiliente y con seguridad de tipos utilizando Vercel AI SDK y Zod.
La arquitectura de la resiliencia de LLM
Una capa de enrutamiento resiliente opera bajo tres principios fundamentales:
- Conmutaciones por error secuenciales: Si el proveedor primario falla, el sistema reintenta automáticamente la solicitud utilizando un proveedor secundario.
- Selección dinámica: Las solicitudes cortas se dirigen a modelos rápidos y de bajo costo, mientras que las entradas más grandes se enrutan a modelos de alto contexto.
- Validación con seguridad de tipos: Independientemente del modelo que maneje la solicitud, el esquema de salida sigue siendo idéntico y validado.
+-------------------+
| Incoming Request |
+-------------------+
|
v
+-----------------------+
| Dynamic Route Selector|
+-----------------------+
/ \
(Short Input) (Long Input)
/ \
v v
+-----------------+ +-----------------+
| Primary Model | | Primary Model |
| (OpenAI Luna) | | (Gemini-3.1-Pro)|
+-----------------+ +-----------------+
| |
(On Failure) (On Failure)
v v
+-----------------+ +-----------------+
| Fallback Model | | Fallback Model |
| (Gemini-3.5-Fl) | | (Claude-Sonnet5)|
+-----------------+ +-----------------+
\ /
\ /
v v
+-------------------------+
| Zod Schema Validation |
+-------------------------+
|
v
+-------------------+
| Validated Output |
+-------------------+Implementación de respaldos con Vercel AI SDK
Vercel AI SDK proporciona un contenedor fallback integrado que permite especificar una lista priorizada de modelos. Si falla una llamada al primer modelo, el SDK lo reintenta automáticamente con los modelos subsiguientes en el arreglo.
Así es como puede inicializar un modelo resiliente con proveedores de respaldo:
import { fallback } from 'ai';
import { openai } from '@ai-sdk/openai';
import { google } from '@ai-sdk/google';
import { anthropic } from '@ai-sdk/anthropic';
// Initialize a resilient model that crosses three distinct providers
export const resilientModel = fallback([
openai('terra'),
anthropic('claude-sonnet-5'),
google('gemini-3.1-pro')
]);Cuando llama a generateText o generateObject con resilientModel, el SDK maneja automáticamente los errores, los tiempos de espera y los reintentos.
Respaldos locales con Ollama
Para disponibilidad sin conexión, entornos híbridos o ejecución sin costo durante las pruebas locales, puede integrar modelos alojados localmente a través de Ollama. Vercel AI SDK trata a los modelos de Ollama como proveedores de primera clase, lo que le permite realizar una transición directa desde las API de la nube al hardware local (silicio local).
Así es como se configura un respaldo híbrido de la nube a lo local:
import { fallback } from 'ai';
import { openai } from '@ai-sdk/openai';
import { ollama } from '@ai-sdk/ollama';
// Fallback to a locally hosted Llama 4 Scout model if the OpenAI API is unreachable
export const hybridModel = fallback([
openai('luna'),
ollama('llama4-scout')
]);Extracción de datos estructurados con seguridad de tipos
Uno de los desafíos del enrutamiento multiproveedor es garantizar que los diferentes modelos se adhieran exactamente a la misma estructura de salida. El uso de Zod con la API generateObject resuelve esto.
Definamos un esquema para extraer metadatos estructurados de perfiles de desarrolladores:
import { generateObject } from 'ai';
import { z } from 'zod';
import { resilientModel } from './models';
const ProfileSchema = z.object({
fullName: z.string(),
skills: z.array(z.string()),
yearsOfExperience: z.number(),
certifications: z.array(
z.object({
name: z.string(),
issuer: z.string()
})
)
});
export async function extractProfile(text: string) {
try {
const { object } = await generateObject({
model: resilientModel,
schema: ProfileSchema,
prompt: `Extract structured profile details from the following resume text:\n\n${text}`
});
return object;
} catch (error) {
console.error('Failed to extract profile after exhausting all fallbacks:', error);
throw new Error('Profile extraction failed');
}
}Debido a que Zod analiza y valida la salida en tiempo de ejecución, el código de su aplicación puede confiar plenamente en la estructura devuelta, sin importar qué modelo de la cadena de respaldo haya tenido éxito.
Enrutamiento dinámico basado en el tamaño del contexto
Si bien los respaldos secuenciales protegen contra el tiempo de inactividad total, no optimizan los costos ni las limitaciones de tokens. Por ejemplo, enviar un documento de 100,000 tokens a un modelo con un límite de 128,000 tokens es correcto, pero enviarlo a un modelo con un límite de 16,000 tokens provocará un error inmediato.
Podemos construir un enrutador dinámico que inspeccione el tamaño de la entrada antes de elegir la cadena de modelos:
import { LanguageModel, generateText } from 'ai';
import { openai } from '@ai-sdk/openai';
import { google } from '@ai-sdk/google';
import { anthropic } from '@ai-sdk/anthropic';
// Define specialized model chains
const standardChain = fallback([
openai('luna'),
google('gemini-3.5-flash')
]);
const highContextChain = fallback([
google('gemini-3.1-pro'),
anthropic('claude-sonnet-5')
]);
// Estimate token count (simple word-count approximation for demo)
function estimateTokens(text: string): number {
return text.trim().split(/\s+/).length * 1.3;
}
export async function smartRouteRequest(promptText: string) {
const tokenEstimate = estimateTokens(promptText);
// Route to the appropriate chain based on input size
const model = tokenEstimate > 50000 ? highContextChain : standardChain;
return generateText({
model,
prompt: promptText
});
}Este patrón mantiene los costos bajos al dirigir las tareas estándar a modelos económicos y de alta velocidad, mientras reserva modelos premium con ventanas de contexto más grandes para cargas de trabajo pesadas.
Telemetría y observabilidad
Para monitorear con qué frecuencia su capa de enrutamiento activa los modelos de respaldo, puede conectarse a las funciones experimentales de telemetría de Vercel AI SDK. Esto recopila métricas sobre el uso de tokens, la latencia y las tasas de éxito de los proveedores:
import { generateText } from 'ai';
import { resilientModel } from './models';
const response = await generateText({
model: resilientModel,
prompt: 'Analyze this log output...',
experimental_telemetry: {
isEnabled: true,
functionId: 'analyze-logs',
metadata: {
environment: 'production'
}
}
});Estos rastreos se recopilan en colectores OpenTelemetry estándar, lo que brinda a su equipo visibilidad completa sobre las conmutaciones por error y la salud del proveedor.
Conclusión y compensaciones
Una capa de enrutamiento multiproveedor aumenta la confiabilidad. Sin embargo, es importante considerar las compensaciones:
- Diferencias de estilo: Los modelos de respaldo pueden exhibir diferentes estilos de redacción, matices de formato o características de cumplimiento.
- Inicios en frío: Reintentar una solicitud fallida contra un modelo secundario agrega latencia a la experiencia del usuario.
- Claves de API de proveedores: Su infraestructura debe configurar y mantener claves de API, niveles de límites de tasa y cuentas de facturación en múltiples proveedores.
Al utilizar las interfaces de API unificadas de Vercel AI SDK, puede crear una arquitectura de enrutamiento altamente resiliente que proteja sus aplicaciones de producción contra el tiempo de inactividad de proveedores individuales.