Lavorare con un LLM è lavorare con un assistente limitato

Dopo qualche mese di lavoro con i modelli di linguaggio, ho finalmente trovato il paragone che mi torna. Un LLM è come un assistente brillante in una cosa e limitato in altre due: non sa ascoltare e capisce molto poco di ciò che gli dici.

Non scrivo questo per affossare i modelli. Lo scrivo perché è la descrizione più onesta che conosco — e perché finché non lo capisci, continui a farti fregare.

In cosa è bravo

Cominciamo con onestà. Genera fluentemente, in fretta e con sicurezza. Sa tantissimo. Ti scrive uno script, traduce, riassume, tira fuori dieci varianti di titolo. Questo è reale e funziona. Se fosse tutto, sarebbe un impiegato perfetto.

Ma non lo è.

Non sa ascoltare

«Ascoltare» non è il suo forte. Gli dici: «sincronizza la conoscenza tra le macchine, ma non cancellare niente, usa la modalità sicura». E lui — perché in qualche schema ha visto che sincronizzare significa rsync con la bandiera --delete — fa esattamente ciò contro cui hai avvisato. Non per cattiveria. Perché non «ascolta» la tua intenzione. Adatta i token al contesto. Il tuo «ma non cancellare» sono solo pochi token in più che, statisticamente, non devono per forza vincere contro lo schema radicato «sync = rsync –delete».

Capisce molto poco

E «capire» — lì è messo peggio. Il modello non ha un modello del tuo mondo. Ha una distribuzione di probabilità sul prossimo token. Quindi non «capisce» che una copia locale vuota più --delete equivale a svuotare l’archivio condiviso. Vede un comando che calza con uno schema e lo esegue. Le conseguenze sono oltre il suo orizzonte.

La prova: sincronizzazione della conoscenza

L’ho visto da poco nella sua forma più pura. Sincronizzazione della conoscenza tra tre macchine — un Mac, una seconda macchina, un VPS. Tutto in modalità sicura, «non cancelliamo niente». E all’improvviso il VPS perde millecinquecento file.

L’indagine ha mostrato: un agente sulla seconda macchina si collegava ogni tre minuti e cancellava file con la bandiera --delete. La sua copia locale era vuota, quindi --delete ha svuotato l’archivio condiviso. Ho ripristinato dal backup — e quattro minuti dopo è sparito di nuovo tutto, perché quell’agente è tornato e ha cancellato ancora.

È cattiveria? No. È esattamente quella limitazione: ha ricevuto l’istruzione «sincronizza», e nei suoi schemi «sincronizzare» significa «rsync –delete». Il mio «ma in sicurezza» ha perso contro lo schema radicato. Non ha ascoltato. Non ha capito.

Cosa farne

Il punto che mi è costato parecchio tempo raggiungere: non puoi dire una cosa una volta e aspettarti che l’abbia afferrata. Devi dare per scontato che farà la stupidaggine esattamente nel modo su cui non hai avvisato — perché non ha un modello del tuo mondo, ha la statistica. Supervisione, barriere, verifica — non sono extra, sono metà del lavoro.

Questo non è lamentarsi. Quando lo capisci, lavorare con un LLM finalmente diventa prevedibile. Smetti di stupirti che «gliel’avevo già detto», e cominci a progettare perché la stupidità non abbia da dove entrare.

Perché un assistente brillante e limitato resta il miglior assistente che abbiamo mai avuto. Solo che va sorvegliato come nessun altro.