Cómo instrumentar una aplicación de IA para investigar fallos, latencia y consumo
Imagen generada con gpt-image-2.5-sunburst para InferamaFuente ↗
01

1. Empieza por las preguntas operativas, no por los campos

La observabilidad de una aplicación de IA consiste en poder reconstruir su comportamiento a partir de señales relacionadas: qué solicitud llegó, qué etapas se ejecutaron, qué falló y cuánto tardó cada parte. Para una aplicación que ya llama a un modelo mediante una API, instrumentar no significa copiar cada entrada y respuesta a un registro. Significa recoger contexto suficiente para responder preguntas de operación de forma repetible, con un alcance y una política de datos definidos.

Antes de elegir una biblioteca o crear un tablero, escribe las preguntas que el equipo necesita contestar durante un incidente. Por ejemplo: ¿qué versión de la aplicación y del prompt procesó esta solicitud? ¿Se llamó al modelo una vez o hubo reintentos? ¿Qué herramienta se ejecutó y cuánto duró? ¿La demora estuvo en la aplicación, la red, el modelo o una herramienta? ¿Qué uso comunicó la API? Estas preguntas delimitan el diseño; los campos que no ayudan a contestarlas no deberían incorporarse por costumbre.

Conviene separar observabilidad de evaluación del contenido. Este artículo se centra en el recorrido técnico y operativo de una solicitud: fallos, latencia, reintentos y consumo comunicado. No propone un método para decidir si una respuesta es verdadera, seleccionar un proveedor o diseñar un flujo conversacional. Esa frontera mantiene el registro pequeño y evita presentar una señal técnica como prueba de calidad.

Preguntas de diagnóstico y señales mínimas

Usa esta tabla para justificar cada campo o panel. Si una señal no respalda una decisión o una investigación concreta, considera omitirla.

PreguntaSeñales útilesDecisión posible
¿Qué pasó con una solicitud concreta?ID de solicitud, estado final, etapas y marcas de tiempoInvestigar una solicitud específica
¿Dónde se concentra la latencia?Duración total y duración de cada etapaRevisar la etapa lenta
¿Hubo un reintento?Número de intento, motivo y resultado de cada intentoCorregir límites, política de reintento o dependencia
¿Qué comunicó la API sobre el uso?Campos de uso disponibles en la respuesta, conservados como datos reportadosComparar consumo observado sin confundirlo con facturación
¿Se expuso información sensible?Resultado de la redacción o clasificación, sin conservar el valor sensibleAjustar filtros y controles de acceso
02

2. Dibuja el ciclo y define cómo se correlaciona

Una solicitud que parece una sola llamada desde la interfaz puede incluir varias operaciones: validación de entrada, construcción del prompt, llamada al modelo, procesamiento de la respuesta y quizá una llamada a una herramienta. Si hay reintentos, cada intento debe quedar visible como una operación distinta. El registro debe permitir reunir esos eventos sin depender de identificadores que la API externa no garantice.

Genera un identificador propio para la solicitud cuando entra en tu aplicación y propágalo por los componentes bajo tu control. Añade identificadores hijos o números de etapa para distinguir llamadas al modelo y herramientas. Si el proveedor devuelve un identificador de solicitud, guárdalo como campo adicional para facilitar una consulta o soporte posterior, pero no lo uses como único vínculo: puede no estar disponible en todos los errores o caminos de ejecución.

Define también el límite temporal de cada medición. La duración total comienza al aceptar la solicitud en la aplicación y termina cuando se entrega la respuesta o se registra el fallo final. La duración de una llamada al modelo empieza al iniciar esa llamada y acaba al recibir respuesta o error. Una llamada a herramienta usa sus propios tiempos de inicio y fin. Registrar milisegundos sin precisar esos límites produce cifras que no se pueden comparar con seguridad.

Mapa mínimo del recorrido

Aplica este esquema a una solicitud sencilla y amplíalo solo cuando la aplicación realmente tenga otras etapas.

  1. 01Crear request_id en el límite de entrada de la aplicación y registrar hora de inicio.
  2. 02Validar y preparar la petición; asociar una versión de prompt, sin guardar automáticamente su contenido.
  3. 03Registrar cada llamada al modelo como una etapa con número de intento, modelo solicitado, configuración relevante y tiempos.
  4. 04Si se llama a una herramienta, registrar su nombre, versión de esquema si existe, duración, estado y resultado normalizado.
  5. 05Registrar la respuesta final o el error terminal, la hora de cierre y la duración total.
03

3. Define un esquema mínimo y registra lo que la API realmente entrega

Un esquema mínimo debe separar los datos generados por tu aplicación de los campos recibidos del proveedor. Entre los campos propios suelen estar el identificador de solicitud, la etapa, el número de intento, el estado, las marcas de tiempo y las versiones del código y del prompt. El modelo solicitado, la configuración y el identificador devuelto por el proveedor pueden ayudar a reconstruir la ejecución, pero deben etiquetarse según su origen.

El uso comunicado por una API no es un dato universal. Puede variar según endpoint, modelo, modalidad, versión o tipo de respuesta; también puede faltar en errores o respuestas parciales. La documentación disponible para esta guía no especifica un proveedor concreto ni permite afirmar una lista universal de campos. Por ello, implementa un adaptador por API y consulta su documentación primaria vigente para comprobar nombres, unidades y condiciones. Guarda el resultado como “uso reportado por la API”, incluyendo qué campos estaban presentes, y no completes valores ausentes con ceros sin distinguirlos.

También separa el tiempo medido por la aplicación de cualquier duración comunicada por el proveedor. El primero mide el recorrido desde tu sistema; el segundo, si existe, tiene la definición del proveedor. Mantén las unidades explícitas —por ejemplo, milisegundos para duraciones— y define si las marcas de tiempo se guardan en UTC. Una convención constante permite comparar solicitudes y detectar cambios sin mezclar relojes o intervalos diferentes.

Esquema inicial por solicitud y etapa

Los campos de uso del proveedor son variables: conserva solo los que la respuesta documentada de la API ofrece para la configuración utilizada.

GrupoCampos recomendadosOrigen
Correlaciónrequest_id propio; stage_id o número de etapaAplicación
Versionesversión de aplicación; versión de prompt; modelo solicitadoAplicación y configuración
Tiempoinicio, fin y duración total; duración por etapa; unidadAplicación
Estadoresultado final normalizado; categoría de error; intentoAplicación
ProveedorID de solicitud devuelto, si está disponible; modelo resuelto, si está documentadoRespuesta de API
Usocampos de uso que la API documenta para esa operación; indicación de ausenciaRespuesta de API
Herramientasnombre, versión relevante, estado y duraciónAplicación
04

4. Instrumenta eventos estructurados de extremo a extremo

Los registros estructurados son más fáciles de filtrar y agrupar que mensajes escritos en prosa. Define nombres estables para los eventos, estados y campos; evita que cada componente use una etiqueta diferente para el mismo concepto. No hace falta adoptar un proveedor de observabilidad específico para comenzar: puedes emitir eventos JSON desde la aplicación y exportarlos a la plataforma que ya utiliza el equipo.

Un patrón útil es emitir un evento de inicio y otro de cierre por etapa, o un solo evento de cierre que incluya inicio, fin y resultado cuando la etapa sea corta y no requiera actualización en tiempo real. Para operaciones largas, el evento de cierre debe conservar el vínculo con la solicitud original. Si utilizas trazas distribuidas, propaga el contexto a través de servicios y colas bajo tu control; comprueba que el identificador no se pierde al pasar de una tarea síncrona a otra asíncrona.

El ejemplo siguiente es pseudocódigo esquemático, no una integración ejecutable con una API: los nombres de campos de respuesta y errores dependen del SDK y del proveedor. En la implementación real, adapta la extracción de uso y errores a la documentación vigente, y asegúrate de que el bloque de excepción no registre automáticamente cuerpos que puedan contener datos sensibles.

Secuencia de instrumentación

Integra la telemetría en el punto donde la aplicación conoce el contexto completo, y adapta cada respuesta externa antes de emitirla al sistema de registros.

  1. 01Crear el identificador propio de solicitud y asociar el entorno y la versión de la aplicación.
  2. 02Abrir un evento o tramo por cada operación importante; incluir el ID de solicitud y el ID de etapa.
  3. 03Medir inicio, fin y duración con una misma unidad y un reloj monotónico para intervalos.
  4. 04Normalizar estados y categorías de error, conservando por separado el código externo si está disponible y permitido.
  5. 05Extraer solo campos de uso documentados para la operación concreta; marcar ausencias explícitamente.
  6. 06Aplicar redacción antes de exportar los eventos y validar el resultado con datos sintéticos.
05

5. Minimiza datos sensibles antes de guardar o exportar

La observabilidad no exige conservar prompts completos, respuestas íntegras ni argumentos de herramientas en cada solicitud. Estos contenidos pueden incluir datos personales, secretos, información comercial o material que no es necesario para responder preguntas operativas. Empieza con metadatos y señales derivadas: identificadores opacos, versiones, longitudes, categorías de error, estados y tiempos.

Decide por campo qué acción corresponde: excluir, redactar, transformar o guardar bajo acceso restringido y retención limitada. Para correlacionar con una entidad de negocio, puede bastar una clave seudónima o una referencia interna que solo un sistema autorizado pueda resolver. Un hash no garantiza anonimato si el valor original es predecible o si puede compararse contra una lista; no lo trates automáticamente como una solución de privacidad.

Prueba la redacción antes de habilitar el registro en producción. Usa ejemplos sintéticos que incluyan casos típicos y variantes, como una dirección de correo en una entrada, un token en un encabezado o un dato confidencial dentro de una respuesta de herramienta. Comprueba tanto el evento que sale de la aplicación como el que llega al almacén: una regla aplicada solo en el panel o después de exportar deja el dato expuesto en el trayecto.

Decisión de minimización por tipo de dato

La clasificación depende del contexto legal, contractual y de seguridad de la organización; esta tabla es una guía de diseño, no una determinación jurídica.

DatoTratamiento inicialMotivo
Identificador de solicitud propioConservar con acceso operativo controladoNecesario para correlacionar eventos
Versión de prompt o aplicaciónConservar como etiqueta establePermite comparar ejecuciones
Texto completo de entrada o salidaExcluir por defecto; si es imprescindible, restringir y limitar retenciónPuede contener información sensible
Credenciales y tokens de accesoNo registrar; bloquear o redactar en el límiteSu exposición puede habilitar acceso no autorizado
Identificador de clienteUsar referencia seudónima si basta para diagnosticarReduce exposición directa
Código de error y estado normalizadosConservar sin incluir el cuerpo bruto de la respuestaApoya el diagnóstico con menor riesgo

Prueba de redacción antes de producción

Incluye pruebas automatizadas en el código que construye o exporta eventos.

  1. 01Preparar entradas y respuestas sintéticas con datos sensibles ficticios.
  2. 02Ejecutar la instrumentación y capturar el evento justo antes de exportarlo.
  3. 03Comprobar que los campos prohibidos están ausentes o redactados y que no aparecen en mensajes de error.
  4. 04Repetir la prueba con excepciones, reintentos y llamadas a herramientas, no solo con la respuesta final.
  5. 05Revisar quién puede consultar el registro y definir una duración de conservación acorde con el uso operativo.
06

6. Construye paneles y alertas para investigar, no para acumular gráficos

Un tablero útil responde a una pregunta y deja claro qué acción puede seguir. Empieza con tres vistas: salud de solicitudes, distribución de latencia y uso reportado. Para salud, muestra solicitudes completadas, fallidas y sin resultado final, separadas por categoría de error. Para latencia, muestra duración total y por etapa, con percentiles además de promedios, porque un promedio puede ocultar una cola de solicitudes lentas. Para uso, muestra únicamente los campos disponibles y separa los datos por modelo, versión o tipo de solicitud cuando esa segmentación ayude a encontrar cambios.

Las alertas deben representar una condición que alguien pueda investigar o corregir. Una tasa de errores que supera el comportamiento habitual durante un intervalo definido puede justificar una alerta; un fallo aislado puede quedar en el registro sin despertar a un equipo. Los umbrales dependen del volumen y de las expectativas del servicio, así que no conviene fijar un valor universal sin datos. Añade la ventana de observación, el responsable y el enlace a la consulta o al procedimiento de respuesta.

No presentes una estimación de coste basada en uso reportado como importe facturado. Para una estimación interna, multiplica las unidades disponibles por los precios y reglas aplicables a la cuenta y configuración concretas, y etiqueta el resultado como estimación. Los importes reales pueden depender de condiciones que no se deducen solo del evento de respuesta; verifica cualquier reconciliación con la documentación y los datos oficiales de facturación vigentes del proveedor correspondiente.

Tablero de diagnóstico inicial

Añade dimensiones solo cuando permitan localizar una causa sin exponer información personal innecesaria.

VistaMedidasUso diagnóstico
Saludsolicitudes totales, completadas, fallidas y categoría de errorDetectar cambios en la tasa de fallos
Latenciaduración total y por etapa; mediana y percentilesLocalizar etapas lentas y colas largas
Reintentosintentos por solicitud, motivo y resultadoDetectar fallos ocultos o exceso de llamadas
Uso comunicadovalores presentes por API, modelo y versiónObservar cambios de consumo reportado
Calidad de telemetríaeventos sin ID, eventos sin cierre, campos esperados ausentesDetectar instrumentación incompleta
07

7. Investiga una solicitud fallida de forma reproducible

Cuando llega un reporte, fija primero el ID de solicitud y confirma que corresponde al entorno y periodo correctos. Reúne los eventos ordenados por hora y etapa. Antes de interpretar el resultado, verifica que la traza esté completa: ¿hay evento de inicio y cierre? ¿faltan tramos de herramienta? ¿el registro marca un error terminal o solo un intento fallido? Una ejecución incompleta puede parecer un fallo del modelo cuando la evidencia simplemente no se guardó.

Después, reconstruye versiones y secuencia: código de aplicación, versión de prompt, modelo solicitado y cualquier modelo resuelto que se haya podido observar, número de intentos, herramientas y estados. Compara la duración total con la suma de etapas, teniendo en cuenta trabajo local, colas y tiempos que no estén instrumentados. Si la suma no coincide, anótalo como una laguna de telemetría, no como prueba de una causa.

Por último, separa hechos de hipótesis. Un timeout del proveedor puede estar documentado como el resultado de un intento; no demuestra por sí solo por qué ocurrió. Una herramienta lenta puede explicar una parte del tiempo medido, pero no necesariamente el comportamiento final. Registra qué se sabe, qué falta y qué comprobación permitiría distinguir las hipótesis. Esta disciplina evita atribuir causas que el registro no demuestra.

Procedimiento de investigación

Sigue el mismo orden en cada incidente para conservar una explicación verificable.

  1. 01Buscar el request_id propio y confirmar entorno, fecha y versión de la aplicación.
  2. 02Ordenar los eventos por inicio y etapa; comprobar si hay huecos o cierres ausentes.
  3. 03Reconstruir prompt, modelo, configuración, intentos y herramientas a partir de versiones e identificadores registrados.
  4. 04Comparar duración total con las duraciones de etapas y localizar la parte no explicada.
  5. 05Revisar estados, categorías de error y campos de uso disponibles, distinguiendo ausencia de valor cero.
  6. 06Separar hechos observados de hipótesis; realizar una comprobación adicional antes de declarar una causa.
  7. 07Documentar qué campo o evento faltó y añadir una prueba para confirmar que la instrumentación cubre ese caso.
08

8. Comprueba la instrumentación y amplíala por etapas

La instrumentación también necesita pruebas: una aplicación puede funcionar mientras pierde IDs, omite el evento de cierre o registra datos que debían redactarse. Ejecuta pruebas controladas para éxito, error, timeout, reintento y llamada a herramienta. En cada caso, comprueba la secuencia completa desde el evento de entrada hasta el resultado final, así como los permisos y la redacción antes de exportar.

Empieza con una ruta de producción acotada y verifica que las consultas resuelven preguntas reales. Revisa cuánto volumen genera el registro y si el equipo puede encontrar una solicitud sin buscar manualmente en varios sistemas. Ajusta la selección de eventos y la retención antes de ampliar. La finalidad no es maximizar la cantidad de telemetría, sino mantener evidencia suficiente y consultable para operar el sistema.

Las convenciones de telemetría y los campos de uso de las APIs pueden evolucionar. Versiona tu esquema interno y valida los adaptadores cuando cambie el SDK, la API o la configuración. Si el proveedor modifica una respuesta, la capa de normalización debería poder adaptarse sin que todos los paneles y consultas dependan de nombres externos. Una práctica general de observabilidad puede orientar la organización de señales y trazas; no sustituye la documentación técnica primaria para campos o facturación de un proveedor específico.

Lista de comprobación de aceptación

No des por terminada la instrumentación hasta verificar eventos y privacidad con casos de prueba controlados.

CasoComprobaciónResultado esperado
ÉxitoSolicitud y etapas quedan correlacionadasUn ID propio permite reconstruir el recorrido
Error de APIEstado, categoría y cierre aparecenEl fallo no se confunde con un evento ausente
ReintentoCada intento queda separado y ordenadoEl intento fallido no desaparece si hay éxito posterior
HerramientaNombre, duración y estado se registranLa etapa puede distinguirse de la llamada al modelo
Uso ausenteCampo no devuelto por la APISe marca como no informado, no como cero
Dato sensible sintéticoEvento inspeccionado antes de exportarEl valor no aparece en el registro exportado

Qué sigue abierto

  • No se especifica un proveedor ni una API concreta; por tanto, no puede afirmarse qué campos de uso o error devuelve, ni cuándo faltan.
  • La guía general no establece precios, condiciones de cuenta ni cargos finales. Toda estimación requiere verificar documentación y facturación oficial vigente para el proveedor y periodo aplicables.
  • Los periodos de retención, controles de acceso y tratamientos de datos deben determinarse según el contexto legal, contractual y de seguridad de cada organización.
09

Continúa explorando

09

Fuentes consultadas

03

Correcciones y transparencia

Si detectas un dato incorrecto o desactualizado, puedes enviarnos una corrección indicando la página y la fuente que debemos revisar.

Proponer una corrección