---
title: "Le dimos a cada blockchain su propio agente de guardia"
description: "Cómo Alchemy usa más de 230 agentes, uno por cada red blockchain, para hacer triage y corregir alertas en nuestra flota de nodos. La mediana del tiempo de resolución bajó de 30 minutos a 8."
---

# Le dimos a cada blockchain su propio agente de guardia

<ImageBlock
  src="https://media.alchemy.com/blog/on-call-agents/incident-resolution.webp"
  alt="Resolución de incidentes 3.5 veces más rápida"
  width={1920}
  height={900}
  priority
/>

## Cómo Alchemy usa más de 230 agentes para hacer triage y corregir alertas en nuestra flota de nodos

Alchemy opera la infraestructura de más de 230 redes blockchain y administra miles de servidores que procesan más de $1T en transacciones cada año. Nuestro negocio es mantener cada nodo saludable y sincronizado, para que las aplicaciones que dependen de él sigan funcionando.

En los últimos cuatro meses construimos una fábrica de agentes que administra más de 230 agentes distintos, uno por cada red blockchain, para investigar y resolver incidentes. La mediana del tiempo de resolución de una alerta ahora es de 8 minutos, frente a 30 minutos cuando la resolvía una persona. Los agentes resuelven cerca del 73% de las alertas sin intervención humana, y cerca de 120 horas de ingeniería al mes ahora se dedican a trabajo más productivo en lugar de diagnosticar y corregir problemas.

## El problema: 500 alertas por semana en una infraestructura diversa

Nuestra flota de nodos genera más de 500 alertas por semana para nuestro equipo de Node Ops. Como en cualquier equipo de ingeniería de software, el ingeniero de guardia lleva cada alerta por la misma investigación de cinco preguntas:

1. ¿Qué red es?
2. ¿Hay clientes afectados?
3. ¿El problema está en nuestra flota o upstream, en la propia red? ¿Tal vez un deploy?
4. ¿Esto ya pasó antes?
5. ¿Qué hago ahora?

Las respuestas están repartidas entre dashboards, logs de solicitudes, el sistema de alertas, el historial de deploys y postmortems antiguos. Multiplica eso por 500 alertas y por las particularidades de cada red, y una cantidad significativa de tiempo se va en reconstruir contexto y remediar problemas en lugar de eliminar sus causas.

<ImageBlock
  src="https://media.alchemy.com/blog/on-call-agents/fig1-alert-problem.webp"
  alt="El problema de guardia: más de 500 alertas por semana, cada una llevada por la misma investigación de cinco preguntas a través de fuentes dispersas"
  width={1920}
  height={906}
/>

## La regla de diseño: optimizar para la decisión

Un agente con acceso a todas las herramientas las leerá todas sin problema. Eso produce un reporte largo que el ingeniero todavía tiene que revisar a fondo. El ingeniero no necesita más datos. Necesita una decisión: ¿esta alerta necesita a una persona, y con qué urgencia?

Por eso tenemos una sola regla: **optimizar para la decisión.**

## Cómo funciona

<ImageBlock
  src="https://media.alchemy.com/blog/on-call-agents/fig2-how-it-works.webp"
  alt="Cómo avanza una alerta por los agentes: se dispara la alerta, se determina el impacto, se encuentra la causa, se emite un veredicto, y luego el agente resuelve la alerta o la escala al equipo de guardia"
  width={1920}
  height={982}
/>

### 1. Determinar el impacto antes de interrumpir a una persona

Nuestro sistema de alertas ya detecta problemas, más de 500 veces por semana. Los agentes no necesitan detectarlos otra vez. Su trabajo es decidir si a alguien le debe importar.

**Una alerta disparada no es automáticamente un incidente.** Una alerta se convierte en incidente solo cuando el agente encuentra evidencia de daño real, como errores de servidor visibles para los clientes, un aumento importante de la latencia o todos los nodos de una flota caídos.

Si el agente no encuentra daño, publica sus hallazgos en un canal "FYI" separado. Solo los incidentes reales llegan al canal de guardia.

### 2. Investigaciones con un veredicto

El agente publica de tres a cinco viñetas que terminan en uno de dos resultados. Si no se necesita a una persona, el agente resuelve la alerta por sí mismo. Si se necesita a una persona, publica su investigación más detallada en el canal de guardia.

Cinco ejemplos reales:

<EmbeddedTable
  table={{
    columns: [
      { key: "alert", width: 180, title: "Alerta", dataType: "object" },
      {
        key: "found",
        width: 360,
        title: "Lo que encontró el agente",
        dataType: "object",
      },
      { key: "outcome", width: 260, title: "Resultado", dataType: "object" },
    ],
    data: [
      {
        alert: { title: "Nodo no saludable", tooltip: "", icon: "" },
        found: {
          title:
            "1 de 6 nodos no saludable, 0% de errores de servidor, una condición recurrente en un solo nodo aislado",
          tooltip: "",
          icon: "",
        },
        outcome: { title: "Resuelta por el agente", tooltip: "", icon: "" },
        id: 0,
      },
      {
        alert: { title: "Nodo no saludable", tooltip: "", icon: "" },
        found: {
          title:
            "1 de 2 nodos no saludable en una región, 0% de errores de servidor, latencia P95 de 8 ms",
          tooltip: "",
          icon: "",
        },
        outcome: { title: "Resuelta por el agente", tooltip: "", icon: "" },
        id: 1,
      },
      {
        alert: {
          title: "Todos los nodos no saludables",
          tooltip: "",
          icon: "",
        },
        found: {
          title:
            "El único nodo no saludable, 0.14% de errores, la infraestructura de respaldo absorbe el tráfico, sin impacto en clientes",
          tooltip: "",
          icon: "",
        },
        outcome: { title: "Resuelta por el agente", tooltip: "", icon: "" },
        id: 2,
      },
      {
        alert: { title: "Latencia alta", tooltip: "", icon: "" },
        found: {
          title: "Tasa de errores del 22%, latencia P95 de 10 segundos",
          tooltip: "",
          icon: "",
        },
        outcome: {
          title:
            "Escalada; el agente propuso un nivel de severidad para que una persona lo confirmara",
          tooltip: "",
          icon: "",
        },
        id: 3,
      },
      {
        alert: { title: "Red detenida", tooltip: "", icon: "" },
        found: {
          title: "La séptima detención en la misma red ese día",
          tooltip: "",
          icon: "",
        },
        outcome: { title: "Escalada", tooltip: "", icon: "" },
        id: 4,
      },
    ],
  }}
/>

El ingeniero lee primero el resultado y después la evidencia, si es que la lee.

### 3. Actuar dentro de límites que impone el código

Como se vio arriba, la resolución a menudo ocurre sin una persona. Les dimos a los agentes la capacidad de reiniciar nodos no saludables para restaurar el servicio, y de señalar desviaciones de configuración cuando los ajustes de un nodo ya no coinciden con lo que esperamos.

Cada acción tiene un alcance limitado, y el código del servidor lo impone. Un agente puede:

- Reiniciar exactamente un nodo de una red a la vez, para que no pueda retirar demasiada capacidad de una sola vez.
- Pausar nuestro sistema de reinicio automático para su propia red, por un máximo de 24 horas, para evitar la corrupción de datos.
- Pedir a una persona. Los cambios más riesgosos, como las marcas de mantenimiento o los reinicios repetidos, necesitan una vista previa y luego una nueva confirmación humana.

Fuera de esas rutas, los agentes solo leen datos de sus bases de conocimiento y playbooks con alcance definido. Limitar el acceso de los agentes es lo esencial cuando les permites interactuar con infraestructura de producción en vivo.

<ImageBlock
  src="https://media.alchemy.com/blog/on-call-agents/fig3-action-limits.webp"
  alt="Límites de acción de los agentes impuestos por el código del servidor: reiniciar un nodo a la vez, pausar el reinicio automático por un máximo de 24 horas y requerir confirmación humana para los cambios más riesgosos"
  width={1920}
  height={1024}
/>

### 4. Hacer de "es upstream" la conclusión más difícil

La parte divertida (o al menos a nosotros nos parece divertida) de operar nodos blockchain es que son poco confiables por naturaleza. Los clientes pueden tener problemas, no todas las redes se comportan igual bajo distintas cargas de trabajo, y los operadores de red upstream (validadores, secuenciadores, etc.) pueden hacer que nuestra infraestructura se detenga o falle. Por eso cada agente necesita _memoria e instrucciones específicas de su red_, y las necesita para responder una pregunta: "¿Somos nosotros o son ellos?"

Un agente debe cumplir cuatro condiciones antes de decir "upstream":

1. Nuestros nodos deben estar saludables, desde el punto de vista de la tasa de errores y la latencia.
2. Los errores upstream (por ejemplo, una "detención" de la red) deben verse iguales en todas las regiones donde operamos.
3. Proveedores independientes deben confirmarlo, y las solicitudes de los clientes deben verse normales en todo lo demás.
4. Una detención solo en algunas regiones nunca es upstream.

La regla funciona en ambas direcciones. En una alerta, seis nodos no estaban saludables, pero la red seguía produciendo bloques nuevos. El agente lo clasificó como un problema de nuestro servicio, no como una detención upstream.

<ImageBlock
  src="https://media.alchemy.com/blog/on-call-agents/fig4-upstream-rule.webp"
  alt="Las cuatro condiciones que un agente debe cumplir antes de clasificar un problema como upstream"
  width={1920}
  height={909}
/>

## Resultados: mayor confiabilidad, resolución más rápida

Gracias a estas inversiones, las horas de ingeniería se dedican a trabajo significativo, y nuestros clientes obtienen una resolución más rápida de los problemas en cualquier red sobre la que construyan.

- **Las alertas se resuelven casi cuatro veces más rápido.** La mediana del tiempo de resolución bajó de 30 minutos a 8.
- **La mayoría de las alertas nunca necesitan a un ingeniero.** El agente resuelve por sí mismo cerca del 73% de las alertas, frente al 0% en junio.
- **El equipo recuperó cerca de 120 horas al mes.** El tiempo de ingeniería dedicado a alertas bajó de cerca de 150 horas al mes a cerca de 30, una reducción del 80%. Eso equivale a cerca de tres semanas de ingeniero cada mes que ahora se dedican a eliminar causas en lugar de reconstruir contexto.
- **El agente acierta a la primera.** En más de 200 investigaciones del último mes, la precisión de la causa raíz en el primer intento fue de cerca del 98%.

<ImageBlock
  src="https://media.alchemy.com/blog/on-call-agents/fig5-impact.webp"
  alt="Impacto de junio a octubre: mediana del tiempo de resolución de 8 minutos, cerca del 73% de las alertas resueltas sin intervención humana, cerca de 30 horas de ingeniería al mes, cerca del 98% de precisión en el primer intento"
  width={1920}
  height={1181}
/>

## Lo que le diríamos a un equipo que construye su propio agente de guardia

1. **Mide resultados.** Evalúa un agente de guardia por el tiempo de resolución, la precisión y las horas de ingeniería ahorradas.
2. **Exige un veredicto.** Un agente que devuelve una página de hallazgos movió el trabajo, no lo eliminó. Exígele que empiece con una decisión: resolver la alerta, o llamar a una persona e indicar con qué urgencia.
3. **Otorga acciones con nombre y alcance fijo.** Un reinicio de un solo nodo con un límite de 24 horas es más seguro que el acceso directo a una shell.
4. **Dale a cada agente un área limitada y una memoria larga.** Un agente por red, con los runbooks, las particularidades y el historial de incidentes de esa red, no tiene que redescubrir tu sistema en cada alerta. Ya sabe que esta es la séptima detención del día.

Pero lo más importante: **no te detengas en la investigación de problemas.** Un agente que puede _evitar_ que los problemas lleguen a una persona multiplica el esfuerzo de ingeniería que dedicas a generar valor para los clientes.

¿Te interesa este tipo de cruce entre IA aplicada e infraestructura?

- Sigue a [@onewaysidewalks](https://x.com/onewaysidewalks) para mantenerte al día sobre todo lo relacionado con IA en Alchemy.
- [Únete al equipo](https://www.alchemy.com/careers). ¡Estamos contratando!
