El problema: tus dashboards están en verde, las respuestas son basura
Tu pipeline de inferencia responde con 200 OK. Latencia P99: 420ms. Costos dentro del presupuesto. Pero el cliente reporta que el modelo "alucina nombres de productos que no existen". El monitoring tradicional no lo ve. La observabilidad de ML no es APM.
En 2026, la brecha entre "el servicio responde" y "la respuesta sirve" define si tu producto ML escala o se convierte en deuda técnica cara.
Por qué el APM tradicional falla con ML
- Fallas semánticas, no crashes: Un LLM puede devolver JSON válido, sintácticamente correcto, y factualmente incorrecto. No hay stack trace.
- No determinismo real: Incluso con
temperature=0, variaciones de punto flotante y sampling del proveedor generan hasta 15% de variación en accuracy (Trautmann et al., 2024). - Causalidad multi-paso: En agentes de 22 pasos, el fallo en el output final suele originarse en el paso 3. El tracing a nivel de call no lo ve.
Regla práctica: Si no puedes reconstruir la traza completa de una sesión (retrieval → tool calls → reasoning → output) cuando un usuario reporta un error, tu observabilidad es incompleta.
Tres capas de observabilidad que necesitas
1. Trazabilidad completa de sesión (session-level tracing)
# Lo que debes capturar en cada request:
- Prompt exacto enviado (system + few-shot + user + tool schemas)
- Completion exacta recibida
- Chunks de retrieval con scores (RAG)
- Secuencia de tool calls: args + responses
- Contexto de memoria inyectado
- Tokens in/out, model ID, costo USD computado
OpenTelemetry GenAI semantic conventions (2026, Development stability) ya estandarizan span names: chat, embeddings, execute_tool. Instruméntalo en tu capa de captura, transporta vía OTLP collector, visualiza en backend intercambiable. No acoples tu código al SDK del vendor día uno.
2. Baselines anti-drift: tres dimensiones
El drift llega silencioso. API 200, latencia OK, costos OK. Pero respuestas pierden grounding, cambian tono, inventan estrategias. Tres baselines per FutureAGI 2026:
- Input-distribution drift: Cosine distance entre centroid de tu golden set y rolling 7-day centroid de tráfico vivo. >2σ off 30-day baseline = alerta.
- Prompt-template drift: El killer silencioso. Un dev cambia el system message o few-shots sin re-baselinear. Hash del template + diff automático en CI.
- Retrieval-corpus drift (RAG): BM25/embedding overlap contra dataset baseline. Re-chunking silencioso rota top-k.
3. Evaluación inline (no batch nocturno)
Latencia promedio LLM: ~647ms. Eval overhead: +150ms (23%). LLM-as-judge GPT-4-class: +1000ms+ (duplica latencia). La solución 2026: Small Language Models (SLM) purpose-built que corren 10-20 métricas en paralelo <200ms y bloquean/transforman/rutean outputs inseguros antes de salir.
# Pipeline recomendado:
Request → LLM → SLM-eval (groundedness, faithfulness, policy)
→ if PASS: return to user
→ if FAIL: fallback / rewrite / escalate to human
RAG necesita su propia capa de eval: Retrieval quality (Precision@k, Recall@k) y Generation quality (groundedness, faithfulness) son sistemas independientes. Ambos contra golden query set mantenido. Un index refresh rutinario puede tankear answer quality sin que te enteres.
FinOps de inferencia: la métrica que casi nadie mira
Servicios tradicionales facturan por compute time. LLMs facturan por token, y tokens son salvajemente desiguales entre usuarios. Un 1% de requests patológicos come 50% del presupuesto sin disparar alerta de latencia.
Cinco señales por call (OpenObserve 2026): input tokens, output tokens, total tokens, model ID, USD computado.
La métrica derivadas más útil: P99/P50 cost ratio. Si tu request P99 cuesta >50x tu mediana, algo está muy mal. Usualmente max_tokens sin constraint en endpoint de alto tráfico. Arregla eso y las curvas de costo se aplanan dramáticamente.
Semantic caching y model routing: recortando costos 30-70%
- Semantic caching: Elimina 30-70% de llamadas API redundantes matcheando queries parafraseadas, no solo strings exactos. Diferente a prompt caching nativo (Anthropic 90% input tokens, OpenAI automatic).
- Semantic routing / model routing: Clasifica requests simples → modelo pequeño/barato; complejos → modelo flagship. Puede cortar costos de inferencia a la mitad (TechTarget 2026).
- Prompt compression + response caching: Gorilla Logic 2026: de $12M/mes a $450K/mes combinando modelo 25x más barato + semantic caching + prompt compression.
Stack recomendado 2026 (vendor-neutral)
| Capa | Opción OSS/Self-host | Cuándo usarla |
|---|---|---|
| Capture | OpenTelemetry + GenAI conventions | Siempre. Day one. |
| Transport | OTLP Collector | Siempre. Desacopla backend. |
| Eval inline | OpenLIT / Arize Phoenix (SLM judges) | Sub-200ms blocking eval. |
| Prompt mgmt | Langfuse (MIT license) | Versionado de prompts + tracings. |
| Cost monitoring | OpenObserve + custom dashboards | P99/P50 cost ratio alerting. |
AI-native platforms (LangSmith, Braintrust, Galileo, Maxim) integran rápido pero a veces encierran. Enterprise APM (Datadog, New Relic) consolida vendors pero a menudo no hace análisis causal multi-turn que agentes complejos necesitan. Si portabilidad > time-to-dashboard: OpenTelemetry + backend swappable.
Checklist de implementación (para tu próximo sprint)
- ¿Puedes reconstruir traza completa de sesión (retrieval + tools + reasoning) en <5 min cuando reportan bug?
- ¿Tienes baselines automatizados: input distribution, prompt template hash, retrieval corpus overlap?
- ¿Tu instrumentación es portable (OTel) o atada al SDK que instalaste primero?
- ¿Capturas P99/P50 cost ratio y alertas si >50x?
- ¿Tienes semantic caching layer delante de llamadas LLM caras?
Si la respuesta a cualquiera es "no", ese es tu primer gap. Los dashboards, rubricas de eval, jueces SLM, vienen después. Observabilidad real no es ver métricas; es poder explicar por qué falló cuando todo parece verde.