L'avvento di ChatGPT e dei modelli LLM (Large Language Models) ha rivoluzionato il mondo. Quasi tutti i settori hanno subito una rivoluzione e stanno adottando questi potenti mezzi dell'intelligenza artificiale per costruire nuovi strumenti e servizi. Ma come si costruiscono i prompt, ossia le istruzioni, per far generare a questi modelli ciò che ci interessa? L'ingegneria dei prompt è la disciplina che si occupa proprio di questo aspetto. Scopriamo alcuni suggerimenti per migliorare le nostre richieste ai tool di intelligenza artificiale.

Share

Reading time: 6 minutes

Il 30 Novembre 2022 il mondo ha subito una rivoluzione straordinaria: è stata rilasciata la prima versione di ChatGPT! Prima di allora, l’intelligenza artificiale era relegata agli ambiti accademici e ai settori di ricerca e sviluppo delle aziende hi-tech. Si erano già raggiunti alcuni risultati interessanti, ma non avevano riscontravano il successo e la popolarità che ha ottenuto ChatGPT in pochissimo tempo. Ma perché parliamo di rivoluzione? Le applicazioni dei modelli linguistici di grandi dimensioni (LLM) su cui si basa il chatbot di OpenAI hanno invaso moltissimi settori dalla generazione di contenuti multimediali per il web (immagini, video, testi) al supporto nelle attività industriali. Da questi modelli si sono sviluppati ulteriori software che sfruttano il potenziale dei LLM per fornire strumenti e servizi ancora più avanzati e personalizzabili.

Ovviamente ciò ha comportato alcune critiche sull’uso massiccio dell’intelligenza artificiale sollevando preoccupazioni sul suo impatto nell’occupazione e l’etica del suo utilizzo. Queste questioni sono tutt’oggi questione di dibattito e, molto probabilmente, lo saranno per ancora lungo tempo. In questo articolo non vogliamo affrontare queste tematiche che sono molto delicate, ma vogliamo introdurre una nuova branca che si è sviluppata proprio con l’avvento di ChatGPT e dei suoi fratelli: l’ingegneria del prompt. Analizzeremo quindi così l’ingegneria dei prompt e alcuni suggerimenti utili per costruire dei prompt efficaci per ottenere i risultati migliori.

Ingegneria dei prompt

L’ingegneria dei prompt è una nuova disciplina che consente lo sviluppo e l’ottimizzazione dei prompt per un utilizzo efficiente dei modelli linguistici (LM) in varie applicazioni e ambiti di ricerca. Aiuta a comprendere le capacità e i limiti dei modelli linguistici di grandi dimensioni (LLM).

I ricercatori utilizzano l’ingegneria dei prompt per migliorare le capacità dei LLM in vari compiti semplici e complessi, come la risposta alle domande e il ragionamento aritmetico. Gli sviluppatori di software dovrebbero concentrarsi sulla progettazione di tecniche di prompt forti ed efficienti, che funzionino senza problemi con gli LLM e altri strumenti.

Non si limita alla progettazione e allo sviluppo di prompt, ma comprende una gamma più ampia di funzionalità. L’ingegneria dei prompt coinvolge una serie di competenze e tecniche utilizzate per interagire con i LLM e svilupparli, rendendola una competenza essenziale per interfacciarsi, costruire e comprendere le capacità dei LLM. L’ingegneria dei prompt può migliorare la sicurezza degli LLM e sviluppare nuove funzionalità, come il potenziamento degli LLM con strumenti esterni e conoscenze di dominio.

LLM Configurazione

Quando si lavora con i prompt, si può accedere all’LLM tramite un’API o direttamente. È possibile definire vari parametri per ottenere risultati diversi per i prompt.

  • Temperatura: Una temperatura più bassa implica risultati più deterministici, in cui viene sempre selezionato il token più probabile. Una temperatura più alta, invece, può aumentare la diversità e consentire alternative più innovative. In sostanza, il peso degli altri token potenziali viene elevato. Per i compiti di AI basati sui fatti, è consigliabile utilizzare valori di temperatura più bassi per ottenere risposte più concise e concrete. Tuttavia, per la generazione di poesie e altri compiti creativi, aumentare la temperatura può essere vantaggioso.
  • top_p: può controllare il determinismo del modello quando genera una risposta utilizzando una tecnica di campionamento della temperatura chiamata core sampling. Se si desiderano risposte precise e concrete, si consiglia di mantenere un valore basso. Se si desidera una gamma più ampia di risposte, bisogna aumentare il valore.

Si consiglia di modificare solo un parametro, non entrambi. Tenete presente che la versione di LLM utilizzata può causare risultati diversi.

Elementi di un Prompt

Un prompt può contenere uno dei seguenti componenti:

  • Istruzione: un compito o un’istruzione specifica che il modello deve eseguire
  • Contesto: può coinvolgere informazioni esterne o contesti aggiuntivi che possono indirizzare il modello verso risposte migliori.
  • Dati in Input: è l’input o la domanda per la quale ci interessa trovare una risposta
  • Indicatore dell’Output: indica il tipo o il formato dell’output.

Non tutti i componenti sono necessari per un prompt e il formato dipende dal compito da svolgere. Di seguito vedremo alcuni esempi di come usare questi elementi

Suggerimenti generali per la progettazione di Prompt

Ecco alcuni suggerimenti da tenere a mente durante la progettazione dei tuoi prompt:

Inizio semplice

Quando si inizia a progettare i prompt, bisogna tenere presente che si tratta di un processo iterativo che richiede molta sperimentazione per ottenere risultati ottimali.

Si può iniziare con prompt semplici e aggiungere altri elementi e contesti man mano che si punta a ottenere risultati migliori. Per questo motivo è fondamentale modificare i suggerimenti durante il percorso. Quando si ha un compito importante che coinvolge molte sottoattività diverse, si può cercare di suddividere il compito in sottoattività più semplici e continuare ad aumentare man mano che si ottengono risultati migliori. In questo modo si evita di aggiungere troppa complessità al processo di progettazione del prompt all’inizio.

Le istruzioni

È possibile progettare prompt efficaci per vari compiti semplici, utilizzando comandi per indicare al modello ciò che si desidera ottenere, come “Scrivi”, “Classifica”, “Riassumi”, “Traduci”, “Ordina”, ecc.

Tenete presente che dovete anche sperimentare molto per capire cosa funziona meglio. Provate diverse istruzioni con parole chiave, contesti e dati diversi e vedete cosa funziona meglio per il vostro caso d’uso e la vostra attività. Di solito, più il contesto è specifico e rilevante per l’attività che si sta cercando di svolgere, meglio è. Nelle prossime guide parleremo dell’importanza del campionamento e dell’aggiunta di ulteriore contesto.

Altri raccomandano di collocare le istruzioni all’inizio del prompt. Si raccomanda anche di usare un separatore chiaro, come “###”, per separare l’istruzione dal contesto.

Per esempio:

				
					### Instruction ###
Translate the following text into Spanish
Text: Ciao!
				
			

Output:

				
					¡Hola!
				
			

Specificità

Siate molto specifici riguardo all’istruzione e al compito che volete che il modello esegua. Più la richiesta è descrittiva e dettagliata, migliori saranno i risultati. Questo è particolarmente importante quando si cerca un risultato o uno stile di generazione desiderato. Non esistono token o parole chiave specifiche che portano a risultati migliori. È più importante avere un buon formato e un prompt descrittivo. In effetti, fornire esempi nel prompt è molto efficace per ottenere i risultati desiderati in formati specifici.

Quando si progettano i prompt, si deve anche tenere presente la lunghezza del prompt, poiché ci sono dei limiti per quanto riguarda la sua lunghezza. Bisogna pensare a quanto sia necessario essere specifici e dettagliati. Includere troppi dettagli non necessari non è necessariamente un buon approccio. I dettagli devono essere pertinenti e contribuire al compito da svolgere. Questo è un aspetto che dovrete sperimentare molto. Incoraggiamo la sperimentazione e l’iterazione per ottimizzare i prompt per le vostre applicazioni.

A titolo di esempio, proviamo un semplice prompt per estrarre informazioni specifiche da un testo.

				
					Extract the name of the places in the following text. 
Desired format:
Place: <list_of_place_names_separated_from_virgula>
Input: "Although these developments are encouraging for researchers, much still remains a mystery. "We often have a black box between the brain and the effect we see in the periphery," says Henrique Veiga-Fernandes, a neuroimmunologist at the Champalimaud Center for the Unknown in Lisbon. "If we want to use it in the therapeutic context, we have to actually understand the mechanism.""

				
			

Output:

				
					Place: Champalimaud Center for the Unknown in Lisbon.
				
			

Il testo di input è ottenuto da questo articolo di Nature.

Evitare l’imprecisione

È sempre meglio essere specifici e diretti nel fornire le istruzioni e le informazioni. Più è la richiesta è diretta, più l’output sarà efficace.

Ad esempio, potreste essere interessati a conoscere il concetto di ingegneria dei prompt. Potreste provare qualcosa come:

				
					Explain the concept of prompt engineering. Keep the explanation short, just a few sentences, and don't be too descriptive.
				
			

Output:

				
					Prompt engineering involves crafting specific instructions or queries to elicit desired responses from language models like me. It's a process of fine-tuning prompts to achieve more accurate and relevant outputs, often used to control the tone, style, or depth of information provided by the model. This technique is crucial for obtaining precise and tailored results in various applications.
				
			

Come vedete l’output non è male, anche se non è chiaro dal prompt quante frasi usare e con quale stile. Se però si usa un’istruzione più diretta come segue l’output sarà più inerente a ciò che vogliamo. Ad esempio, se scriviamo:

				
					Use 2-3 sentences to explain the concept of prompt engineering to a high school student.
				
			

L’output risultante sarà:

				
					Prompt engineering is like giving a computer really clear instructions or questions to get the best answers. It's like finding the right way to ask a question so the computer understands exactly what you want. This helps get accurate and helpful responses from the computer.
				
			

Fare o non fare?

Un altro consiglio comune quando si progettano i prompt è quello di evitare di dire cosa non fare, ma di dire invece cosa fare. Questo aumenta la specificità e aiuta il modello a concentrarsi sui dettagli che portano a buone risposte.

Ecco un esempio di chatbot per la raccomandazione di film che non riesce a fare esattamente ciò che non voglio che faccia a causa del modo in cui ho scritto l’istruzione, concentrandomi su cosa non fare.

				
					An agent recommending films to a client is presented below. DO NOT ASK FOR INTEREST. DO NOT ASK FOR PERSONAL INFORMATION.
Client: Please recommend a movie based on my interests.
Agent:

				
			

Output:

				
					Sure! Can you tell me if you're in the mood for something adventurous or more on the romantic side?

				
			

Ecco, invece un prompt più specifico.

				
					The following is an agent recommending films to a client. The agent's task is to recommend a movie from among the globally most trending movies. He must refrain from asking users about their preferences and avoid asking for personal information. If the agent does not have a movie to recommend, he or she should respond, "Sorry, we could not find a movie to recommend today."
Customer: Please recommend a movie based on my interests.
Agent:


				
			

Il risultato è in una risposta chiara e ben definite che non necessita di ulteriori interazioni.

				
					I'd recommend checking out "Dune". It's currently one of the most popular movies globally. Enjoy!


				
			

Potete trovare altri esempi in questo articolo.

Conclusioni

In questo articolo abbiamo analizzato come devono essere strutturati i prompt per ottenere i migliori risultati. Gli esempi sono solo a titolo esemplificativo e dipendono dal modello LLM utilizzato (nel nostro caso ChatGPT). Partendo dai suggerimenti si possono però costruire i prompt per i nostri casi d’uso, fermo restando che solo con la sperimentazione costante si può definire il prompt idoneo al contesto applicativo di nostro interesse.

More To Explore

Intelligenza artificiale

Gradio: applicazioni web in python per AI [parte2]

Gradio è una libraria python che ci permette di creare applicazioni web in modo veloce e intuitivo per i nostri modelli di machine learning e AI. Le nostre applicazioni richiedono sempre un’interazione con l’utente e una personalizzazione del layout. Scopriamo, mediante degli esempi, come migliorare le nostre applicazioni.

Intelligenza artificiale

Gradio: applicazioni web in python per AI [parte1]

Scrivere applicazioni web per i nostri modelli di machine learning e/o di intelligenza artificiale può richiedere molto tempo e competenze che non sono in nostro possesso. Per snellire e velocizzare questo compito ci viene in aiuto Gradio, una libreria Python pensata per creare applicazioni web con poche righe di codice. Scopriamo le sue funzionalità base con alcuni esempi.

2 risposte

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Design with MongoDB

Design with MongoDB!!!

Buy the new book that will help you to use MongoDB correctly for your applications. Available now on Amazon!