Saltar al contenido principal

Kill switch de gasto API para agentes LLM: detén el coste antes del proveedor

L
10 min de lecturaAI API

Un patrón práctico para bloquear llamadas API de agentes LLM antes de que consuman más presupuesto.

Kill switch de gasto API para agentes LLM: detén el coste antes del proveedor

Un kill switch de gasto API para agentes LLM tiene que ejecutarse antes de que la llamada pagada salga hacia el proveedor. Si el agente puede reintentar, crear subagentes, ejecutar herramientas o cambiar de ruta, el control presupuestario debe estar en el camino de cada llamada de modelo. Un correo de alerta, un gráfico de uso o un presupuesto mensual de dashboard ayudan a gobernar, pero no siempre paran el siguiente request.

El diseño mínimo es concreto: estimar el coste máximo permitido para la llamada, reservar esa cantidad de forma atómica en un ledger compartido, llamar al proveedor solo si la reserva se aprueba y conciliar el coste real cuando llega el usage. Si la llamada rompería el límite, el agente debe recibir over_budget con retryable: false.

ControlQué detienePapel en el freno de gasto
Alerta de presupuestoEl equipo no ve a tiempo la subida de gastoAviso blando; las llamadas pueden continuar
Límite de proveedor o proyectoGobierno de cuenta en el proveedorBuen backstop, no primera puerta del agente
Presupuesto de gatewayTráfico que pasa por un proxy o gateway comúnPuede ser parada dura si no hay rutas de escape
Puerta antes del proveedorLa próxima llamada pagadaKill switch principal para agentes autónomos

Regla de parada: después de over_budget, el agente no reintenta, no programa otro trabajo pagado, no arranca un helper y no cambia a otra key de pago. Solo puede continuar si una persona cambia el límite o la política y deja registrado el motivo.

Qué es un kill switch real

Un kill switch de gasto no es un dashboard, una alerta de correo, una respuesta de rate limit ni un informe de uso posterior. Es un punto de ejecución que puede decir no antes de iniciar otro trabajo facturable. Puede vivir en el runtime del agente, en un proxy OpenAI-compatible interno, en un AI Gateway, en un wrapper frente al proveedor o en un sidecar. La condición es que controle el credential path que el agente usa de verdad.

El fallo común es de arquitectura. El equipo añade una alerta después de que el worker ya tiene acceso directo a las claves del proveedor. Eso protege la bandeja de entrada de finanzas, no la próxima llamada API. Si el agente tiene planner loop, retry loop, tool loop y cola de subagentes, todos esos caminos deben gastar mediante el mismo gate.

Usa cuatro palabras distintas en el runbook:

TérminoÚsalo paraNo lo uses para
Spend limitTecho de coste en moneda de cuentaThroughput de tokens
Rate limitRequests o tokens por ventana temporalCoste mensual total
Soft budgetAlertas, reporting y umbralesBloqueo antes de la llamada
Hard stopRequest rechazado antes de más gastoEmail o gráfico posterior

La precisión del lenguaje cambia la operación. En un incidente, la primera pregunta no es qué dashboard tiene un campo de presupuesto, sino qué componente puede bloquear la próxima llamada pagada.

Elige la capa de control

La opción más segura en producción es por capas. Pon el bloqueo principal en el request path y conserva los controles del proveedor y la plataforma como backstops.

Pila de control de gasto que compara límites de loop del agente, token cap, presupuesto de gateway, backstops de proveedor, alertas y la puerta principal antes del proveedor.

CapaHace bienDebilidadÚsala como
Límite de loop del agenteBucles infinitos, demasiados tool steps o wall-clock excesivoNo conoce la factura final si no se conecta a costeRail local
Token cap por llamadaReduce el peor coste de una llamadaNo detiene muchas llamadas pequeñasGuardrail de forma
Gate de gasto antes del proveedorBloquea el siguiente request pagado antes de salirRequiere ledger compartido y rutas cerradasKill switch principal
Presupuesto de gatewayControl entre keys, equipos, proveedores y modelosPierde tráfico que evita el gateway; la concurrencia importaControl plane común
Cap del proveedor o proyectoTecho de cuenta y política del proveedorPuede ser blando, tardío o ajeno a la semántica del agenteBackstop
Alertas y audit logsDetección, notificación y postmortemNo necesariamente paran la próxima llamadaObservabilidad

Si ya usas un proxy OpenAI-compatible, pon ahí la comprobación de presupuesto. Si solo el runtime del agente ve todas las llamadas de modelo y herramienta, empieza ahí y obliga a los subagentes a heredar el mismo budget scope. Si usas varios proveedores, un gateway interno suele ser más limpio que copiar la lógica de presupuesto en cada worker.

El diseño peligroso es un gate parcial. El planner pasa por el presupuesto, pero el evaluador, el generador de imágenes, la herramienta de recuperación o la key de emergencia lo evita. En un incidente, esa ruta lateral se convierte en la factura.

Implementa reserve, call, reconcile

Antes de la respuesta no sabes el coste exacto, así que reserva un máximo razonable y concilia después. El patrón es conservador, pero evita que la concurrencia abra un agujero.

Flujo reserve-call-reconcile con estimación máxima, reserva atómica, llamada al proveedor, registro de usage, conciliación y bloqueo antes de superar el límite.

Campos mínimos del ledger:

CampoPor qué existe
budget_idEquipo, usuario, proyecto, agente o run dueño del límite
limit_amountMáximo permitido en el periodo o run
reserved_amountGasto reservado por llamadas en vuelo
actual_amountGasto conciliado desde usage
period_start / period_endVentana diaria, mensual o por run
request_idUne la decisión con logs del proveedor
agent_run_idAgrupa planner, worker, subagente y llamadas de herramienta
decisionallowed, blocked, reconciled o released
reasoncap reached, missing estimate, unknown model, override o policy block

El flujo previo a la llamada puede ser breve:

ts
async function guardedModelCall(request) { const estimate = estimateWorstCaseCost(request); const reservation = await ledger.reserveAtomically({ budgetId: request.budgetId, requestId: request.requestId, agentRunId: request.agentRunId, amount: estimate, }); if (!reservation.allowed) { return { error: "over_budget", retryable: false }; } const response = await provider.responses.create(request.payload); await ledger.reconcile({ reservationId: reservation.id, actualAmount: costFromUsage(response.usage), usage: response.usage, }); return response; }

La palabra clave es atómica. Si cinco workers leen el mismo remaining budget y todos llaman al proveedor, los logs de usage llegan demasiado tarde. La reserva debe ser una transacción de base de datos, un script Redis, un paso de workflow durable o una operación del gateway que no se pueda intercalar para el mismo budget_id.

Para streaming, reserva el máximo que permites al inicio. Si el usage llega al final, concilia cuando cierre el stream. Si el cliente se desconecta antes de conocer el usage, no liberes toda la reserva: deja un cargo conservador, marca unknown o ejecuta una conciliación posterior con logs del proveedor.

Haz que el agente se detenga

La respuesta de presupuesto debe formar parte de la semántica del agente. Un timeout, una caída de red o algunos 429 pueden ser reintentables. over_budget no debe serlo para el mismo scope.

json
{ "error": "over_budget", "retryable": false, "budget_id": "team-alpha-agent-run", "next_allowed_action": "human_budget_override" }

Tres reglas de propagación:

ReglaMotivo
El planner deja de programar trabajo pagadoEvita que el loop raíz cree más jobs bloqueados
Los subagentes heredan el budget scopeEvita que helpers gasten después del padre
Las tools que llaman modelos usan el mismo gateEvita gasto oculto dentro de herramientas

La política de reintentos debe tener una stop list: over_budget, policy_blocked y missing_budget_scope no se reintentan. Se registran, se muestran al operador y detienen el run. Cambiar de modelo, proveedor, gateway o key no es un retry inocente; es una nueva decisión de presupuesto.

Verifica límites de proveedores y gateway

Los controles del proveedor son útiles, pero no todos son kill switches del mismo tipo. Revisa documentación actual antes de convertirlos en runbook, porque los productos cambian.

SurfaceEvidencia que conviene verificarLímite práctico
OpenAI project budgetsEn la ayuda revisada para este run, los project monthly budgets son soft spending thresholds: las API requests pueden continuar tras superar el presupuesto. La guía de rate limits también separa throughput limits de usage/spend limits.No confíes solo en project budgets como kill switch del request path.
OpenAI Responses usageLos objetos Responses exponen usage fields útiles para conciliación.Sirven después de la llamada, no para bloquear antes por sí solos.
Anthropic limitsLa documentación separa spend limits y rate limits.Buen backstop de proveedor; las llamadas directas del agente deben pasar por tu gate.
LiteLLM proxyDocumenta budgets, agent/session caps y spend tracking.Opción útil si todo el tráfico pagado pasa por el proxy.
Cloudflare AI GatewayDocumenta spend limits que pueden bloquear con HTTP 429 y advierte sobre eventual consistency.Gateway fuerte, pero prueba bursts concurrentes y rutas de bypass.
Vercel Spend ManagementPuede notificar, disparar webhooks o pausar despliegues según configuración.Freno de plataforma, no sustituto de un gate por agente.

Los incidentes de OpenAI rate limit o quota exceeded deben tener otra rama. Rate limit trata throughput; spend kill switch trata si tu política presupuestaria debe impedir la siguiente llamada pagada.

Pruébalo con cero llamadas al proveedor

La prueba decisiva no es que aparezca blocked en un log. Es que, después del límite, el proveedor falso no reciba ninguna llamada.

Lista de verificación no-provider-call con fake provider, low cap, parallel calls, streaming abort, retry stop y audit proof.

PruebaSetupCondición de paso
Fake providerSustituye endpoint por un contador localEl contador queda en 0 tras agotar presupuesto
Cap below requestDeja remaining budget por debajo de estimateover_budget antes de network call
Parallel workersLanza llamadas concurrentes que romperían el cap si hay carreraSolo pasan reservas aprobadas
Streaming abortCorta un stream a mitadLedger conserva reserva hasta reconciliar
Retry policySimula timeout, 429 y over_budgetSolo reintenta errores retryable
Audit packetRevisa ledger, request_id, agent_run_id y reasonEl operador puede explicar el bloqueo

Ejecuta estas pruebas al cambiar precios, rutas, política de reintentos, gateway o storage del ledger. Si el fake provider ve una llamada después del cap, todavía no tienes un kill switch.

Runbook de producción

  1. Congela credenciales directas del proveedor y confirma que los workers no evitan el gate.
  2. Identifica el budget scope: usuario, equipo, proyecto, agent run o cap mensual.
  3. Revisa el ledger: actual spend, reserved spend, in-flight calls y unknown reconciliation items.
  4. Confirma que el agente recibió over_budget terminal.
  5. Detén retries, sub-agent scheduling y llamadas de modelo dentro de tools.
  6. Concilia provider logs contra ledger records.
  7. Decide si subes cap, reduces tarea o cierras el run.
  8. Si hay human override, registra aprobador, nuevo cap, expiración y motivo.

El override más peligroso es probar otra ruta. Si cambias proveedor, modelo, gateway o key, trátalo como nueva decisión de presupuesto.

Preguntas frecuentes

¿Basta un OpenAI project budget?

No. La ayuda revisada para este run describe project budgets como soft thresholds. Son útiles para governance y alerts, pero el agente necesita un request-path gate antes del proveedor.

¿Debe devolver HTTP 402, 429 u otra cosa?

Usa el estado que tus clientes manejen de forma consistente, pero el payload importa más: debe decir que el cap se rompería y retryable debe ser false. Algunos gateways usan 429; un runtime interno puede usar over_budget.

¿Cómo estimar coste antes de tener respuesta?

Usa el máximo input, output, tool, image o streaming cost que permites para ese request. Luego concilia con usage y libera la reserva sobrante.

¿Qué pasa si el usage llega tarde?

Mantén la reserva hasta terminar conciliación o marca unknown con cargo conservador. Liberar todo tras un stream interrumpido reabre presupuesto antes de conocer el coste real.

¿Los subagentes necesitan presupuestos propios?

Pueden tener budgets hijos, pero deben heredar el cap del run padre. Un helper no debe gastar después de que el padre se detuvo.

¿Por dónde empezar si ya usamos gateway?

Confirma que cada paid model path pasa por el gateway. Después prueba fake provider, low cap y parallel calls. El gateway solo es kill switch principal si no hay bypass y la llamada bloqueada nunca llega al proveedor.

Share:

laozhang.ai

One API, All AI Models

AI Image

Gemini 3 Pro Image

$0.05/img
80% OFF
AI Video

Sora 2 · Veo 3.1

$0.15/video
Async API
AI Chat

GPT · Claude · Gemini

200+ models
Official Price
Served 100K+ developers
|@laozhang_cn|Get $0.1