Agenti IA: dai chatbot ai colleghi autonomi
Un Chatbot parla. Un Agente agisce. Come creare loop ReAct (Reason + Act) in grado di navigare sul Web, interrogare database e prenotare voli in modo autonomo.
Perché Maison Code ne parla
In Maison Code Paris, agiamo come la coscienza architettonica dei nostri clienti. Spesso ereditiamo stack “moderni” costruiti senza una comprensione fondamentale della scala.
Discutiamo di questo argomento perché rappresenta un punto di svolta critico nella maturità ingegneristica. Implementarlo correttamente differenzia un MVP fragile da una piattaforma resiliente di livello aziendale.
L’evoluzione dell’interfaccia
Negli ultimi 40 anni, il paradigma fondamentale dell’interazione uomo-computer (HCI) è stato “comando e controllo”. Fai clic su un pulsante e il computer fa esattamente una cosa. Digiti un comando e il computer esegue esattamente una funzione. Anche con l’ascesa di GenAI e ChatGPT, il paradigma è rimasto in gran parte colloquiale. Fai una domanda, la macchina recupera una risposta. È un motore di ricerca sofisticato.
Gli Agenti IA rappresentano il passaggio dalla “Chat” all‘“Azione”. Un Agente non si limita a conoscere le cose. fa cose. C’è la differenza tra una Wikipedia che può rispondere “Come prenoto un volo?” e un Concierge che dice “Ho prenotato il tuo volo”.
Perché Maison Code scommette sugli agenti
Crediamo che il “Sito Web” come lo conosciamo stia morendo. In 5 anni, gli utenti non faranno più clic su 10 pagine per trovare un prodotto. Diranno al loro agente personale: “Comprami una maglietta blu”. Realizziamo API pronte per gli agenti. Garantiamo che i dati dei nostri clienti siano strutturati in modo che gli agenti AI (Google Gemini, OpenAI, Siri) possano leggerli ed effettuare transazioni con essi. Se il tuo sito non è Agent-Ready, sei invisibile al più grande consumatore del prossimo decennio: l’intelligenza artificiale.
1. Il modello ReAct: anatomia di un agente
L’articolo rivoluzionario “ReAct: Synergizing Reasoning and Acting in Language Models” (Yao et al., 2022) ha cambiato tutto. Prima di ReAct, gli LLM erano solo predittori di testo. ReAct ha dato loro un “Monologo Interiore” e un set di “Mani” (Strumenti).
Il ciclo assomiglia a questo:
- Pensiero: l’agente analizza la richiesta dell’utente e pianifica un passaggio. (“L’utente vuole il tempo a Parigi. Devo trovare la temperatura attuale.”)
- Azione: l’agente seleziona uno strumento dalla sua casella degli strumenti. (“Chiamerò
weather_api.get('Paris').”) - Osservazione: l’agente legge l’output dello strumento. (“L’API ha restituito 20°C.”)
- Ragionamento: l’Agente aggiorna la sua comprensione. (“Ok, ho la temperatura. Ora posso rispondere all’utente.”)
- Risposta finale: l’agente risponde. (“Ci sono 20°C a Parigi.”)
Questo ciclo consente all’agente di risolvere problemi a più passaggi su cui non è mai stato addestrato esplicitamente.
2. Implementazione del codice (LangChain / TypeScript)
Ecco come implementare un agente ReAct di base utilizzando le funzioni LangChain e OpenAI.
“dattiloscritto”. importa { ChatOpenAI } da “@langchain/openai”; import { AgentExecutor, createOpenAIFunctionsAgent } da “langchain/agents”; import { Pull } da “langchain/hub”; importa { z } da “zod”; importa { strumento } da “@langchain/core/tools”;
// 1. Definire gli strumenti // Le “mani” dell’agente. Sii molto descrittivo nel campo “descrizione”, // poiché LLM lo utilizza per decidere quando chiamare lo strumento.
const strumento di ricerca = strumento(
asincrono ({ query }) => {
console.log(Ricerca di: €{query});
// Simula una ricerca su Google
return “Il tempo a Parigi è di 20 gradi Celsius con pioggia leggera.”;
},
{
nome: “ricerca_web”,
descrizione: “Cerca in Internet eventi e dati attuali.”,
schema: z.oggetto({
query: z.string().describe(“La query di ricerca”),
}),
}
);
const emailTool = strumento(
asincrono ({ a, corpo }) => {
console.log(Invio email a €{to});
// Simula SMTP
return “Email inviata con successo.”;
},
{
nome: “invia_email”,
descrizione: “Invia un’e-mail a un utente.”,
schema: z.oggetto({
a: z.string().email(),
corpo: z.string(),
}),
}
);
const strumenti = [searchTool, emailTool];
// 2. Inizializza il cervello (LLM) modello const = nuovo ChatOpenAI({ nomemodello: “gpt-4-turbo”, temperatura: 0, // Mantienilo deterministico per le azioni });
// 3. Crea l’agente // Estraiamo un prompt ReAct standard dall’hub LangChain const prompt = attendono Pull.pull(“hwchase17/openai-functions-agent”);
const agente = attendono createOpenAIFunctionsAgent({ llm: modello, strumenti, tempestivo, });
const agenteExecutor = nuovo AgentExecutor({ agente, strumenti, });
// 4. Esecuzione // Richiesta utente: “Scopri il tempo a Parigi e invialo via email a boss@company.com” risultato const = attendono agentExecutor.invoke({ input: “Scopri il tempo a Parigi e invialo via email a boss@company.com”, });
console.log(risultato.output);
**Procedura dettagliata dell'esecuzione**:
1. **Input**: "Scopri il meteo..."
2. **Decisione LLM**: LLM vede che non conosce il tempo. Guarda gli "strumenti". Vede "search_web". Decide di chiamarlo.
3. **Output strumento**: "Il tempo a Parigi è di 20 gradi..."
4. **Decisione LLM**: ora sono disponibili le informazioni. Ma la richiesta diceva anche "inviala via email". Guarda gli "strumenti". Vede "send_email".
5. **Azione**: costruisce un payload JSON `{"to": "boss@company.com", "body": "The Weather is 20C"}`.
6. **Output strumento**: "E-mail inviata".
7. **Risposta finale**: "Ho inviato l'email."
Ciò automatizza l'intero flusso di lavoro. Lo sviluppatore ha scritto 0 righe di logica "Weather to Email". L'intelligenza artificiale lo ha capito.
## 3. La zona di pericolo: loop infiniti e allucinazioni
Dare una "mano" all'IA è pericoloso.
Cosa succede se rimane bloccato in un loop?
* **Pensiero**: devo comprare un biglietto.
* **Azione**: Acquista il biglietto.
* **Osservazione**: Errore: carta di credito rifiutata.
* **Pensiero**: dovrei riprovare.
* **Azione**: Acquista il biglietto.
* **Osservazione**: Errore...
* (Ripetere 1000 volte).
**I guardrail sono obbligatori.**
1. **Iterazioni massime**: limite rigido al ciclo ReAct a 5 o 10 passaggi. Se il problema non viene risolto entro tale data, interrompere.
2. **Human in the Loop**: per azioni sensibili (acquisto, eliminazione, invio di e-mail), forzare l'agente a chiedere conferma.
* Agente: "Sto per inviare questa email. Procedere? [S/N]"
3. **Convalida dello schema Zod**: forza gli input dello strumento a corrispondere a tipi rigorosi. Se LLM genera una stringa in cui è richiesto un numero, genera un errore di convalida *prima* dell'esecuzione dello strumento.
## 4. Il problema della memoria (stato del vettore)
I LLM standard hanno una memoria a breve termine (finestra di contesto).
Se parli con un agente per 1 ora, si dimentica l'inizio della conversazione.
Per costruire un "Collega" veramente utile, ha bisogno di **Memoria a lungo termine**.
Utilizziamo **Database vettoriali** (Pigna, Milvus) per archiviare i "Ricordi".
* **Azione**: l'agente memorizza il riepilogo della riunione nel DB.
* **Recupero**: la prossima settimana, quando chiedi "Cosa abbiamo discusso del Progetto X?", l'agente interroga il DB vettoriale, recupera il pezzo rilevante e lo inserisce nel contesto.
Questo è **RAG (Retrieval Augmented Generation)** applicato allo Stato dell'agente.
## 5. Caso di studio: l'agente autonomo dell'assistenza clienti
Presso Maison Code, abbiamo implementato un agente di supporto L2 per un commerciante Shopify ad alto volume.
**Il problema**: il 40% dei biglietti diceva "Dov'è il mio ordine?" (WISMO).
Gli agenti umani hanno trascorso 5 minuti per ticket:
1. Leggi l'e-mail.
2. Copia l'ID dell'ordine.
3. Apri Shopify.
4. Controlla lo stato.
5. Apri il Pannello di controllo del corriere (FedEx).
6. Controlla il tracciamento.
7. Scrivi un'e-mail.
**La soluzione dell'agente**:
Abbiamo creato un agente con tre strumenti:
1. `shopify_lookup_order(id)`
2. `fedex_track_package(tracking_number)`
3. "gmail_reply(testo)".
**Il risultato**:
* **Risoluzione Zero Touch**: l'agente ha risolto autonomamente l'85% dei ticket WISMO in < 30 secondi.
* **Disponibilità 24 ore su 24, 7 giorni su 7**: i clienti ricevono risposte alle 3 del mattino.
* **Costo**: $ 0,05 per biglietto contro $ 2,50 per un agente umano.
Tuttavia, abbiamo riscontrato casi limite.
Un cliente ha chiesto "Dov'è il mio ordine?" ma non ne avevo ancora inserito uno. L'agente ha avuto un'allucinazione su un ID ordine.
Abbiamo risolto questo problema aggiungendo un passaggio "Verifica identità utente" prima di qualsiasi ricerca.
## 6. Sistemi multi-agente (LangGraph / CrewAI)
I singoli agenti sono potenti. Le squadre di agenti sono rivoluzionarie.
**LangGraph** ti consente di orchestrare più agenti con diverse "Personas".
* **Agente ricercatore**: ha `google_search`. Fruga il web alla ricerca di dati.
* **Agente writer**: ha `markdown_formatter`. Prende la ricerca e scrive un post sul blog.
* **Agente editor**: contiene `critique_tool`. Controlla il post e lo rifiuta se è troppo breve.
Crei un grafico:
`Ricercatore -> Scrittore -> Editor -> (Passa) -> Pubblica`.
`Ricercatore -> Scrittore -> Editor -> (Rifiuta) -> Scrittore`.
Ciò imita il flusso di lavoro di un vero team umano. L'"Editor" tiene sotto controllo lo "Scrittore".
## 7. Il costo dell'autonomia (Token Economics)
Gli agenti sono costosi.
Una singola semplice richiesta potrebbe attivare 10 chiamate LLM interne (Pensiero -> Azione -> Pensiero -> Azione).
Se usi GPT-4, questo costa $ 0,30 per corsa.
**Strategia di ottimizzazione**:
* **Modello router**: utilizza un modello economico (GPT-3.5) per la logica di routing ("Quale strumento utilizzo?").
* **Modello risolutore**: utilizza un modello costoso (GPT-4) per la generazione complessa ("Scrivi l'e-mail").
* **Caching**: memorizza nella cache i risultati di costose chiamate a strumenti (ad esempio, query SQL).
L’economia detterà l’adozione.
## 8. Il futuro: 2026 e oltre
Ci stiamo allontanando dal "Prompt Engineering" (parlare con il bot) al "Flow Engineering" (progettare il grafico degli agenti).
Nel 2026, il software non sarà un insieme di pulsanti statici.
Sarà un "sistema operativo orientato agli obiettivi".
Dirai al tuo computer: "Pianifica un viaggio in Giappone con meno di 5.000 dollari" e lui agirà.
Navigherà su Expedia. Controllerà il tuo calendario. Negozierà via e-mail.
Stiamo costruendo l'**Interfaccia universale**.
## 9. Conclusione
Building Agents è la sfida ingegneristica più entusiasmante del nostro decennio.
Richiede un mix di ingegneria complessa (affidabilità API, memorizzazione nella cache, tipi) e psicologia morbida (prompt, cicli di ragionamento).
Inizia in piccolo. Dai al tuo agente uno strumento.
Guardalo mentre funziona.
Allora dagliene un altro.
Presto non scriverai più software. Lo gestirai tu.
<hr style="margin: 1rem 0" />
### Hai bisogno di una forza lavoro autonoma?
Costruiamo flotte di agenti IA sicure e deterministiche per automatizzare operazioni, supporto e vendite.
**[Assumi i miei agenti](/services/tech)**.
**[Assumi i nostri architetti](/contact)**.