Patrones de Diseño de Agentes IA
Qué Hace a un Agente
Un chatbot responde preguntas. Un agente toma acción. La diferencia es la autonomía: un agente recibe un objetivo, planifica cómo lograrlo, usa tools para interactuar con el mundo, observa los resultados y adapta su enfoque. El loop core es engañosamente simple:
Planificar → Actuar → Observar → Reflexionar → (repetir hasta cumplir el objetivo)
Pero los patrones de diseño dentro de este loop determinan si tu agente es confiable o caótico.
El Patrón ReAct
ReAct (Reason + Act) es el patrón de agente más usado. El modelo alterna entre pasos de razonamiento (pensar qué hacer) y pasos de acción (llamar tools). Cada observación alimenta el siguiente paso de razonamiento.
Thought: Necesito encontrar los deployments recientes del usuario
Action: llamar tool list-deployments con user_id="abc123"
Observation: Encontrados 3 deployments, el más reciente es deploy-789
Thought: Ahora debería verificar el estado del último deployment
Action: llamar tool get-deployment-status con id="deploy-789"
Observation: Estado "failed" con error "OOM killed"
Thought: El deployment falló por memoria. Debería sugerir aumentar los límites.
ReAct funciona porque fuerza razonamiento estructurado antes de cada acción. El modelo no encadena llamadas a tools ciegamente — explica su lógica en cada paso.
Tool-Augmented Generation
No toda tarea necesita un loop de agente completo. Tool-augmented generation es el patrón más simple donde el modelo hace una o dos llamadas a tools para mejorar su respuesta. Piensa en un asistente de código que ejecuta una búsqueda antes de responder, o un bot de soporte que consulta un registro de cliente.
Usa este patrón cuando: la tarea está bien definida, requiere planificación mínima y las llamadas a tools son predecibles. Usa agentes completos cuando: la tarea es abierta, requiere múltiples pasos, o el camino al objetivo es incierto.
Sistemas de Memoria
Los agentes efectivos necesitan memoria más allá de la conversación actual:
Memoria a corto plazo es el contexto de la conversación — lo que se ha dicho y hecho en esta sesión. Se maneja naturalmente por la ventana de contexto del LLM.
Memoria a largo plazo persiste entre sesiones. Puede ser una base de datos vectorial de interacciones pasadas, un knowledge graph, o logs estructurados. El agente recupera memorias relevantes antes de actuar.
Memoria episódica registra experiencias pasadas específicas: "La última vez que hice deploy a staging, el health check tardó 30 segundos." Esto ayuda a los agentes a evitar repetir errores y aprender patrones específicos del equipo.
Recuperación de Errores y Guardrails
Los agentes en producción deben manejar fallos con gracia. Estrategias clave:
Reintentar con variación: Si una llamada a un tool falla, no solo reintentar — ajustar el enfoque. Cambiar parámetros, probar un tool alternativo, o recolectar más información primero.
Escalamiento: Saber cuándo parar. Si un agente no puede resolver un problema después de N intentos, debería escalar a un humano en lugar de iterar indefinidamente.
Guardrails: Definir restricciones duras que el agente nunca debe violar. La eliminación de archivos requiere confirmación. Los deployments a producción necesitan aprobación. Los datos sensibles nunca se loggean. Estas no son sugerencias — son límites forzados.
Validación de output estructurado: Validar los outputs de los tools antes de usarlos. Una respuesta malformada de una API no debería crashear el loop del agente.
Cuándo lo Simple Supera a lo Complejo
Un error común es sobre-ingeniería. Si tu caso de uso es "buscar en docs y responder preguntas," no necesitas un agente multi-paso con sistemas de memoria. Comienza con tool-augmented generation simple y agrega complejidad solo cuando encuentres limitaciones reales.
Arandu demuestra el espectro completo — opera como un agente autónomo con acceso a terminal, navegador y editor, manejando tareas complejas que genuinamente requieren planificación, ejecución multi-paso y razonamiento adaptativo. Pero incluso Arandu adopta por defecto el enfoque más simple que funcione para cada subtarea específica.
El mejor agente es el más simple que logre el objetivo de forma confiable.