Con gli LLM, è possibile generare software con un nuovo linguaggio di programmazione: L'inglese (o qualunque sia la vostra lingua madre). L'ingegneria immediata sostituirà l'arte del codificatore o gli ingegneri del software che capiscono il codice avranno ancora un posto nei futuri cicli di vita del software? Abbiamo parlato con Greg Benson, professore di informatica presso l'Università di San Francisco e Chief Scientist di SnapLogic, di prompt engineering, dei suoi punti di forza e dei suoi limiti, e se il futuro del software richiederà la comprensione del codice.
Comprensione dell'ingegneria tempestiva
Molti linguaggi di programmazione hanno cercato di astrarre la complessità del codice macchina attraverso un codice simile a un linguaggio naturale. Con gli LLM, l'ingegneria dei prompt sembra il culmine di questa tendenza. Che cosa devono considerare gli sviluppatori quando scrivono i prompt per trattarli come un linguaggio di programmazione?
I primi linguaggi dichiarativi, come SQL, hanno cercato di trovare un equilibrio tra codice strutturato e un vocabolario più vicino al linguaggio naturale. Tuttavia, SQL è fondamentalmente un linguaggio strutturato con una sintassi formale. Sebbene l'elaborazione del linguaggio naturale (NLP) esista da tempo, è stato solo con l'avvento degli LLM che il santo graal di passare dall'intento umano in linguaggio naturale al codice è diventato una realtà pratica. Gli LLM hanno aperto la possibilità di usare il linguaggio naturale per descrivere un programma, un'espressione o un risultato desiderato. I LLM sono particolarmente bravi a estrarre dati da fonti non strutturate e multimodali, a riassumere il testo e a sintetizzare nuovi dati e codice.
In molti casi, i prompt e gli LLM possono essere usati per sostituire codice complesso o per eseguire funzioni che sarebbero quasi impossibili da realizzare con il codice convenzionale o che richiederebbero molto tempo per essere formulate come un problema di apprendimento automatico convenzionale, in cui sono necessari molti dati etichettati per addestrare modelli specializzati. In questo modo, si può pensare al prompt come a un programma. O meglio, l'inglese e altre lingue sono diventate nuovi linguaggi di programmazione.
Tuttavia, il fatto di trattare i prompt come "codice" comporta alcune avvertenze che devono essere prese in considerazione. Un prompt che funziona bene con un LLM può non funzionare bene con un altro LLM. Inoltre, i modelli di frontiera migliorano frequentemente, il che significa che un prompt che ha funzionato bene con ChatGPT-4 potrebbe non funzionare altrettanto bene o meglio con ChatGPT-4o. Inoltre, anche impostando il parametro di casualità (temperatura, come viene chiamato) a 0,0, gli LLM in esecuzione su cluster di GPU di grandi dimensioni possono comunque produrre risultati diversi sulla base dello stesso input da un'inferenza LLM all'altra. Questo fatto rende difficile incorporare gli LLM in un'applicazione. È necessario un buon modo per valutare il compito che si vuole far eseguire all'LLM, in modo da poterlo seguire da LLM a LLM e da versione a versione. La gestione di questa imprevedibilità è il prezzo attuale da pagare per sfruttare la potenza degli LLM.
Dietro le quinte, ovviamente, i prompt saranno convertiti in codice in un linguaggio di programmazione, che verrà poi compilato o interpretato in codice macchina. Si perde un po' di controllo scrivendo in un prompt astratto di livello superiore (anche nei linguaggi di programmazione)?
Per chiarire, i prompt non vengono convertiti in codice, ma piuttosto si possono usare i prompt e gli LLM come sostituti del codice in molti casi. Quindi, invece di far generare codice all'LLM, si può progettare un prompt che utilizzi un LLM per eseguire un'operazione su dati di input. In questo caso, non vi è alcuna conversione del prompt in codice. Piuttosto, i dati di input vengono combinati con il prompt e inviati direttamente all'LLM per l'inferenza. Il risultato dell'inferenza può essere considerato come l'output di una funzione che si è chiesto all'LLM di eseguire.
In questo caso, il prompt e i dati di input vengono convertiti in una rappresentazione numerica (token) che viene data in input all'LLM, il quale itera sulla sequenza di token per generare un risultato che viene poi convertito in testo e restituito dall'LLM come risultato. Utilizzando un LLM in questo modo, si fa affidamento sul fatto che l'LLM interpreti correttamente il prompt sui dati di input previsti. Il modo in cui l'LLM arriva al risultato è astratto, nel senso che l'inferenza è soggetta ai dati di addestramento originali e alla struttura della rete neurale. Quindi, per questo percorso, l'LLM è un po' una scatola nera e si perde il controllo. Per questo motivo, è necessario impiegare tecniche di valutazione rigorose per assicurarsi che i prompt, i dati di input e gli LLM diano i risultati attesi.
Adattare le competenze a un nuovo ambiente
Ci sono competenze che potrebbero andare perse quando si passa dalla programmazione alla guida della BN?
Si tratta di una questione molto dibattuta nell'ambito della formazione informatica. Mentre i LLM diventano sempre più bravi a generare codice e possiamo usare il linguaggio naturale per descrivere il comportamento desiderato, qual è il ruolo dell'informatica convenzionale e della programmazione informatica? Probabilmente ci sarà un'intera generazione di lavoratori tecnici in grado di generare programmi informatici utili senza una laurea formale in informatica. Questi lavoratori non avranno lo stesso tipo di conoscenze e competenze fondamentali che hanno oggi gli informatici. Voglio credere che continuerà a esserci bisogno di informatici, proprio come continuerà a esserci bisogno di fisici e biologi. Tuttavia, il modo in cui imparano e svolgono il loro lavoro potrebbe cambiare notevolmente grazie all'uso dei LLM. Per quanto mi riguarda, i LLM hanno accelerato notevolmente il modo in cui apprendo nuovi concetti e materiali.
Pensi che gli sviluppatori cominceranno a desiderare l'agenzia e a reagire? A che punto questi strumenti aggiungono produttività e a che punto gli sviluppatori potrebbero sentirsi come se fossero diventati dei copy editor per i motori di intelligenza artificiale?
Credo che oggi molti sviluppatori si oppongano all'uso degli assistenti di codifica proprio perché non vogliono perdere la propria autonomia e il controllo sull'arte dello sviluppo del software. Credo che l'eccessiva dipendenza dal codice generato da LLM sia davvero preoccupante. Da un lato, con l'aiuto di LLM posso implementare prototipi di sistemi molto più velocemente, come generare un'applicazione frontend completa in JavaScript, il che mi permette di esplorare rapidamente le idee attraverso il codice funzionante. D'altra parte, quale sarà la supervisione umana necessaria per fidarsi del codice generato che verrà messo in produzione? Soprattutto per i sistemi critici per la vita, come i robot chirurgici. Credo che lo stato futuro del rapporto tra sviluppatori umani e codice generato da LLM sia ancora in evoluzione. Penso che esista un percorso in cui gli esseri umani costruiscono sistemi e strategie che sfruttano gli LLM in modo da garantire la fiducia nel processo e che inseriscono gli esseri umani nel ciclo, ma non li relegano a semplici editor di copie.
Ci sono cose che un prompt può fare che il codice non può fare?
Sì, i prompt e gli LLM possono descrivere funzioni che sarebbe quasi impossibile scrivere come codice. Ce ne sono di ovvie, come l'analisi del sentiment o la sintesi, ma la vera forza sta nel generalizzare a partire da pochi esempi. L'estrazione accurata di informazioni da documenti, come i PDF, è notoriamente difficile da scrivere come codice. Inserire esempi di dati estratti desiderati in un prompt aiuta il LLM a "imparare" come applicare il modello a futuri documenti di input. È possibile ottenere questo risultato con l'apprendimento automatico tradizionale, ma a un costo molto elevato in termini di tempo e di competenze di data science necessarie per addestrare e testare tali modelli.
Utilizzo di modelli linguistici di grandi dimensioni
Quanto conta il particolare LLM per un ingegnere pronto? Si può scegliere quello che si preferisce o ci sono caratteristiche/dimensioni/dati di formazione specifici che devono essere presi in considerazione?
Sebbene sembri esserci una certa convergenza in alcune capacità dei modelli di frontiera, ci sono ancora delle differenze che possono avere un impatto sul vostro caso d'uso specifico. Esistono anche migliaia di LLM specializzati che possono essere scaricati da Hugging Face e che sono ottimi in ambiti specifici, come l'analisi delle serie temporali, per citarne uno. I costi e le funzionalità sono in continua evoluzione e un ingegnere pronto a tutto vorrà acquisire familiarità con i principali LLM. Anche la ricerca di LLM open-source sarà importante, perché questi offrono privacy e sicurezza non raggiungibili dal fornitore di LLM cloud .
È possibile migliorare i risultati immediati con i dati giusti?
Sì, i risultati di LLM possono essere influenzati dai giusti dati di esempio che si sceglie di aggiungere al prompt. Inoltre, il fine-tuning sta diventando sempre più comune, il che significa che è possibile fornire a un modello grandi quantità di dati di esempio che non potrebbero essere inseriti in un prompt. La comprensione dei tipi di esempi da fornire dipenderà molto dal caso d'uso specifico. Si tratta di un'area che assomiglia più alla sperimentazione scientifica che allo sviluppo di software, perché è necessario formulare un'ipotesi di prompt e di esempio di dati, e poi è necessario un modo per valutare la propria ipotesi. Questo può portare a molti tentativi ed errori.
Consigli per i futuri ingegneri
In futuro saremo tutti ingegneri pronti all'uso o ci sarà sempre bisogno di persone che capiscano i linguaggi di programmazione?
La mia speranza è che ci sarà sempre bisogno di esperti umani in ogni campo, compresi l'informatica e i linguaggi di programmazione. Suggerire il contrario significa sottomettere il progresso della civiltà all'intelligenza artificiale. Vedo un futuro in cui utilizziamo i LLM per accelerare lo sviluppo del software e accelerare l'apprendimento umano del software e dei linguaggi, in modo da beneficiare sia della potenza dei LLM sia della creatività e della conoscenza umana.
Quale sarebbe il suo consiglio ai laureati in informatica e ai giovani ingegneri appena laureati che si trovano ad affrontare un nuovo panorama nel mondo dello sviluppo del software?
Ai miei studenti di informatica dico che vi trovate in un momento straordinario della storia dell'informatica. Nella mia vita, questo è il progresso tecnologico più significativo che abbiamo visto, e nei prossimi cinque anni tutto cambierà. Cambierà tutto, dal modo in cui le aziende funzionano e operano, all'efficienza del business, alla creazione di nuovi tipi di lavoro. Siamo in un momento di trasformazione e, per certi versi, si tratta di un esperimento, proprio come molte altre tecnologie che abbiamo visto, come la criptovaluta. Dobbiamo quindi cogliere le opportunità che ci si presentano. Bisogna abbracciarle, perché c'è una proliferazione di assistenza alla codifica che sta cambiando lo sviluppo del software e l'educazione informatica. Il modo in cui ci impegniamo non può essere ignorato.
Questo articolo è stato adattato da un articolo pubblicato originariamente sul blog di blog di StackOverflow.