Hasta este punto, hablamos de los agentes como un sistema que:
- tiene un objetivo
- intenta actuar
- verifica el resultado
- y vuelve a intentar si no funciona
Pero eso sigue sonando a teoría.
Así que escribamos el agente más simple que realmente funciona.
Sin frameworks. Sin memoria. Sin lógica compleja.
Solo un bucle.
Imagina al agente como un niño

Un niño quiere abrir una puerta.
Él:
- prueba la manija -> no se abre
- prueba más fuerte -> no funciona
- prueba otra vez -> ¡se abrió!
Un agente funciona igual. No "piensa" en el sentido humano.
Simplemente:
-> Prueba
-> Mira qué pasó
-> Cambia la acción
-> Vuelve a probar
Tarea para el agente
Demos al agente una tarea simple:
Escribe un número mayor que 10
Pero hagámoslo con trampa. En lugar del modelo, empezamos con random para ver la mecánica sin ruido extra.
A veces el agente obtiene 3, a veces 7, a veces 15. Tiene que distinguir eso y parar o volver a intentarlo.
Código: agente sin LLM
import random
goal = 10
max_steps = 5
for step in range(max_steps):
print(f"\n🤖 Step {step + 1}: Agent is trying...")
# El "modelo" genera una respuesta
number = random.randint(1, 20)
print(f"💬 Generated: {number}")
if number > goal:
print(f"✅ Goal reached! {number} > {goal}")
break
else:
print(f"❌ Not enough. {number} ≤ {goal}. Trying again...")
else:
print("\n⚠️ Max steps reached without success")
Ejecútalo varias veces. Mira cómo el agente decide por sí mismo si continuar o detenerse.
Qué pasa aquí
- El agente recibe un objetivo - encontrar un número > 10
- Prueba - "genera" una respuesta
- Verifica - ¿se alcanzó el objetivo?
- Si no - vuelve a intentar (máximo 5 veces)
- Si sí - se detiene
Ese es todo el bucle:
Modelo vs Agente
| Modelo | Agente | |
|---|---|---|
| Genera una respuesta | ✅ | ❌ |
| Verifica el resultado | ❌ | ✅ |
| Decide qué hacer después | ❌ | ✅ |
El modelo es responsable de Act.
El agente es responsable de Check -> Retry -> Stop.
¿Por qué esto ya es un agente y no solo una función?
Una función haría un intento y ya.
Un agente:
- tiene un objetivo
- verifica el resultado
- puede actuar de nuevo sin tu participación
Tú le diste la tarea y él trabaja solo. Incluso cuando se equivoca.
¿Y si conectamos una LLM real?
Reemplazar random.randint() por una llamada a AI API es un solo cambio.
El bucle del agente queda exactamente igual.
Esa es la esencia: un agente no se trata de un "modelo inteligente". Se trata de estructura: objetivo -> acción -> verificación -> repetición.
En corto
Acabas de entender el bucle básico de un agente:
- Objetivo - encontrar un número > 10
- Act - genera una respuesta
- Check - ¿se alcanzó el objetivo?
- Retry - si hace falta
- Stop - cuando se alcanza el objetivo o se agotan los pasos
Este es el fundamento. Todo lo demás es complicar este esquema.
FAQ
Q: ¿Por qué aquí max_steps = 5 y no un bucle infinito?
A: Un agente que no se detiene por sí solo es peligroso. Puede gastar dinero en llamadas API, quedarse atascado en un bucle o ciclarse si el objetivo es inalcanzable. max_steps es una protección.
Q: ¿Por qué empezamos con random y no directo con LLM?
A: Para ver la mecánica del agente sin ruido extra. El modelo es solo un detalle. El bucle es más importante.
Q: ¿Por qué el agente no sabe que el número es "malo" antes de verificar?
A: El modelo solo genera. No conoce el objetivo. El objetivo es responsabilidad del agente, no del modelo.
Qué sigue
¿Notaste max_steps = 5?
No es casualidad. Un agente que no se detiene por sí solo puede:
- trabajar infinitamente
- gastar dinero en llamadas API
- quedarse atascado en un bucle si el objetivo es inalcanzable
Por eso todo agente debe tener límites.
-> Sigue leyendo: Cuando un agente necesita límites
¿Quieres ejecutarlo tú mismo?
Si quieres ver una implementación completa con una LLM real, separada por módulos y lista para ejecutar, está aquí: