Observability and traces: "the model failed" is rarely the model
Cuando un agente falla, el reflejo es culpar al modelo. Casi siempre el culpable es el harness: contexto que se recortó mal, una tool que devolvió un error silencioso, un timeout, un prompt que se armó distinto. Y no puedes ver nada de eso si no guardas trazas.
Qué es una traza
Una traza es el registro de cada paso del agente, no solo el resultado final. Por paso:
- El prompt que vio el modelo (contexto incluido).
- La tool que pidió y con qué parámetros.
- El resultado que recibió (o el error).
- Los tokens, el costo y la latencia.
Con eso dejas de tener una opinión ("creo que el modelo es malo") y tienes un diagnóstico.
Las 5 preguntas que responde una traza
- ¿Qué contexto vio realmente el modelo? (no el que crees que le mandaste)
- ¿Qué tool llamó y con qué argumentos? (los errores de parámetros desaparecen del radar sin esto)
- ¿La tool falló? (muchos "fallos del modelo" son tools devolviendo basura)
- ¿Cuánto costó? (un bucle infinito se ve en el costo por paso)
- ¿Dónde se fue el tiempo? (modelo, tool o red)
Por qué la culpa no es del modelo
Tres causas que se ven en las trazas y se confunden con "el modelo es tonto":
- Contexto recortado o mal resumido: el agente olvida el paso 3 porque la compaction tiró lo importante. No es el modelo: es lo que le diste.
- Tool con error silencioso: la tool devolvió
nullo un mensaje de error como si fuera datos válidos. El modelo razonó bien sobre basura. - Cuello de botella fuera del modelo: vLLM documenta que, con Llama-8B en una H100, la ejecución en GPU puede ser de ~5 ms y el resto del tiempo se va en CPU (tokenizar, preparar, hacer streaming). La lentitud que culpabas al modelo era tu loop. - Source: vLLM V1 - vLLM Team
Esta es la pieza 8 (observabilidad) de las 9 del harness, y es la que te deja depurar en vez de adivinar. → Harness Engineering: las 9 piezas
Qué ya traen los frameworks
- Google ADK: logging, métricas y trazas como parte del framework, con vistas de depuración para agentes desplegados. - Source: Observability - Google ADK
- Vercel AI SDK: telemetría integrada y un panel de DevTools para ver las llamadas del modelo, los pasos y las tools mientras desarrollas. - Source: Telemetry - Vercel AI SDK · DevTools - Vercel AI SDK
Si usas un framework con esto integrado, actívalo el día uno. Si construyes a mano, el mínimo viable es un archivo JSON por ejecución con los 5 campos de arriba.
El mínimo viable (siempre)
{
"run_id": "t-1042",
"step": 3,
"tool": "search_docs",
"tool_args": { "q": "límite de reintentos" },
"tool_result_chars": 8120,
"error": null,
"tokens_in": 4210,
"tokens_out": 180,
"cost_usd": 0.0043,
"latency_ms": 940
}
Con eso ya puedes responder "¿por qué falló?" sin adivinar. Y con la traza se alimentan las evals: cada fallo real se convierte en un caso de prueba.
5 pasos
- Registra un archivo por ejecución con los 5 campos (prompt, tool, resultado, tokens/costo, latencia).
- Guarda el prompt completo que vio el modelo (es el dato que más se omite y más se necesita).
- Marca los errores explícitamente, incluidas las tools que devuelven vacío.
- Mira una traza completa a mano después de cada cambio grande; te vas a sorprender.
- Convierte cada fallo en una eval para que no vuelva.
El resto del harness está en la guía Agentes: de cero a producción.
¿Qué fue lo último que culpaste al modelo y no era el modelo? Cuéntame en los comentarios: apuesto a que fue contexto o una tool.