Da assistente ad agente autonomo
Lo spettro dal chatbot all’agente completamente autonomo: cosa cambia a ogni passaggio.
Da assistente ad agente autonomo è una lezione AI Agents gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Agents, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Agents include 4 lezioni in totale.
Lo spettro dell'autonomia
I sistemi di IA si collocano lungo uno spettro che va da completamente reattivi a completamente autonomi. Capire dove si colloca il proprio agente su questo spettro determina quali componenti architetturali sono necessari, quanta supervisione umana occorre e quali modalità di errore è opportuno prevedere.
Livello 1: chatbot puro
Un chatbot puro risponde ai messaggi con del testo. Non dispone di memoria oltre la finestra di contesto corrente, né di strumenti, obiettivi o capacità di agire nel mondo. Ogni interazione è senza stato. Necessità di supervisione umana: minima, poiché può solo produrre testo e non agire.
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)Livello 2: agente potenziato dagli strumenti
Un agente potenziato dagli strumenti aggiunge capacità esterne: ricerca sul web, query al database, esecuzione di codice e chiamate API. Può rispondere a domande che richiedono dati aggiornati. La memoria può persistere all'interno di una sessione. Necessità di supervisione umana: moderata, poiché può leggere dati, ma le azioni sono generalmente di sola lettura o a basso rischio.
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)
# - ProactivityLivello 3: agente orientato agli obiettivi
Un agente orientato agli obiettivi persegue un obiettivo definito attraverso più passaggi, mantenendo lo stato tra una chiamata allo strumento e l'altra. Dispone di un pianificatore che scompone l'obiettivo in sottoattività. Necessità di supervisione umana: significativa, poiché esegue azioni in più passaggi che possono produrre effetti cumulativi nel mondo reale.
# 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)
Livello 4: agente autodiretto
Un agente autodiretto definisce i propri sotto-obiettivi, monitora l'ambiente alla ricerca di eventi rilevanti e avvia azioni senza che sia necessario un input umano. Dispone di memoria a lungo termine e di un modello del mondo, e può rivedere il piano quando cambiano le circostanze. Necessità di supervisione umana: elevata, poiché avvia azioni autonomamente.
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)
Cosa cambia a ogni livello: memoria
I requisiti di memoria crescono con il livello di autonomia. Il livello 1 utilizza solo la finestra di contesto (memoria della sessione). Il livello 2 aggiunge la cronologia persistente della sessione. Il livello 3 aggiunge uno stato strutturato dell'attività. Il livello 4 richiede memoria episodica (ciò che è accaduto), memoria semantica (ciò che l'agente sa) e memoria procedurale (come svolgere le attività).
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"]}')Cosa cambia a ogni livello: pianificazione
Anche i requisiti di pianificazione crescono con il livello di autonomia. Il livello 1 non prevede pianificazione. Il livello 2 può eseguire ragionamenti a passaggio singolo. Il livello 3 utilizza la pianificazione in più passaggi (Chain of Thought, ReAct). Il livello 4 richiede una pianificazione gerarchica con ricalcolo del piano in caso di errore.
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}')Requisiti di supervisione umana per livello
Con l'aumentare dell'autonomia aumenta anche la necessità di meccanismi di supervisione umana. Il livello 1 ne richiede quasi nessuno. Il livello 4 richiede un'architettura di supervisione esplicita: gate di approvazione, registri delle azioni, meccanismi di interruzione e rilevamento delle anomalie.
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}')Proattività: il cambiamento fondamentale
Il cambiamento più fondamentale nel passaggio da assistente ad agente autonomo è la proattività. Un assistente attende. Un agente avvia le azioni. Ciò significa che l'agente deve monitorare l'ambiente, riconoscere gli eventi rilevanti e decidere quando agire, senza che sia necessario un input.
# 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())
Recupero dagli errori per livello
Anche i requisiti di recupero dagli errori crescono con il livello. Un chatbot si limita a chiedere scusa. Un agente con strumenti ritenta la chiamata allo strumento. Un agente orientato agli obiettivi ricalcola il piano aggirando il passaggio non riuscito. Un agente autodiretto rileva, classifica e inoltra gli errori autonomamente, aggiornando il proprio modello del mondo per evitare lo stesso errore in 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')Scelta del livello appropriato
Non tutti i casi d'uso richiedono il livello 4. Cominci dal livello più basso che soddisfa i requisiti e aggiunga complessità solo quando necessario. Una maggiore autonomia comporta più complessità, un maggiore carico di supervisione e un potenziale più elevato di comportamenti imprevisti.
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
}))Verifica delle conoscenze
Qual è la differenza di capacità fondamentale tra un agente orientato agli obiettivi (livello 3) e un agente autodiretto (livello 4)?
Riepilogo: dall'assistente all'agente autonomo
Ottimo! Ecco che cosa ha imparato:
- Chatbot L1: reattivo, solo testo, senza memoria, non richiede supervisione
- L2 potenziato dagli strumenti: memoria della sessione, chiamate agli strumenti, supervisione moderata
- L3 orientato agli obiettivi: pianificazione in più passaggi, memoria circoscritta all'attività, gate di approvazione
- L4 autodiretto: proattivo, memoria a lungo termine, pianificazione gerarchica, supervisione elevata
- Regola generale: cominciare dal livello più basso che soddisfa i requisiti
Prossimo argomento: modelli del mondo e pianificazione predittiva, ovvero come gli agenti simulano le conseguenze prima di agire.
Domande Frequenti
La lezione «Da assistente ad agente autonomo» è gratuita?
Sì — il testo completo di «Da assistente ad agente autonomo» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Agents, passa a CoddyKit PRO. Il corso AI Agents include 4 lezioni in totale.
Cosa imparerò in «Da assistente ad agente autonomo»?
Lo spettro dal chatbot all’agente completamente autonomo: cosa cambia a ogni passaggio. Eserciti AI Agents con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare AI Agents?
Non è richiesta alcuna esperienza precedente. AI Agents su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Da assistente ad agente autonomo»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione AI Agents?
Sì. Ogni lezione AI Agents include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Da assistente ad agente autonomo
- Modelli del mondo e pianificazione predittiva
- Sfide di allineamento negli agenti autonomi
- Frontiere della ricerca: AGI e oltre