Del asistente al agente autónomo
El espectro del chatbot al agente totalmente autónomo: qué cambia en cada paso.
Del asistente al agente autónomo es una lección gratuita de AI Agents en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Agents, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Agents incluye 4 lecciones en total.
El espectro de autonomía
Los sistemas de IA se sitúan en un espectro que va desde los completamente reactivos hasta los completamente autónomos. Comprender dónde se sitúa su agente en este espectro determina qué componentes arquitectónicos necesita, cuánto control humano requiere y qué modos de fallo debe anticipar.
Nivel 1: chatbot puro
Un chatbot puro responde a los mensajes con texto. No tiene memoria más allá de la ventana de contexto actual, ni herramientas, objetivos o capacidad para actuar en el mundo. Cada interacción es sin estado. Necesidad de supervisión humana: mínima; solo puede producir texto, no actuar.
import anthropic
# Level 1: Pure chatbot — single turn, no memory, no tools
def pure_chatbot(user_message: str) -> str:
client = anthropic.Anthropic(api_key='YOUR_API_KEY')
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=512,
messages=[{'role': 'user', 'content': user_message}]
)
return response.content[0].text
# What it has:
# - Language understanding
# - Knowledge from training
# What it lacks:
# - Memory (no history between sessions)
# - Tools (cannot access external data)
# - Goals (no objective to pursue)
# - Proactivity (only responds, never initiates)
response = pure_chatbot('What is the capital of Australia?')
print(response)Nivel 2: agente aumentado con herramientas
Un agente aumentado con herramientas incorpora capacidades externas: búsqueda web, consultas a bases de datos, ejecución de código y llamadas a API. Puede responder preguntas que requieren datos actualizados. La memoria puede persistir dentro de una sesión. Necesidad de supervisión humana: moderada; puede leer datos, pero normalmente sus acciones son de solo lectura o de bajo riesgo.
import anthropic
# Level 2: Tool-augmented agent
def tool_augmented_agent(user_message: str, conversation_history: list) -> str:
client = anthropic.Anthropic(api_key='YOUR_API_KEY')
tools = [
{
'name': 'search_web',
'description': 'Search the web for current information',
'input_schema': {'type': 'object',
'properties': {'query': {'type': 'string'}},
'required': ['query']}
}
]
conversation_history.append({'role': 'user', 'content': user_message})
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=1024,
tools=tools,
messages=conversation_history
)
# Handle tool use...
return response.content[-1].text if response.stop_reason == 'end_turn' else '[tool called]'
# What changed vs Level 1:
# + Tools (external data access)
# + Session memory (conversation history)
# Still lacking:
# - Persistent cross-session memory
# - Goals (still reactive)
# - ProactivityNivel 3: agente orientado a objetivos
Un agente orientado a objetivos persigue un objetivo definido durante varios pasos y mantiene el estado entre llamadas a herramientas. Cuenta con un planificador que descompone el objetivo en subtareas. Necesidad de supervisión humana: considerable; realiza acciones de varios pasos que pueden tener efectos acumulativos en el mundo real.
# Level 3: Goal-directed agent
class GoalDirectedAgent:
def __init__(self, goal: str, tools: list, client):
self.goal = goal
self.tools = tools
self.client = client
self.memory = [] # persistent across steps
self.plan = self._make_plan()
def _make_plan(self) -> list:
response = self.client.messages.create(
model='claude-opus-4-5', max_tokens=512,
messages=[{'role': 'user', 'content':
f'Goal: {self.goal}\n'
'Create a numbered list of steps to achieve this goal. '
'Each step should be a single tool call or reasoning step.'
}]
)
return response.content[0].text
def step(self) -> str:
# Execute next planned step
return 'step executed'
# What changed vs Level 2:
# + Goal: has an objective to pursue
# + Planning: decomposes goal into sub-tasks
# + Persistent memory across steps
# Still lacking:
# - Self-directed (still initiated by human)
# - Self-improvement
if __name__ == '__main__':
class FakeContent:
def __init__(self, text):
self.text = text
class FakeResponse:
def __init__(self, text):
self.content = [FakeContent(text)]
class FakeMessages:
def create(self, **kwargs):
return FakeResponse('1. Search web for topic\n2. Summarize findings\n3. Draft report')
class FakeClient:
def __init__(self):
self.messages = FakeMessages()
agent = GoalDirectedAgent(goal='Write a market report', tools=[], client=FakeClient())
print('Goal:', agent.goal)
print('Plan:')
print(agent.plan)
Nivel 4: agente autodirigido
Un agente autodirigido establece sus propias submetas, supervisa su entorno en busca de eventos relevantes e inicia acciones sin indicaciones humanas. Tiene memoria a largo plazo, un modelo del mundo y puede volver a planificar cuando cambian las circunstancias. Necesidad de supervisión humana: alta; inicia acciones de forma autónoma.
import time
# Level 4: Self-directed agent (simplified sketch)
class SelfDirectedAgent:
def __init__(self, mission: str, client):
self.mission = mission
self.client = client
self.goals_queue = []
self.long_term_memory = []
self.running = False
def start(self):
self.running = True
self._generate_initial_goals()
while self.running:
self._observe_environment()
self._prioritise_goals()
if self.goals_queue:
goal = self.goals_queue.pop(0)
self._pursue_goal(goal)
time.sleep(60) # autonomous monitoring loop
def _observe_environment(self):
# Agent monitors for events without being asked
print('Observing environment...')
def _generate_initial_goals(self):
# Agent decomposes its mission into actionable goals
self.goals_queue = ['Monitor inbox', 'Check project status']
def _prioritise_goals(self):
# Agent re-orders goals based on new observations
pass
def _pursue_goal(self, goal: str):
print(f'Pursuing: {goal}')
if __name__ == '__main__':
agent = SelfDirectedAgent(mission='Manage my inbox proactively', client=None)
agent._generate_initial_goals()
print('Initial goals:', agent.goals_queue)
agent._observe_environment()
goal = agent.goals_queue.pop(0)
agent._pursue_goal(goal)
Qué cambia en cada nivel: memoria
Los requisitos de memoria aumentan con el nivel de autonomía. El nivel 1 utiliza únicamente la ventana de contexto (memoria de sesión). El nivel 2 añade el historial persistente de la sesión. El nivel 3 añade el estado estructurado de las tareas. El nivel 4 requiere memoria episódica (qué ocurrió), memoria semántica (qué sabe el agente) y memoria procedimental (cómo hacer las cosas).
MEMORY_BY_LEVEL = {
'L1_chatbot': {
'scope': 'context_window_only',
'persistence': 'none',
'implementation': 'messages list in current API call'
},
'L2_tool_augmented': {
'scope': 'session',
'persistence': 'in-memory (lost on restart)',
'implementation': 'conversation_history list'
},
'L3_goal_directed': {
'scope': 'task',
'persistence': 'persists for task duration',
'implementation': 'SQLite or Redis with task state'
},
'L4_self_directed': {
'scope': 'long_term',
'persistence': 'indefinite',
'implementation': 'vector DB (episodic) + structured DB (semantic) + prompt cache (procedural)'
}
}
for level, info in MEMORY_BY_LEVEL.items():
print(f'{level}: {info["implementation"]}')Qué cambia en cada nivel: planificación
Los requisitos de planificación también aumentan con la autonomía. El nivel 1 no realiza planificación. El nivel 2 puede llevar a cabo razonamientos de un solo paso. El nivel 3 utiliza planificación de varios pasos (Chain of Thought, ReAct). El nivel 4 requiere planificación jerárquica con nueva planificación cuando se produce un fallo.
PLANNING_BY_LEVEL = {
'L1': 'None — single response',
'L2': 'Single-step tool selection (which tool to call now)',
'L3': 'Multi-step plan (goal -> ordered sub-tasks -> tool calls)',
'L4': 'Hierarchical plan (mission -> goals -> tasks -> actions) + replan on failure'
}
# L3 multi-step planning example:
def plan_goal(goal: str, client) -> list:
import anthropic
response = client.messages.create(
model='claude-opus-4-5', max_tokens=512,
messages=[{'role': 'user', 'content':
f'Break this goal into 3-5 concrete steps:\nGoal: {goal}\n'
'Return JSON: {"steps": [{"step": int, "action": str, "tool": str}]}'
}]
)
import json
return json.loads(response.content[0].text)
for lvl, desc in PLANNING_BY_LEVEL.items():
print(f'{lvl}: {desc}')Requisitos de supervisión humana por nivel
A medida que aumenta la autonomía, también lo hace la necesidad de mecanismos de supervisión humana. El nivel 1 apenas necesita supervisión. El nivel 4 requiere una arquitectura de supervisión explícita: puntos de aprobación, registros de acciones, mecanismos de interrupción y detección de anomalías.
OVERSIGHT_BY_LEVEL = {
'L1_chatbot': [
'None required (output only)'
],
'L2_tool_augmented': [
'Review tool permissions (read-only vs write)',
'Audit logs of tool calls'
],
'L3_goal_directed': [
'Human approval before irreversible actions',
'Plan review before execution starts',
'Progress checkpoints',
'Full audit trail'
],
'L4_self_directed': [
'Human approval before high-impact actions',
'Real-time action streaming to oversight dashboard',
'Emergency stop mechanism',
'Anomaly detection on goal drift',
'Regular review of long-term memory state',
'Corrigibility: agent must accept shutdown'
]
}
for level, requirements in OVERSIGHT_BY_LEVEL.items():
print(f'{level}:')
for req in requirements:
print(f' - {req}')Proactividad: el cambio fundamental
El cambio más fundamental de asistente a agente autónomo es la proactividad. Un asistente espera. Un agente inicia acciones. Esto significa que el agente debe supervisar su entorno, reconocer eventos relevantes y decidir cuándo actuar, todo ello sin recibir indicaciones.
# Proactive monitoring pattern
import asyncio
from datetime import datetime
class ProactiveMonitor:
def __init__(self, agent_fn, check_fn, interval_seconds: int = 60):
self.agent_fn = agent_fn
self.check_fn = check_fn
self.interval = interval_seconds
async def run(self):
print(f'Proactive monitor started, checking every {self.interval}s')
while True:
try:
events = await self.check_fn()
for event in events:
print(f'[{datetime.utcnow().isoformat()}] Event: {event}')
await self.agent_fn(event)
except Exception as e:
print(f'Monitor error: {e}')
await asyncio.sleep(self.interval)
# Example: agent monitors for new emails every 5 minutes
# and proactively drafts replies or flags urgent ones
async def example_setup():
monitor = ProactiveMonitor(
agent_fn=lambda e: print(f'Agent handling: {e}'),
check_fn=lambda: [], # replace with real inbox check
interval_seconds=300
)
# await monitor.run()
if __name__ == '__main__':
import asyncio
async def demo():
async def check_fn():
return ['New email from boss@example.com']
async def agent_fn(event):
print(f'Agent drafting reply for: {event}')
monitor = ProactiveMonitor(agent_fn=agent_fn, check_fn=check_fn, interval_seconds=1)
try:
await asyncio.wait_for(monitor.run(), timeout=0.3)
except asyncio.TimeoutError:
pass
asyncio.run(demo())
Recuperación de errores por nivel
Los requisitos de recuperación de errores también aumentan. Un chatbot simplemente se disculpa. Un agente con herramientas vuelve a intentar la llamada a la herramienta. Un agente orientado a objetivos vuelve a planificar para sortear el paso fallido. Un agente autodirigido detecta, categoriza y escala los errores de forma autónoma, y actualiza su modelo del mundo para evitar el mismo fallo en el futuro.
# Error recovery strategies by autonomy level
def chatbot_error_recovery(error: Exception) -> str:
return 'I\'m sorry, I encountered an error. Please try again.'
def tool_agent_error_recovery(tool_name: str, error: Exception, retries: int) -> str:
if retries < 3:
return f'Retrying {tool_name} ({retries+1}/3)'
return f'Tool {tool_name} unavailable after 3 retries, skipping'
def goal_agent_error_recovery(failed_step: dict, plan: list, client) -> list:
import anthropic, json
client_obj = anthropic.Anthropic(api_key='YOUR_API_KEY')
response = client_obj.messages.create(
model='claude-opus-4-5', max_tokens=256,
messages=[{'role': 'user', 'content':
f'Step failed: {failed_step}\nRemaining plan: {plan}\n'
'Revise the remaining plan to work around the failure. Return JSON plan.'
}]
)
return json.loads(response.content[0].text)
print('Error recovery patterns defined for each autonomy level')Elección del nivel adecuado
No todos los casos de uso necesitan el nivel 4. Comience por el nivel más bajo que cumpla sus requisitos y añada complejidad solo cuando sea necesario. Una mayor autonomía implica más complejidad, una mayor carga de supervisión y más posibilidades de que se produzcan comportamientos inesperados.
def recommend_autonomy_level(requirements: dict) -> str:
needs_realtime = requirements.get('realtime_data', False)
needs_multistep = requirements.get('multi_step_tasks', False)
needs_unsupervised = requirements.get('runs_unsupervised', False)
needs_initiative = requirements.get('initiates_actions', False)
if needs_initiative and needs_unsupervised:
return 'L4_self_directed (high oversight required)'
if needs_multistep:
return 'L3_goal_directed (plan review recommended)'
if needs_realtime:
return 'L2_tool_augmented (audit logs required)'
return 'L1_chatbot (minimal oversight)'
# Examples:
print(recommend_autonomy_level({
'realtime_data': True, 'multi_step_tasks': False,
'runs_unsupervised': False, 'initiates_actions': False
}))
print(recommend_autonomy_level({
'realtime_data': True, 'multi_step_tasks': True,
'runs_unsupervised': True, 'initiates_actions': True
}))Comprobación de conocimientos
¿Cuál es la diferencia de capacidad más fundamental entre un agente orientado a objetivos (nivel 3) y un agente autodirigido (nivel 4)?
Resumen: del asistente al agente autónomo
¡Excelente! Esto es lo que ha aprendido:
- Chatbot L1: reactivo, solo texto, sin memoria y sin necesidad de supervisión
- Aumentado con herramientas L2: memoria de sesión, llamadas a herramientas y supervisión moderada
- Orientado a objetivos L3: planificación de varios pasos, memoria limitada a la tarea y puntos de aprobación
- Autodirigido L4: proactivo, memoria a largo plazo, planificación jerárquica y supervisión alta
- Regla práctica: comience por el nivel más bajo que cumpla los requisitos
A continuación: modelos del mundo y planificación predictiva: cómo los agentes simulan antes de actuar.
Preguntas frecuentes
¿La lección «Del asistente al agente autónomo» es gratis?
Sí — el texto completo de «Del asistente al agente autónomo» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Agents, actualiza a CoddyKit PRO. El curso de AI Agents incluye 4 lecciones en total.
¿Qué aprenderé en «Del asistente al agente autónomo»?
El espectro del chatbot al agente totalmente autónomo: qué cambia en cada paso. Practicas AI Agents con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar AI Agents?
No se requiere experiencia previa. AI Agents en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Del asistente al agente autónomo»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de AI Agents?
Sí. Cada lección de AI Agents incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Del asistente al agente autónomo
- Modelos del mundo y planificación predictiva
- Retos de alineación en agentes autónomos
- Fronteras de la investigación: AGI y más allá