Monitorizar un Agente IA en Producción: Métricas, Alertas, Derivas
Desplegar un agente IA sin monitorización es como conducir sin cuadro de mandos. Los problemas existen — los descubres cuando el cliente se queja, no antes. Esto es lo que implemento sistemáticamente.
Las 5 Métricas Críticas
1. Número de turnos por sesión
Un agente que tarda 12 turnos en una tarea que debería tomar 3 tiene un problema — herramienta rota, prompt ambiguo o bucle implícito.
from dataclasses import dataclass, field
import time
@dataclass
class AgentSession:
session_id: str
steps: int = 0
start_time: float = field(default_factory=time.monotonic)
tool_calls: list[str] = field(default_factory=list)
hit_max_steps: bool = False
@property
def duration(self) -> float:
return time.monotonic() - self.start_time
Umbral de alerta: media > 5 steps en los últimos 30 minutos.
2. Tasa de sesiones MAX_STEPS
Si más del 2% de las sesiones alcanza el límite, hay un bug estructural en la lógica del agente.
3. Latencia P95
La latencia mediana oculta los outliers. El P95 te dice qué experimentan los usuarios menos afortunados.
4. Tasa de error por herramienta
Cada herramienta del agente necesita su propio contador de errores. Una herramienta que falla el 10% de las veces degrada silenciosamente el conjunto.
5. Puntuación de calidad
Para agentes con salida estructurada verificable (extracción, clasificación), calcula una tasa de éxito automática.
Detectar Derivas
import statistics
def detect_drift(recent_scores: list[float], baseline_scores: list[float]) -> bool:
if not recent_scores or not baseline_scores:
return False
recent_mean = statistics.mean(recent_scores)
baseline_mean = statistics.mean(baseline_scores)
return recent_mean < baseline_mean * 0.90
Compara siempre una ventana reciente (últimas 24h) con una baseline estable (semana anterior).
Stack Mínimo
import logging, json
def log_session(session: AgentSession, error: str | None) -> None:
logging.info(json.dumps({
"session_id": session.session_id,
"steps": session.steps,
"duration_s": round(session.duration, 2),
"tools_used": session.tool_calls,
"hit_max_steps": session.hit_max_steps,
"success": error is None,
"error": error,
}))
Un log JSON por sesión. Ingestible por Datadog, Grafana o un simple grep.
Alertas Prioritarias
| Alerta | Umbral | Acción |
|---|---|---|
| Tasa MAX_STEPS | > 2% en 1h | Investigar lógica del agente |
| Steps medio | > 5 | Verificar herramientas |
| Error por herramienta | > 5% | Depurar la herramienta |
| Latencia P95 | > 30s | Verificar timeouts |
| Deriva de calidad | > 10% | Comparar changelog del modelo |
2 horas de configuración que evitan incidentes a las 2 de la mañana.
Stéphanie Caumont
Product Owner de IA · Saber más