Cómo crear un agente de IA: bucle, herramientas, memoria y límites | We.Inc
Crea un agente de IA desde los principios básicos: el bucle decidir, actuar, observar, la definición de herramientas, la memoria, los límites de pasos, la aprobación humana y las pruebas. Incluye un simulador de pasos.
Cómo crear un agente de IA
Un agente de IA es un bucle. Un modelo de lenguaje lee el objetivo y todo lo ocurrido hasta el momento, y después invoca una de las herramientas que definiste o da una respuesta final. Tu código ejecuta la herramienta, añade el resultado y vuelve a preguntar. Los límites de pasos, los permisos, la aprobación humana y las pruebas mantienen ese bucle seguro.
Las cinco partes de un agente
Parte
Qué construyes
Qué falla sin ella
Bucle
Código que invoca al modelo, ejecuta herramientas y repite
No pasa nada después de la primera respuesta
Herramientas
Funciones con nombre, descripción y un esquema de entrada
El modelo solo puede hablar, no actuar
Memoria
La transcripción en curso, más las notas guardadas entre ejecuciones
El modelo repite invocaciones que ya hizo
Guardrails
Límites de pasos y de coste, mínimo privilegio, aprobación para acciones arriesgadas
Tareas de prueba fijas con comprobaciones que repites tras cada cambio
Descubres las regresiones por los usuarios
Ejecuta el simulador para ver cómo una tarea recorre el bucle. Activa y desactiva la aprobación para ver dónde un guardrail interrumpe un paso arriesgado. La traza está guionizada para que puedas estudiarla; una ejecución real consultaría a un modelo en cada paso de decisión.
Pulsa Siguiente paso para avanzar el bucle de movimiento en movimiento.
Lee cada línea: decidir es el modelo eligiendo, actuar es tu código ejecutando una herramienta, observar es el resultado añadiéndose a la memoria.
Cambia la aprobación para send_email y vuelve a ejecutarlo para comparar las dos trazas.
Pulsa Reiniciar para empezar de nuevo.
Empieza con una herramienta y una tarea. Añade herramientas solo cuando una tarea de prueba falle por no tenerlas, porque cada herramienta extra es otra elección en la que el modelo puede equivocarse.
Haz que los resultados de las herramientas sean breves y objetivos. La transcripción completa vuelve al modelo en cada paso, así que los resultados largos cuestan dinero y entierran lo importante.
Pon las comprobaciones de permisos en el código de la herramienta, no en las instrucciones. A un modelo se le puede convencer para que ignore una instrucción; no puede saltarse una comprobación que impone tu función.
Registra cada paso con su entrada, su salida y su coste. Cuando una ejecución sale mal, el registro es la única forma de ver qué decisión fue la mala.
Preguntas frecuentes
¿Necesito un framework para crear un agente?
No. El núcleo es un bucle while alrededor de una invocación al modelo y un switch sobre los nombres de las herramientas, como muestra el ejemplo de esta página. Los frameworks añaden reintentos, trazas e integraciones, que ayudan más adelante pero ocultan el bucle mientras aprendes.
¿Cómo invoca el modelo una herramienta?
Envías las definiciones de herramientas con cada petición. Cuando el modelo quiere una, responde con el nombre de la herramienta y sus argumentos en lugar de texto plano. Tu código ejecuta la función y devuelve el resultado como el siguiente mensaje.
¿Qué diferencia hay entre memoria y contexto?
El contexto es lo que el modelo ve en esta invocación: instrucciones, el objetivo y la transcripción hasta ahora. La memoria es todo lo que guardas y decides volver a meter en el contexto más tarde, como notas de una ejecución anterior.
¿Cómo evito que un agente se ejecute para siempre?
Limita el número de pasos y el gasto total, y termina la ejecución con un mensaje claro cuando se alcance cualquiera de los dos. OWASP incluye Unbounded Consumption entre sus riesgos de 2025 para aplicaciones basadas en modelos de lenguaje.
¿Cómo pruebo un agente?
Escribe un conjunto de tareas fijas con resultados comprobables: se invocó la herramienta correcta, una acción arriesgada esperó a la aprobación, la respuesta final contiene una cifra. Ejecuta el conjunto tras cada cambio de prompt o de herramienta y compara cuántas pasan.
Guardrails que de verdad funcionan
La lista de OWASP de 2025 señala Excessive Agency como un riesgo central y lo atribuye a tres causas: funcionalidad excesiva, permisos excesivos y autonomía excesiva. Cada una corresponde a una solución que controlas en el código.
Dale al agente solo las herramientas que la tarea necesita, da a cada herramienta las credenciales más restringidas que funcionen y exige que una persona apruebe las acciones de alto impacto, como enviar, pagar o borrar. Comprueba la autorización en el sistema al que invoca la herramienta en lugar de confiar en que el modelo se comporte.
El texto no fiable es la principal superficie de ataque
Cualquier cosa que obtenga una herramienta, como una página web, un correo o un archivo, puede contener instrucciones dirigidas a tu modelo. OWASP denomina a esto inyección de prompt indirecta.
Marca claramente el contenido obtenido como datos, mantenlo separado de tus propias instrucciones y nunca permitas que el texto de un resultado desbloquee por sí solo una herramienta más potente. La aprobación humana para los pasos privilegiados es la última barrera cuando fallan las demás defensas.
El bucle en JavaScript puro
Sin framework y sin SDK de ningún proveedor. callModel es un stub que reproduce decisiones fijas para que el archivo funcione tal cual; sustitúyelo por una petición al servicio de modelos que uses.
Las herramientas viven en un objeto, las arriesgadas necesitan aprobación y el bucle se detiene en un límite de pasos. Ejecútalo con node agent.mjs.
Riesgos que debes tener en cuenta en el diseño
Entradas del OWASP Top 10 for LLM Applications 2025 que más importan para los agentes
Riesgo
Cómo aparece en un agente
Solución en el código
LLM01:2025 Prompt Injection
Una página obtenida le dice al modelo que envíe tus datos por correo a otro sitio
Separa el contenido no fiable, aprueba las acciones privilegiadas
LLM06:2025 Excessive Agency
El agente puede borrar registros que solo necesitaba leer
Menos herramientas, credenciales restringidas, aprobación para lo de alto impacto
LLM10:2025 Unbounded Consumption
Un bucle reintenta toda la noche una herramienta que falla
Límite de pasos, límite de gasto, timeouts, límites de frecuencia
LLM05:2025 Improper Output Handling
La salida del modelo se pega en SQL o HTML sin comprobarla
Valida y escapa antes de cualquier uso posterior
Objetivo: encontrar el más barato de tres presupuestos de proveedores y enviar el resumen por correo al responsable de la oficina.
El modelo elige read_quotes para ver qué ha llegado.
El código ejecuta read_quotes() y devuelve tres archivos.
Resultado añadido a la memoria: A $1,240, B $1,180, C $1,315.
El modelo tiene lo que necesita y elige send_email con un borrador del resumen.
send_email está marcado como de alto impacto, así que la ejecución se pausa para que una persona apruebe el borrador.
Aprobado. El código ejecuta send_email() con el texto aprobado.
Resultado añadido a la memoria: mensaje enviado.
El modelo devuelve una respuesta final: el presupuesto B es el más barato, $1,180; resumen enviado. 3 invocaciones al modelo, por debajo del límite de 10 pasos.
El modelo elige read_quotes para ver qué ha llegado.
El código ejecuta read_quotes() y devuelve tres archivos.
Resultado añadido a la memoria: A $1,240, B $1,180, C $1,315.
El modelo tiene lo que necesita y elige send_email con un borrador del resumen.
No hay regla de aprobación, así que el código envía el borrador al momento. Nadie lo vio antes.
Resultado añadido a la memoria: mensaje enviado.
El modelo devuelve una respuesta final. Esta vez funcionó, pero una cifra equivocada o una instrucción inyectada también habrían salido sin revisar.