Prompt Expansion con OpenAI: potrebbe essere una nuova idea?

Ciao a tuttə e bentrovatə; dovete scusarmi per la mia lunga assenza ma, in questo periodo, sono stato oberato di impegni lavorativi.

Quest’oggi vorrei parlarvi di una mia personale riflessione sull’AI (e in particolare sui LLM): vorrei parlarvi della Prompt Expansion.

Prompt Expansion

Dovete sapere che, in questo periodo, sono particolarmente affascinato dagli Agent (in questo ambito è impossibile non citare Hugging Face e la sua apposita libreria, ad es.) e, così, mi sono chiesto se, con opportune tecniche, fosse possibile “espandere” il prompt per ottenere un migliore svolgimento di un task e la risposta è stata che, imho, è possibile.

Chiariamoci sin da subito: più avanti presenterò un repo GitHub con del codice ma il concetto non è tanto come lo sto facendo io ma lo stesso fatto di farlo (in quanto è sicuramente possibile pensare metodi alternativi di espansione del prompt).

Inoltre devo fare notare anche che, mentre prima pensavo ad una applicazione di questa classe di algoritmi esclusivamente in una fase iniziale, adesso li immagino utilizzati in vari momenti della funzionalità di un agent; devo anche dire che è emerso un concetto susseguente: la Prompt Optimization (di cui leggerete nel codice tra poco).

La mia ipotesi di lavoro iniziale è stata la scomposizione di un task in una serie di step sequenziali intermedi necessari; evidentemente il modo migliore per presentare una sequenza di un qualcosa è un elenco numerato (come ci insegna anche una visione semantica dell’HTML).

Siccome le API di OpenAI generano esclusivamente testo (ed io avevo bisogno di gestirmi l’input in altre funzioni) ho scelto di utilizzare il Markdown come formato di output; l’utilizzo del Markdown implica anche che sia semplicissimo tradurlo in codice HTML alla bisogna.

L’utilizzo del Markdown implica anche che possiamo utilizzare una comune RegEx (stavo per scrivere semplice ma, non me ne vogliate, non sono un fan delle espressioni regolari 😛 ) per la gestione dell’output da parte di GPT-4.

Ecco a voi il mio repo GitHub; siccome non mi va di essere ripetitivo nella scrittura vi consiglio di leggere il README.md presente nel repo prima di proseguire nella lettura di quest’articolo.

A latere ho pubblicato un post sul forum degli sviluppatori di OpenAI (di cui lascio il link se qualcuno volesse approfondire).

Aspetti SEO

L’idea dev’esser piaciuta anche al crawler di Google che, scansionando il web, mi piazza, per l’Italia, al secondo posto (evidentemente il mio repo colma una carenza di un qualche tipo).

serp di google che mostra il mio software in seconda posizione per la query "prompt expander" (ricerca da effettuarsi in modalità anonima)
SERP di Google (Ricerca da effettuarsi in modalità anonima).

E ChatGPT che ne pensa?

A questo punto, mi son chiesto cosa ne pensasse la stessa AI di una simile domanda e, così, sono andato a chiedere proprio a ChatGPT di parlarmi di un algoritmo per la prompt expansion; per l’esattezza il prompt è stato il seguente: “Parlami di un algoritmo per la prompt expansion.”.

Di seguito la risposta ottenuta dal chatbot:


Un algoritmo di prompt expansion è progettato per migliorare la qualità e la diversità delle risposte generate da un modello di linguaggio, come GPT-3.5, attraverso l’espansione dei prompt iniziali. Un “prompt” è una frase o una richiesta iniziale che guida il modello nella generazione di una risposta.

Ecco un possibile algoritmo di prompt expansion:

  1. Analisi del prompt iniziale: Inizia analizzando il prompt iniziale per identificare le parole chiave, le entità rilevanti e i concetti chiave. Questa analisi può coinvolgere il tagging part-of-speech, l’identificazione delle entità nominate (NER) e l’estrazione delle frasi.
  2. Espansione delle parole chiave: Utilizza sinonimi, sinonimi contestuali o altra tecnica di espansione lessicale per generare varianti delle parole chiave. Questo aiuta ad aumentare la diversità delle richieste presentate al modello.
  3. Creazione di varianti sintattiche: Modifica la struttura sintattica del prompt originale creando varianti grammaticali o stilistiche. Ad esempio, puoi invertire la struttura della frase, utilizzare forme passive o attive, o cambiare l’ordine delle parole.
  4. Inserimento di domande aggiuntive: Aggiungi domande correlate o complementari al prompt iniziale per stimolare ulteriormente il modello a generare risposte più complete e dettagliate.
  5. Integrazione di contesto storico: Introduci elementi di contesto storico o narrativo nel prompt per fornire al modello un quadro più ampio e aiutarlo a generare risposte più coerenti e pertinenti.
  6. Ponderazione delle varianti: Assegna un peso o una probabilità a ciascuna variante espansa in base alla rilevanza e all’importanza per la generazione della risposta desiderata.
  7. Fornitura al modello: Presenta al modello tutte le varianti espandibili del prompt, bilanciando la diversità e la pertinenza per ottenere una risposta più ricca e accurata.
  8. Raccolta delle risposte: Raccolgi le risposte generate dal modello in risposta a ciascuna variante espansa e valutale per determinare la migliore e più adatta risposta per la tua specifica esigenza.

Questo processo di espansione del prompt mira a fornire al modello di linguaggio una gamma più ampia di input, incoraggiandolo a generare risposte più variegate e contestualmente appropriate.


Come si vede dalla risposta sembrerebbe quasi che il modello trovi naturale parlarmi di questa tecnica (e devo ammettere che trovo la qual cosa leggermente inquietante).

Conclusioni

Adesso, che ho messo sin troppa carne al fuoco, sono costretto a fermarmi ma vi invito a fare 2 cose:

  • Chiedere da voi stessi della Prompt Expansion a ChatGPT
  • Provare l’utilizzo del Markdown nelle varie fasi di lavorazione di un Agent ricordando sempre i significati semantici dell’HTML (e quindi anche del Markdown) che possono “arricchire” di significato l’output del LLM.

Ovviamente per qualsiasi dubbio o chiarimento resto a vostra completa disposizione e vi invito a commentare qui sotto e/o a contattarmi: per me è sempre un piacere confrontarmi 🙂


Commenti

Lascia un commento

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

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.