Recentemente una svolta nell'intelligenza artificiale (AI) ha portato all'introduzione di tecnologie di elaborazione del linguaggio che consentono di costruire sistemi AI, con una comprensione più ricca del linguaggio rispetto al passato. In particolare i Large Language Models (LLMs) estendono enormemente le capacità dei sistemi nell'elaborazione del testo. Questi modelli sono addestrati su grandi quantità di dati testuali, acquisendo così una conoscenza profonda della lingua e una comprensione semantica avanzata.
Il prompt rappresenta il mezzo attraverso cui gli individui interagiscono con i LLMs, fornendo indicazioni su cosa desiderano e come lo desiderano, solitamente attraverso l'utilizzo del linguaggio. In pratica è come se si volesse generare un'immagine senza avere disposizione un esempio/ispirazione concreta e quindi si procede come con un artista: si esplicita ciò che si sa, cercando di descrivere l'immagine attraverso le parole e qualche schizzo, se possibile. Nel caso del prompting, come mostra l’immagine qui sotto, un prompt guida il modello a generare un output adatto; quindi l’obiettivo diventa quello di selezionare tutte le informazioni utili da comunicare al LLM in modo che riesca a generare l’output desiderato.
https://docs.cohere.ai/docs/prompt-engineering
Eppure, nonostante le informazioni precise ed i prompt che sembrano perfetti, spesso ChatGPT (ma anche DALLE-2, MidJourney, etc) non performa. Perché? E’ il LLM che ha una capacità di comprensione limitata o è il prompt ad essere inefficace?
Il fatto è, che spesso, quando si scrive un prompt, lo si fa come se si interagisse con un altro essere umano e ci si dimentica che si sta creando un input, uno script su cui il LLM deve lavorare. L’università del Tennesse, in A Prompt Pattern Catalog to Enhance Prompt Engineering with ChatGPT , definisce un prompt come un insieme di istruzioni che personalizzano o perfezionano le capacità dell'LLM. Tali istruzioni forniscono regole e linee guida specifiche per una conversazione tra LLM e un insieme di regole iniziali. Quindi, in altre parole un prompt influenza le future interazioni con un LLM ed i risultati da esso generati. Un prompt stabilisce il contesto della conversazione e indica al LLM: 1) quali informazioni sono importanti e 2) quali sono la forma e il contenuto dell'output desiderato. Prompt engineering è il mezzo con cui i LLM vengono programmati attraverso i prompt.
Ad esempio un prompt potrebbe specificare che un LLM deve generare solo un codice che segue un certo stile di codifica o paradigma di programmazione. Allo stesso modo, potrebbe specificare che un LLM deve segnalare determinate parole o frasi chiave in un documento generato e fornire informazioni aggiuntive relative a tali parole chiave. Introducendo queste linee guida, i prompt facilitano la produzione di risultati più strutturati .
Si veda il seguente esempio:Prompt: “From now on, I would like you to ask me questions to deploy a Python application to AWS. When you have enough information to deploy the application, create a Python script to automate the deployment.”
Questo tipo di prompt per esempio fa sì che ChatGPT inizi a porre all'utente una serie di domande a cascata sulla sua applicazione software; ChatGPT continuerà ad interrogare l’utente fino a raggiungere un punto in cui dispone di informazioni sufficienti per generare uno script Python che automatizzi il deployment. Nel paper menzionato nei paragrafi precedenti, viene presentato per la prima volta nella storia, un framework per la documentazione e l’applicazione di un catalogo di prompt pattern per LLLMs (i.e., ChatGPT). I prompt che propongono sono analoghi a software patterns, ed hanno come scopo quello di essere soluzioni riutilizzabili per i problemi che gli user incontrano quando si interfacciano con LLMs nel vasto contesto di task che questi modelli performano.
Quindi quali principi e tecniche si dovrebbero seguire nella scrittura dei prompt?
Bisogna tenere a mente che un prompt guida il LLM verso la generazione dell’output.
L'efficacia del prompting dipende anche dalla qualità dei dati presente nel prompt stesso. Se i dati sono troppo limitati o poco rappresentativi del dominio di interesse, il modello potrebbe avere difficoltà a comprendere le indicazioni fornite dal prompt e a generare un output utile. Quindi per esempio se si vuole il riassunto di un articolo, il LLM deve avere abbastanza dati da elaborare per poterlo generare, e il prompt dovrà contenere il testo da riassumere oltre che il task specifico.
E’ sempre meglio provare diverse formulazioni dello stesso prompt per vedere quale delle formulazioni funziona meglio .
E’ buona prassi specificare al LLM il contesto di svolgimento della task.
Nel prompt possono anche essere inclusi esempi di ciò che si intende, in modo da far vedere al LLM che cosa si intende e cosa ci si aspetta come risultato.
Un aspetto importante da considerare quando si parla di prompting è il concetto di "diversità dei prompt". In sostanza, per evitare la generazione di output troppo simili o ripetitivi, è necessario utilizzare prompt diversi per ottenere risultati differenti. Questo è particolarmente importante quando si utilizzano LLMs per scopi creativi, come la generazione di testo poetico o narrativo. In questo caso, l'utilizzo di prompt diversi può aiutare a generare testi con stili, tematiche e toni differenti, creando una maggiore varietà di contenuti. Ad esempio, un prompt comune per un'opera d'arte potrebbe essere "Ritratto di una persona". Tuttavia, un prompt diverso potrebbe essere "Ritratto di una persona con un segreto oscuro" o "Ritratto di una persona vista attraverso i suoi occhi". Questi prompt più specifici possono fornire un'ispirazione unica che può portare a un'opera d'arte più originale e interessante.
In sintesi, per sfruttare a pieno la capacità generativa di LLMs come ChatGPT occorre padroneggiare il prompting, poiché quest’ultimo può influenzare le interazioni e gli output di un LLM, stabilendo il contesto della conversazione e indicando quali informazioni sono importanti e quali sono la forma e il contenuto dell'output desiderato. La progettazione di prompt efficaci e personalizzati è essenziale per ottenere risultati utili e strutturati e per finire, la documentazione e l'applicazione di un catalogo di prompt pattern per LLMs può aiutare gli utenti a creare prompt riutilizzabili e innovativi per una vasta gamma di task.