Effetto Dory
Lo so che gli LLM hanno poca memoria, ma non avrei mai immaginato di doverne subire così in fretta le conseguenze.
– Immagine generata da Google Gemini.
Nota per il lettore. Questo articolo è un complemento di quello precedente, Antigravity: un driver scritto dall’IA e andrebbe letto dopo il primo. Ma ecco un breve riassunto per i più pigri.
Non sapendo come fare a scrivere un driver per una videocamera SPI collegata ad un Raspberry Pi Pico, ho chiesto aiuto a Gemini 3 Flash, lavorando interamente dentro Antigravity. Dopo parecchie ore di lavoro, l’agente è riuscito a scrivere un programma funzionante in Arduino. A questo punto ho fatto un errore fatale, chiedendogli ancora di più, ma senza prendere delle precauzioni.
Premessa
Il codice funzionante generato con tanta fatica da Gemini 3 Flash prevedeva che il Pico facesse da interfaccia fra il mio Mac Mini e la videocamera SPI.1 Sul Mac, uno script in Python comandava la cattura di una immagine, mentre l’acquisizione vera e propria veniva eseguita dal Pico tramite un programma per Arduino (uno sketch, nel gergo della piattaforma), che è fondamentalmente codice C/C++ adattato all’uso con i microcontrollori.
Comandare tutto da computer va benissimo per le prime prove, ma è molto scomodo quando si prevede di usare un dispositivo di questo genere per delle attività sul campo.
Catture automatiche
Allora ho chiesto a Gemini di modificare il codice in modo da effettuare automaticamente la cattura dell’immagine ogni N minuti oppure premendo un pulsante, inviando poi l’immagine ad un computer tramite Wi-Fi.2
Prompt
Gemini si mette subito al lavoro, sempre continuando ad usare Arduino. Dovrebbe essere un programma molto semplice da realizzare ma, per quanto Gemini ci provi, non funziona mai. Dopo molti tentativi infruttuosi mi scoccio e gli chiedo di ritornare all’ultima versione funzionante del programma.
Tornare sui propri passi
E qui Gemini sbatte contro un muro imprevisto perché, nonostante la mia guida e i miei continui suggerimenti, non c’è assolutamente verso di riuscirci.
Stupidamente non avevo pensato di tenere traccia delle varie versioni del codice man mano che veniva generato, e questa è solo ed esclusivamente colpa mia.
Ma d’altre parte, pur essendo ben consapevole che i modelli linguistici di grandi dimensioni (LLM, Large Language Model) mentre lavorano hanno una memoria che sembra quella della pesciolina Dory, non avrei mai immaginato che questi sistemi ultrasofisticati non fossero neanche in grado di ricostruire a posteriori ciò che hanno fatto, pur avendo a disposizione decine e decine di file implementation_plan.md, task.md e walkthrough.md, che descrivono per filo e per segno tutti i passaggi precedenti (li ho contati, solo per questo progetto Antigravity ha generato più di 250 file diversi).
Tornare sui propri passi è una cosa che invece strumenti come git e i suoi predecessori, tutti privi di una qualunque forma di intelligenza che non sia quella dei suoi creatori, sono in grado di fare benissimo da più di cinquant’anni. Magari chi sviluppa questi agenti tanto intelligenti potrebbe farci un pensierino, no?
Epilogo
Alla fine, testardamente e basandomi sulle mie note,3 sono riuscito a far ripetere a Gemini tutto quello che aveva già fatto. Ci ha messo delle ore, ha ripetuto pari pari tutti gli errori della volta precedente, ma alla fine il codice ricostruito funziona di nuovo correttamente.
Già che c’ero, gli ho fatto rifare tutto anche per CircuitPython, e anche questo port ha richiesto molte altre ore di lavoro e di errori. E, prima di arrivarci, Gemini ha creato dei problemi talmente gravi che macOS ha dovuto disabilitare la comunicazione delle porte USB con il Pico, costringendomi a riavviare per un paio di volte il Mac.
Inutile dire che questa volta gli ho fatto tenere traccia di ogni passaggio con git e ho messo pure tutto il codice su GitHub, non si sa mai.
Uno dei prossimi passi sarà (spero) MicroPython, ma questa è ancora un’altra storia.
-
Perché Arduino fa tanta fatica, pur se è una piattaforma di sviluppo per microcontroller molto più matura di MicroPython e CircuitPython? Perché, per il modello di videocamera che ho scelto, Arducam non supporta il Raspberry Pi Pico ma solo i Raspberry Pi classici (quelli con il sistema operativo, per intenderci, come il Rasperry Pi 4, 5 e lo Zero), nonché tutti i microcontroller Arduino e ESP286. ↩︎
-
Lo so che l’inglese non è un gran che, è più un flusso di pensieri che un discorso organico. Ma ci sono dettagli che mi vengono in mente mentre scrivo, e preferisco buttarli giù così alla bell’e meglio piuttosto che perdere il filo delle idee. ↩︎
-
Non ripeterò mai abbastanza quanto sia importante tenere delle note scritte di quello che si fa. All’inizio sembra solo una perdita di tempo, mentre invece è il modo migliore per evitare di perderlo in futuro. ↩︎
Commenti
Aggiungi un commento
@name
@message
IT
EN