MLOps sin dolor: versionado de prompts, datos y evaluaciones
Inteligencia Artificial · Serie LLMs y n8n
Cost engineering: cómo reducir el gasto de tu sistema de IA
La mejor reducción de costos no es “usar un modelo más barato”, es diseñar el flujo: enrutar bien, limitar contexto, cachear y medir. Aquí tienes el playbook.
En el post anterior montamos evaluación continua. Ahora atacamos el gasto. El costo es tokens_prompt + tokens_salida + llamadas. Tus palancas: routing, contexto, longitud, caching y retrys inteligentes.
¿Dónde se va el dinero?
- Contexto excesivo (Top-K alto, chunks largos, documentos ruidosos).
- Modelo sobredimensionado cuando un SLM/“turbo” bastaba.
- Reintentos ciegos por errores de formato o políticas mal definidas.
- Post-procesos redundantes (verificador caro en todos los casos).
- Embeddings y reindexación sin controlar lotes ni frecuencia.
Palancas de ahorro por capa
1) Routing de modelos (difícil vs. fácil)
- Clasifica la consulta: faq/simple → SLM barato; analítico/razonamiento → LLM grande.
- Ruta por tenant (SLA/presupuesto) y por riesgo (seguridad).
- Solo “subir” de modelo ante señales: longitud, necesidad de herramienta, RAG sin evidencia suficiente.
// Pseudocódigo de router
if (isFAQ(q) || short(q)) model = "slm-basic";
else if (needsTools(q) || long(q)) model = "llm-pro";
else model = "slm-plus";
2) Control del contexto (RAG disciplinado)
- Top-K prudente (2–4) + filtros de metadatos (fecha, fuente) antes del vector search.
- Chunking con títulos y anclas; evita duplicidad semántica.
- Reranker barato → manda pocos y buenos al prompt.
- Citas obligatorias para permitir abstención y evitar relleno caro.
3) Longitud y formato
- Fija límite de palabras o
max_tokens. - Contrato de salida (JSON/tabla) para evitar verborrea.
- Evita razonamientos largos si no aportan (pide respuesta directa + campos clave).
4) Caching y memoización
- Cache semántico para preguntas repetidas (hash de intent + idioma + tenant).
- Precomputados (resúmenes de documentos, embeddings por lote nocturno).
- TTL adaptativo: más largo para FAQs, corto para info dinámica.
5) Reintentos inteligentes
- Si falla JSON → retry con dif de errores (no re-generes todo).
- Si RAG no encuentra evidencia → reformula consulta (HyDE/sinónimos) y Top-K +1, una sola vez.
- Cap de reintentos (máx. 1–2) y modo seguro si persiste el fallo.
6) Embeddings y vector store
- Embebe por lotes y fuera de pico; detecta duplicados.
- Chunk de 300–800 tokens según dominio; evita “párrafos kilométricos”.
- Reindexa con criterio (delta por
updated_at), no todo el corpus cada vez.
Quick wins (impacto inmediato)
- Baja Top-K y añade reranker sencillo.
- Impón límite de palabras y stop sequences al cierre del JSON.
- Activa cache para FAQs + TTL por tenant.
- Mueve verificaciones caras a “muestra aleatoria” (p.ej., 10%) o a casos de alto riesgo.
- Introduce router (SLM → LLM) con fallback bajo señal de fracaso.
Métricas y presupuestos
- Costo por request (p50/p95) y por tenant.
- Tokens_in/out, tamaño de contexto, % cache hit.
- Win-rate vs. baseline de calidad (para no “ahorrar” rompiendo utilidad).
// Política de presupuesto por request
{
"max_cost_usd": 0.01,
"max_tokens_in": 1200,
"max_tokens_out": 250,
"max_retries": 1
}
Micro-workflow en n8n: “Optimizador de costos online”
- Webhook → recibe
{query, tenant, risk}. - Function (router) → decide modelo (slm-basic/slm-plus/llm-pro) y límites.
- IF → si tenant low-cost → fuerza Top-K=2 y salida corta; si high-SLA → permite reranker.
- LLM → ejecuta con
max_tokens,stopy contrato de salida. - Function → valida JSON; si falla, retry con dif de errores (1 vez).
- Database → registra costo, tokens y router_decision.
- Notifier → alerta si p95 de costo supera umbral diario.
Tips Laravel/PHP
- Router de modelos como servicio:
App\Services\ModelRoutercon reglas y métricas. - Cache con claves compuestas (
sha1(tenant|lang|intent|query_norm)) y TTL por tipo. - Rate limit y budgets por API key/tenant; cortar picos caros.
- FormRequest para validar contratos de entrada y evitar reintentos innecesarios.
- Tabla
llm_costs:{request_id, tenant, model, tokens_in, tokens_out, cost_usd, router, created_at}.
A/B de costos (sin perder calidad)
Prueba variantes de Top-K, longitud de salida, modelo y cache. Promueve solo si:
- Win-rate ≥ baseline − 1pt y costo ≤ baseline − 10% (para “modo ahorro”).
- O bien, win-rate ≥ +3pts con costo ≈ baseline (para “modo calidad”).
Anti-patrones
- Ahorrar rompiendo groundedness (RAG sin filtro ni citas).
- Usar LLM “grande” por defecto en todo.
- Reintentos ilimitados para “arreglar” formato.
- Embeddings cada carga de página; hazlo por lotes y con deltas.
Conclusión
El cost engineering es arquitectura + política: router, contexto mínimo viable, contratos de salida, cache y presupuestos. Mide, itera y promueve solo lo que ahorra sin romper calidad.
← Anterior: Evaluación continua: asegurando que tu modelo no empeore con el tiempo
Artículos Relacionados
Continúa explorando contenido similar.
Bases de datos vectoriales explicadas fácil (y cuándo no las necesitas)
Leer artículo
Observabilidad para LLMs: cómo monitorear lo que ocurre bajo el capó
Leer artículo
Guardrails de salida: filtra y valida respuestas antes de usarlas
Leer artículo
In-context learning en serio: enseñando a tu modelo con pocos ejemplos
Leer artículo
Teleconsulta: más allá del video, la experiencia clínica conectada
Leer artículo
Interoperabilidad en salud: cómo lograr que todos los sistemas se hablen
Leer artículo
Prompting con intención de negocio: cómo pedirle a la IA lo que realmente quieres
Leer artículo
RAG no es magia: el verdadero secreto de los chatbots con conocimiento
Leer artículo
El nacimiento del ecosistema de salud digital: de registros en papel a la nube
Leer artículo
Inteligencia artificial en diagnósticos: el salto de la intuición al dato
Leer artículo
El rol del médico en el mundo automatizado
Leer artículo
Tokens, contexto y costos: lo que debes saber antes de empezar
Leer artículo
Del notebook al producto: llevando tu proyecto de IA a producción
Leer artículo
El impacto transformador de la realidad aumentada en la educación
Leer artículo
Cómo evaluar prompts sin sesgos (y elegir el mejor)
Leer artículo