Saltar a contenido

Gobernanza y Guardrails en Producción

Integrar IA en el ciclo de vida de desarrollo de software (SDLC) no consiste solo en empujar código a main y rezar para que el agente no borre el servidor de base de datos. Requiere barreras de seguridad inflexibles. Si no puedes auditar por qué un agente tomó una decisión, no deberías ponerlo en producción.

Para dummies: La tarjeta de crédito del bot

Piensa en esto como darle a un becario la tarjeta de crédito de la empresa. No le das acceso ilimitado el primer día. Le pones un límite de gasto de 50 euros, configuras alertas por SMS para cada transacción y, si intenta comprar algo que cueste más, el sistema bloquea la compra hasta que un mánager la aprueba.

En el desarrollo de agentes, esto se llama guardrails y human-in-the-loop (humano en el bucle). Consiste en establecer reglas estrictas (como "jamás ejecutar un comando que contenga la palabra DROP") e interceptar acciones peligrosas para que un operador humano valide la intención del agente antes de apretar el gatillo.

Aislamiento y Artefactos Inspeccionables

Me he encontrado infraestructuras enteras comprometidas porque un agente tenía demasiados permisos. La regla de oro es el principio de menor privilegio. Si el agente solo necesita leer logs, su rol de AWS no debería permitirle levantar instancias EC2.

Además, el agente debe producir artefactos inspeccionables. No me vale un "tarea completada" en la terminal. Quiero un archivo de plan detallado o un volcado de logs donde pueda ver exactamente qué herramientas invocó y con qué argumentos.

Ejemplo Práctico: Interceptando una acción destructiva

Vamos a simular un guardrail que detiene la ejecución y exige aprobación humana si el agente intenta usar una herramienta de base de datos para borrar registros.

import sys

def ejecutar_sql(query: str, auto_aprobacion: bool = False) -> str:
    """
    Herramienta simulada de base de datos con interceptor human-in-the-loop.
    """
    # Detectamos acciones potencialmente destructivas
    palabras_peligrosas = ["DROP", "DELETE", "TRUNCATE", "ALTER"]
    es_peligrosa = any(p in query.upper() for p in palabras_peligrosas)

    if es_peligrosa and not auto_aprobacion:
        print(f"\n[ALERTA GUARDRAIL] El agente intenta ejecutar: {query}")
        respuesta = input("¿Apruebas esta operación destructiva? (s/N): ")

        if respuesta.lower() != 's':
            # Devolvemos el rechazo al agente para que busque otra estrategia
            return "Error: Permiso denegado por el usuario humano. Busca otra alternativa."

    # Si es segura o fue aprobada, procedemos
    return f"Éxito: Se ejecutó '{query}' en la base de datos."

# Simulación de un agente intentando limpiar una tabla
intento_agente = "DELETE FROM usuarios WHERE activo = 0;"

resultado = ejecutar_sql(intento_agente)
print(f"Resultado devuelto al agente: {resultado}")

Este es un mecanismo primitivo pero efectivo. En sistemas reales, esta aprobación se hace mediante eventos asíncronos que llegan a Slack o Teams, permitiendo a los ingenieros de guardia aprobar o rechazar con un solo clic. La autonomía total está sobrevalorada; el control determinista es lo que te deja dormir tranquilo.