Un chatbot come ChatGPT, specie nella più recente versione basata sul modello generativo GPT-4 di OpenAI, offre risposte sempre più articolate, pertinenti e ampiamente argomentate. Su qualunque tema. Un po’ come GitHub Copilot, è possibile programmare con ChatGPT: l’utente del servizio può infatti chiedere all’intelligenza artificiale di produrre contenuti utilizzando uno specifico linguaggio di programmazione. Basta presentare il problema da risolvere, evitando di essere avari in termini di dettagli, per ottenere codice funzionante riutilizzabile nelle proprie applicazioni e nei propri progetti.
La nota rivista Nature, una delle pubblicazioni scientifiche più prestigiose e influenti al mondo, ha pubblicato alcuni consigli pratici per trarre beneficio dall’utilizzo di ChatGPT nello sviluppo software. “Anche se le risposte iniziali di ChatGPT sono instabili“, osserva Nature, “spesso il chatbot produce alla fine risultati accurati, compreso codice di programmazione“.
Già a marzo 2023, Nature sosteneva che ChatGPT poteva risolvere il 76% dei 184 compiti previsti in un corso introduttivo di bioinformatica dopo un singolo tentativo. Ben il 97% dei problemi venivano comunque risolti entro sette tentativi.
I sei consigli per programmare con ChatGPT
Secondo Nature, sentiti tanti esperti del settore, sono complessivamente sei i consigli da tenere a mente se ci si accinge a usare ChatGPT per programmare. Li elenchiamo di seguito per poi offrire una trattazione più dettagliata:
- Scegliere bene il campo applicativo
- Verificare sempre il codice fornito senza dare nulla per scontato
- Valutare gli aspetti legati alla sicurezza
- Avviare una conversazione con ChatGPT per raffinare via via l’output
- Assegnare a ChatGPT un ruolo preciso, come in un gioco
- Abbracciare il cambiamento
ChatGPT è un pappagallo stocastico
A una prima lettura, potrebbe sembrare una pesante offesa. In realtà l’appellativo di “pappagallo stocastico” non potrebbe calzare più a pennello per uno strumento come ChatGPT. Parlando di modelli open source come LLaMa e Alpaca, abbiamo descritto il processo di addestramento che è necessario per fare inferenza. Ovvero per indurre il modello a fare previsioni su nuovi dati.
La qualità delle risposte di ChatGPT dipende dall’input o prompt
Le risposte generate dai modelli generativi derivano dalle associazioni tra le parole apprese durante la fase di addestramento e la loro qualità, oltre che dalla dimensione del set di dati utilizzato, dipende molto anche dal livello di dettaglio del prompt (il quesito posto dall’utente). Quando si pongono domande a ChatGPT, per ottenere risposte migliori va evitata l’ambiguità. È inoltre bene suddividere il problema in parti più piccole e più facilmente gestibili.
È inoltre bene esortare il chatbot a calarsi in un ruolo specifico. Facendo assumere un certo ruolo a ChatGPT, è possibile aiutare il chatbot a muoversi nel giusto spazio probabilistico.
I termini pappagallo e stocastico: generare contenuti con un processo probabilistico
Il termine “pappagallo” si riferisce alla capacità dei modelli, come quelli usati da ChatGPT, di generare testo coerente e fluido, riproducendo ciò sono stati addestrati a fare, ma senza una “comprensione” del significato o del contesto delle parole.
Parlavamo di “previsioni” sui nuovi dati. Il termine “stocastico” si riferisce alla natura imprevedibile delle risposte generate da questi modelli. Poiché ChatGPT non ha una vera comprensione del significato delle parole, le risposte possono essere molto variabili (e questa è anche la bellezza del sistema) e possono essere influenzate da piccole variazioni nelle domande o nel contesto.
In generale, il termine “stocastico” si riferisce a un processo o a un fenomeno che è caratterizzato da una certa dose di casualità o imprevedibilità. È un concetto ampiamente utilizzato in matematica, statistica, fisica, informatica e in altre discipline. La stocasticità implica che il risultato di un processo stocastico non può essere determinato con precisione, ma può essere descritto solo in termini di probabilità. Ciò significa che, anche con informazioni complete sullo stato iniziale e sulle regole che governano il processo, non si può prevedere con certezza l’esito finale.
Servizi come ChatGPT, e in generale i vari modelli generativi, si basano su un processo probabilistico, non certo deterministico. Il chatbot “prevede” le parole successive più probabili nella composizione della risposta ma alla fine esse potrebbero non essere quelle effettivamente più accurate. “Non dovresti fare affidamento sull’accuratezza fattuale dell’output dei nostri modelli“, aveva osservato OpenAI riportando ChatGPT in Italia alcune settimane fa.
Programmazione: ChatGPT non è un vestito per tutte le stagioni
Riportando le valutazioni di Neil Ernst, informatico dell’Università di Victoria in Canada, Nature sottolinea che i chatbot basati sull’intelligenza artificiale funzionano meglio per attività di programmazione limitate. Si pensi alle operazioni da eseguire su un insieme discreto di dati, l’esecuzione di manipolazioni di dati, la creazione di meccanismi per la visualizzazione dei contenuti e di pagine Web. Qualcosa di molto lontano dal concetto di ingegneria del software.
“L’ingegneria del software è molto più che risolvere un rompicapo di programmazione“, spiega Ernst. “Bisogna pensare ai framework di test, scrivere codice gestibile e comprendere i compromessi coinvolti nella costruzione di un sistema. Non credo che gli strumenti attuali risolvano nessuno di questi problemi“.
Al netto dei punti cruciali posti sul tavolo da Ernst, i chatbot come ChatGPT si rivelano utilissimi in molte situazioni, Può capitare di non ricordare come si usa una certa sintassi o una libreria specifica per un linguaggio di programmazione. Secondo il docente accademico, sono un po’ come un’interfaccia conversazionale per Stack Overflow, un forum online di domande e risposte per programmatori.
I chatbot sono comunque anche molto bravi nello spiegare perché un codice di programmazione non funziona e correggere l’errore. Emery Berger, un informatico dell’Università del Massachusetts Amherst, ha creato lo strumento chiamato cwhy che utilizza ChatGPT per spiegare gli errori del compilatore nel gestire codice scritto con linguaggi come C, C++ e Rust. Un altro tool, ChatDBG, fornisce un’interfaccia conversazionale per il debug dei programmi. Una terza applicazione, Scalene, utilizza l’intelligenza artificiale per suggerire ottimizzazioni del codice al fine di migliorare le prestazioni.
I chatbot possono persino tradurre il codice da un linguaggio di programmazione a un altro. Mathieu Coppey, un biofisico del Curie Institute di Parigi, sta usando ChatGPT per passare da MATLAB, il suo linguaggio preferito, a Python.
Verificare il codice di programmazione creato con ChatGPT
Citando uno studio di Emily Morgan, dell’Università della California, i chatbot come ChatGPT introducono spesso bug “stupidi”. Ad esempio utilizzano l’operatore > invece di >= in un’istruzione condizionale: problemi facili da correggere, ma difficili da trovare.
Iza Romanowska, una scienziata che lavora presso l’Aarhus Institute of Advanced Studies in Danimarca, ha utilizzato ChatGPT per produrre codice in un linguaggio chiamato NetLogo. Poiché c’è meno codice online scritto in NetLogo rispetto ad altri linguaggi, ChatGPT è meno convincente. A volte, l’intelligenza artificiale arricchisce il codice restituito in output con funzioni che in realtà non esistono. Un comportamento battezzato con il termine di allucinazione.
Oltretutto, come abbiamo detto più volte, i chatbot generano un codice che riflette i loro dati di addestramento. La qualità complessiva del codice che appare sul Web è piuttosto bassa. Capita che l’intelligenza artificiale consigli codice di programmazione che espone a vulnerabilità di sicurezza, anche quelle di base. Brendan Dolan-Gavitt, un informatico della New York University, afferma che quando lo strumento di programmazione Copilot venne lanciato nel 2021, a valle di una serie di test stabilì che veniva prodotto codice vulnerabile nel 40% dei casi.
La morale, insomma, è verificare attentamente ciò che viene fornito da ChatGPT o da altri strumenti simili senza mai accettarlo ciecamente.
Come suggerisce Nature, infine, sviluppare codice con ChatGPT non dovrebbe essere considerata come un’esperienza basata su un unico tentativo. È una conversazione. “Scrivi qualcosa su ChatGPT, ottieni qualcos’altro in cambio, lo leggi con scetticismo, chiedi maggiori dettagli, richiedi di applicare delle ottimizzazioni“, commenta Amy Ko, un’informatica dell’Università di Washington a Seattle.