Può l’IA programmare? Solo a piccoli passi

AI programming? Only in small steps

I primi giorni entusiasmanti del rilascio pubblico lo scorso inverno di ChatGPT da parte di OpenAI hanno portato con sé evidenze della capacità del programma di generare codice informatico, una cosa che è stata una rivelazione per gli sviluppatori. Sembrava inizialmente che ChatGPT fosse così bravo nel generare codice che improvvisamente anche le persone con poca conoscenza di programmazione potessero usarlo per generare software potenti, tanto potenti da poter essere usati persino come malware per minacciare le reti informatiche.

Molti mesi di esperienza e ricerche formali sulla questione hanno rivelato che ChatGPT e altre IA generative simili non possono realmente sviluppare programmi, per così dire. Il massimo che possono fare è offrire dei piccoli passi, principalmente per problemi di programmazione semplici, che potrebbero o potrebbero non essere utili agli sviluppatori umani.

Inoltre: Come utilizzare ChatGPT per scrivere codice

“Ciò che la generazione ha aperto agli occhi di tutti è il fatto che posso quasi avere un partner quando sto svolgendo un compito che mi fornisce suggerimenti che mi permettono di superare gli ostacoli creativi”, ha detto Naveen Rao, co-fondatore e CEO della startup di intelligenza artificiale MosaicML, acquisita ad agosto da Databricks.

Allo stesso tempo, ha detto Rao, il livello di assistenza per la programmazione è basso.

“Ti forniscono una struttura, alcune cose che possono essere ripetute, ma non ti danno nulla di particolarmente buono”, ha detto. “Se dico, risolvi questo problema davvero difficile, allora non possono farlo, giusto? Non scrivono nemmeno codice particolarmente buono; è come qualcuno che lo fa da uno o due anni, codice di quel livello”.

In effetti, alcuni studi hanno scoperto che modelli di linguaggio di grandi dimensioni come GPT-4 sono ben al di sotto degli sviluppatori di codice umani nel loro livello generale di qualità del codice.

Uno studio recente condotto da Sayed Erfan Arefin e colleghi presso il Texas Tech University ha testato GPT-4 e il suo predecessore, GPT-3.5, con problemi di codifica di esempio dalla piattaforma online LeetCode, problemi di tipo richiesti ai candidati per un lavoro presso Google e altri giganti tecnologici.

I programmi sono stati valutati in base a due sfide principali, “organizzazione dei dati per un accesso efficiente (utilizzando strutture dati adeguate)” e “creazione di flussi di lavoro per elaborare i dati (utilizzando algoritmi efficaci)”. Sono stati valutati anche per la cosiddetta “manipolazione delle stringhe”, che si sovrappone alle altre due.

Inoltre: Come utilizzare ChatGPT per creare grafici e tabelle

Quando ai modelli di linguaggio sono state fornite quelle che gli autori chiamano domande complete, in cui i programmi sono stati forniti con esempi di soluzioni alle domande, GPT-4 ha risposto correttamente solo al 26% delle domande, rispetto al 45% dei partecipanti umani. Quando alcune informazioni sono state eliminate, la capacità di GPT-4 è scesa al 19% di risposte corrette alle domande. GPT-3.5 si è attestato intorno al 12% e al 10%, rispettivamente.

Gli autori hanno anche esaminato la qualità del codice generato da GPT, sia per i successi che per i fallimenti. In entrambi i casi, hanno riscontrato un problema costante: GPT ha spesso difficoltà con una pratica di base della programmazione, “definire le variabili in modo coerente”.

Correttezza di GPT-3, GPT-4 e umani, per set di addestramento e di test, quando vengono fornite informazioni complete sul problema, con soluzioni di esempio, informazioni incomplete.

Anche la scala rappresenta un problema per la generazione automatica di codice da parte dell’IA. I risultati più incoraggianti finora negli studi su GPT-4 riguardano principalmente problemi di bassa complessità.

Uno studio, condotto da David Noever della società di sicurezza informatica PeopleTec, ha testato la capacità di GPT-4 di individuare codice errato in campioni di codice simili a programmi esistenti sul mercato per il testing delle vulnerabilità, come Snyk, una forma di “Static Application Security Testing” (SAST).

In alcuni casi, GPT-4 ha individuato più errori di Snyk, hanno riportato gli autori. Ma ha anche saltato numerosi errori. Inoltre, è stato testato su un totale complessivo di poco più di 2.000 righe di codice. Ciò è minimo rispetto alle applicazioni di produzione complete, che possono contenere centinaia di migliaia o milioni di righe di codice, distribuite su numerosi file collegati. Non è chiaro se i successi ottenuti con i problemi di bassa complessità possano essere applicati a una complessità così elevata.

Inoltre: come ChatGPT può riscrivere e migliorare il tuo codice esistente

Uno studio dello scorso mese condotto da Zhijie Liu e colleghi presso l’Università di ShanghaiTech ha esaminato la qualità del codice basandosi sulla correttezza, comprensibilità e sicurezza. L’esame ha messo alla prova ChatGPT su compiti di LeetCode, come Arefin e il team di Texas Tech, ed ha anche testato la generazione di codice su ciò che viene chiamato l’ambiente di vulnerabilità comune, un test di vulnerabilità mantenuto dalla società di ricerca MITRE.

Liu e il suo team hanno testato ChatGPT su compiti formulati prima o dopo il 2021, perché ChatGPT è stato addestrato solo su materiale precedente al 2021, quindi volevano vedere come il programma si comportava quando veniva testato su sfide consolidate e più recenti.

I risultati sono sorprendenti. Per i problemi più recenti, chiamati “Aft.” per “dopo” il 2021, Lui e il suo team hanno riscontrato una percentuale molto bassa di correttezza nel codice generato da ChatGPT. “La capacità di ChatGPT di generare codice corretto dal punto di vista funzionale diminuisce significativamente all’aumentare della difficoltà del problema”, scrivono. Solo il 15,4% del codice del programma in linguaggio C era accettabile e nessuno di esso era accettabile per i problemi più difficili. Inoltre, “il codice generato da ChatGPT per problemi difficili e medi è più probabilmente soggetto a errori di compilazione e di esecuzione”. I programmatori umani che hanno svolto il test, in media, hanno ottenuto il 66% di risposte corrette.

Inoltre: come utilizzare ChatGPT per creare un’app

Per i problemi più vecchi, etichettati come “Bef.” la percentuale sale al 31% di risposte corrette, che è comunque bassa.

Il team ha esaminato numerosi esempi e ha qualificato i tipi di risposte errate che ChatGPT ha fornito nel suo codice. Ad esempio, mentre la progettazione generale di un programma potrebbe essere nella giusta direzione, una determinata riga di codice potrebbe mostrare un uso errato fondamentale di qualcosa di semplice come la valutazione di una variabile, un errore che è difficile immaginare che un programmatore principiante commetta.

Esempio di codice errato generato da ChatGPT. Il programma dovrebbe ordinare le scatole in categorie in base alla descrizione. Nella riga 12, il codice decide che se una scatola non è “ingombrante” né “pesante”, dovrebbe essere classificata nella categoria “entrambi” – esattamente il contrario di una descrizione di scatola che dovrebbe essere “neither” (né l’uno né l’altro).

Liu e il suo team giungono a una serie di conclusioni generali affascinanti e anche a fattori mitiganti. Uno di questi è che ChatGPT ha difficoltà con problemi nuovi: “ChatGPT potrebbe avere limitazioni nella generazione di codice per problemi sconosciuti o mai visti nel set di dati di addestramento, anche se i problemi sono facili dal punto di vista umano in termini di logica.”

Ma quale linguaggio di programmazione viene utilizzato fa la differenza: la tecnologia funziona meglio con alcuni linguaggi di programmazione che sono “fortemente tipizzati” o più “espressivi”.

Inoltre: come funziona effettivamente ChatGPT?

“In generale, la probabilità che ChatGPT generi codice funzionalmente corretto è maggiore quando si utilizzano linguaggi con una maggiore potenza espressiva (ad esempio, Python3)”, scrivono.

Un altro difetto è che ChatGPT può essere complicato, quindi gli errori sono più difficili da correggere. “Il processo di generazione del codice di ChatGPT può essere negligente”, scrivono, “e il codice generato potrebbe non soddisfare alcune delle condizioni dettagliate descritte, rendendo difficile generare o correggere con successo (per renderlo funzionalmente corretto)”.

E sul test di vulnerabilità comune di MITRE, “il codice generato da ChatGPT spesso mostra vulnerabilità rilevanti, il che è un problema grave”, scrivono. Fortunatamente, notano che ChatGPT è in grado di correggere molte di queste vulnerabilità in prompt successivi quando viene fornita con informazioni più dettagliate dal set di dati MITRE.

Tutti e tre gli studi suggeriscono che è ancora molto presto nell’uso dell’IA generativa per la programmazione. Come ha detto Rao, è utile per semplici compiti di assistenza, dove il programmatore è al comando.

Inoltre: I 10 migliori plug-in di ChatGPT (e come sfruttarli al meglio)

È possibile che il progresso arrivi da nuovi approcci che rompono i paradigmi di programmazione. Ad esempio, un recente lavoro di Google addestra modelli di linguaggio a cercare su internet strumenti per risolvere compiti. E il lavoro dell’unità DeepMind di Google addestra modelli di linguaggio a esplorare più a fondo l’ingegnerizzazione dei propri prompt per migliorare le prestazioni – una sorta di programmazione riflessiva che sembra promettente.

Qualcosa di più profondo potrebbe essere alla fine necessario, dice Rao.

“Non penso che si possa risolvere con i prompt”, dice Rao. “Penso che ci siano ancora alcuni problemi fondamentali che dobbiamo risolvere – c’è ancora qualcosa di fondamentale che manca.”

Aggiunge Rao, “Possiamo essenzialmente fornire così tanti dati a una grande rete neurale che corrispondono a centinaia di vite umane o più di esperienza, eppure, un essere umano con molto meno esperienza può risolvere meglio problemi nuovi, e non commettere certi tipi di errori di base.”