Invito alla lettura di Gilbert Mizrahi, Unlocking the Secrets of Prompt Engineering: Master the art of creative language generation to accelerate your journey from novice to pro, Packt Publishing, 2024
Il prompt è una frase o un testo utilizzati per innescare una risposta da parte di un’intelligenza artificiale o di un sistema di elaborazione del linguaggio naturale. È un input che guida la generazione di contenuti o la risposta a una domanda da parte del modello. Il prompt può essere una domanda, una richiesta di elaborazione di informazioni o qualsiasi altra indicazione che l’AI utilizza per produrre una risposta.
Una delle caratteristiche dei modelli linguistici avanzati è che ci permettono di far svolgere compiti ad agenti digitali semplicemente spiegandoglieli in linguaggio naturale… a patto che usiamo la lingua in modo comprensibile per il modello, cioè tendenzialmente in modo contestuale, logico e preciso, come se fosse un tool di sviluppo.
Il libro che Gilbert Mizrahi dedica al Prompt Engineering è una lettura interessante sia per le persone che interagiscono con i modelli linguistici attraverso le interfacce consumer (es. ChatGPT), sia per gli sviluppatori che ingegnerizzano i prompt in applicazioni (come chatbot / assistenti virtuali) che si collegano ai modelli via API (Application Programming Interface) o mediante tool di automazione conversazionale.
Capire meglio i principi del Prompt Engineering ci aiuta a essere più consapevoli della nuova centralità del linguaggio e ad ottenere dai modelli linguistici risposte il più possibili rilevanti e accurate.
Gilbert Mizrahi ci guida anzitutto alla scoperta dei componenti principali di un prompt:
- Descrizione del compito: serve per dare al Large Language Model (LLM) istruzioni di alto livello sul tipo di compito da svolgere e su come svolgerlo. Per mitigare il rischio di allucinazioni (cioè di risposte plausibili, ma non basate su fatti o dati reali e corretti), Mizrahi raccomanda di non assegnare compiti aperti o ambigui all’agente digitale e di verificare la correttezza delle premesse che specifichiamo al modello. È infatti più probabile che una premessa non corretta porti a una risposta errata che non alla sua confutazione da parte del LLM
- Contesto: serve per fornire al modello linguistico tutte le informazioni di background utili a indirizzare la sua risposta, comprese eventuali disambiguazioni
- Ruolo: indicare al LLM il ruolo da impersonificare (es. esperto di SEO) lo mette nelle condizioni di assumere il punto di vista migliore per dare risposte in linea con le nostre aspettative
- Vincoli: laddove necessario, indichiamo con precisione al modello vincoli da rispettare per es. in termini di formato di output, articolazione della risposta (es. specificando al LLM di esporre step-by-step il suo ragionamento per renderlo trasparente e verificabile da parte nostra) e lunghezza della risposta. Mizrahi suggerisce di invitare il modello linguistico a essere conciso per mitigare sia la sua tendenza alla verbosità, sia il rischio di allucinazioni che in determinate condizioni può aumentare all’aumentare della lunghezza della risposta
- Esempio/i: quando, anche in base a prove preliminari, constatiamo che il LLM non è padrone del dominio su cui vorremmo interagire con esso o del compito che intendiamo affidargli, vi sono varie tecniche, dettagliate da Mizrahi, per aiutare il modello a espandere e/o a specializzare le sue conoscenze e competenze, riducendo il rischio di allucinazioni. Zero-shot prompting, Active o Few-shot learning, Transfer learning e Fine-tuning sono tecniche differenti per complessità e profondità di azione, ma accomunate dal principio di istruire il LLM fornendogli esempi. Gli esempi possono essere le nostre knowledge base di saperi verticali oppure modelli comportamentali da seguire nello svolgimento di un compito. Fornire esempi è opportuno anche quando chiediamo al modello di seguire uno stile, un tono, un punto di vista (1a, 2a o 3a persona), un vocabolario o una sintassi particolari nella generazione delle sue risposte
- Placeholder token: quando abbiamo la necessità di far generare al LLM più testi simili per struttura, ma differenti per alcuni dati di input, possiamo usare i segnaposto per indicare al modello la presenza di variabili. Dopo la prima risposta sarà in genere sufficiente specificare il nuovo set di valori dei placeholder per ottenere una risposta variantata
- Input data: si tratta del testo vero e proprio che noi inviamo al LLM e che esso utilizza per generare la risposta.
Utilizzando per es. uno dei modelli di GPT non via interfaccia utente (ChatGPT), ma attraverso le API della piattaforma di OpenAI, abbiamo altri parametri per controllare l’output. Ecco i principali:
- Modello: il modello (es. GPT-3, GPT-4) va scelto in base alle capacità di cui abbiamo bisogno
- Temperatura: controlla la casualità dell’output. Un valore di temperatura più alto (ad esempio 0.8) rende l’output più creativo e variegato, mentre un valore più basso (ad esempio 0.2) rende l’output più deterministico e focalizzato, riducendo anche il rischio di allucinazioni
- Top-p (Nucleus Sampling): controlla la probabilità cumulativa del modello. Un valore di Top-p di 0.9 considera solo i token con una probabilità cumulativa fino al 90%, garantendo che il modello scelga solo tra i token più probabili
- Numero di risposte: specifica quante risposte diverse vogliamo ottenere da un unico prompt
- Numero massimo di token per risposta: limita il numero di token (parole o parti di parole) nella risposta del modello. Nelle lingue anglosassoni 1 token corrisponde a ca. 0,75 parole
- Top-k: il valore limita il modello a scegliere tra i primi k token più probabili. Ad esempio, un top-k di 50 indica al modello di scegliere solo tra i 50 token più probabili. Abbassare il valore del parametro Top-k rende l’output più deterministico e focalizzato, riducendo anche il rischio di allucinazioni
- Repetition Penalty: penalizza il modello per l’uso ripetuto delle stesse frasi o parole, incoraggiandolo a produrre risposte più variegate
- Length Penalty: influisce sulla lunghezza delle risposte del modello, rendendolo più propenso a risposte brevi o lunghe a seconda del valore
- Presence Penalty: penalizza la presenza di determinati token nell’output, rendendo il modello meno incline a utilizzare token già presenti nell’output corrente
- Frequency Penalty: penalizza token in base alla loro frequenza nell’output, riducendo la probabilità che vengano ripetuti.
Gilbert Mizrahi fornisce una panoramica sulle modalità di accesso ai LLM più comuni.
Oltre alle interfacce utente (es. ChatGPT) e ai connettori per i più comuni strumenti di produttività personale (es. quelli degli Apps Script per Google Sheets), vi sono le API che permettono agli sviluppatori per es. di basare chatbot su un LLM (es. uno dei GPT di OpenAI). L’autore sottolinea i vantaggi dell’uso delle API: l’integrazione con nostre knowledge base; l’inserimento dell’applicazione nel nostro sito o nella app aziendale; il supporto dell’autenticazione degli utenti; la possibilità di supportare non solo compiti informativi, ma anche transazionali (automazione di flussi).
Tuttavia, se il nostro obiettivo è realizzare un’applicazione conversazionale che supporta l’automazione di un workflow, Mizrahi suggerisce di valutare l’impiego di un Conversational Automation Tool, come per esempio LangChain. Nell’esempio riportato dall’autore, usando LangChain potremmo realizzare un’applicazione in grado di gestire il completo ciclo dell’ordine in modo conversazionale, utilizzando il LLM per elaborare le richieste dell’utente espresse in linguaggio naturale (es. di individuare un prodotto con date caratteristiche; di verificarne il prezzo, anche personalizzato; di ordinare N pezzi; di tracciare l’ordine e la spedizione, ecc.), eseguendo ricerche in varie fonti dati (es. PIM, CRM, PIM, ecc.) e passando i dati “grezzi” al modello linguistico perché li confezioni in linguaggio naturale, rispondendo infine all’utente.
LangChain è una libreria open source progettata per aiutare gli sviluppatori a creare applicazioni che integrano LLM in modo più efficace e strutturato. La libreria fornisce strumenti per gestire in modo modulare e scalabile flussi di lavoro complessi basati sull’elaborazione del linguaggio naturale, permettendo di:
- Gestire catene di chiamate a modelli di linguaggio: per creare sequenze di operazioni che coinvolgono più chiamate ai LLM (uno o più di uno, se è necessario ricorrere a più modelli in base a capacità e specializzazioni), concatenando le loro risposte in un flusso logico
- Integrare modelli con fonti dati esterne: per collegare i modelli a basi di conoscenza, database o API esterne, migliorando le capacità di rispondere a domande o eseguire compiti specifici
- Costruire agenti autonomi: per realizzare agenti che possono eseguire compiti in modo autonomo, prendendo decisioni basate sulle risposte degli utenti/ modelli e interagendo con altri sistemi
- Personalizzare la gestione della memoria: per memorizzare e richiamare informazioni durante l’esecuzione del flusso, permettendo ai modelli di “ricordare” conversazioni e contesti precedenti.
Mentre LangChain è una libreria riservata agli sviluppatori, LangFlow e Flowise sono applicazioni di automazione conversazionale no-code, che permettono anche a chi non è uno sviluppatore di fare un po’ di sperimentazione.
LangSmith, che completa gli strumenti associati a LangChain, è un tool focalizzato su monitoraggio e ottimizzazione dei flussi di lavoro creati con LangChain.
Il libro di Gilbert Mizrahi è ricco di esempi sull’uso dei LLM e della AI in vari ambiti professionali, sempre accompagnati dalla raccomandazione a verificare, raffinare in modo iterativo e rielaborare manualmente le risposte ottenute dal modello.
Particolarmente interessante l’esempio dell’utilizzo di varie abilità del LLM per realizzare e promuovere le puntate di un podcast, cioè come supporto al lavoro redazionale.
L’autore, esemplificando in modo puntuale i prompt (il primo e i successivi di raffinamento), ci invita a chiedere al modello di contribuire con idee relative a temi e ospiti per le puntate del podcast e/o con idee per quesiti rilevanti da porre all’ospite della puntata. Per poter rispondere in modo efficace, il LLM deve ricevere da noi il necessario background sul dominio e/o sulla biografia professionale dell’ospite, ecc.
Una volta realizzata l’intervista, l’autore ci invita a usare per es. uno dei plugin Speech-to-Text disponibili sullo store di ChatGPT. Il plugin esegue il transcript della puntata.
Grazie alle capacità linguistiche del modello e a prompt precisi, l’autore ci invita a far eseguire al modello diversi compiti di repurposing sul transcript. Per esempio:
- Riassumere l’intervista allo scopo di promuovere presso un determinato pubblico l’ascolto della puntata
- Estrarre un dato numero di citazioni rilevanti per promuovere sui social media l’ascolto della puntata
- Estrarre gli highlights e, su questa base, generare script finalizzati a realizzare video shortform per YouTube, Instagram e/o TikTok per coinvolgere un pubblico diverso da quello tipico. Piattaforme AI come Synthesis e DeepBrain permettono di generare automaticamente video a partire dagli script prodotti dal LLM
- Trasformare il transcript in un post per il blog, trattando in modo discorsivo temi e idee dell’intervista.
Chi lavora in ambito redazionale può sfruttare i LLM anche per svolgere attività di analisi testuale, per es. sentiment analysis, categorizzazione di testi e/o classificazione di dati, pulizia di dati/contenuti in base a istruzioni precise su che cosa fare e come farlo, allenare il modello a riconoscere pattern all’interno di documenti per estrarre da contenuti non strutturati dati strutturati.
Gilbert Mizrahi offre molti altri esempi tratti da ambiti diversi, ma soprattutto ci dà indicazioni preziose per sperimentare e sviluppare al meglio i nostri progetti.
Il capitolo finale è dedicato ai temi a cavallo fra etica e innovazione: dai pregiudizi che si annidano nei dati all’opacità della AI, da iniziative (come Explainable AI – XAI) che mirano a rendere più interpretabile e trasparente l’intelligenza artificiale alla costruzione di nuove relazioni di fiducia, dalla responsabilità dei sistemi basati sull’intelligenza artificiale agli impatti su società e ambiente.