AI Prompt Optimisation

Creare prompt efficaci può essere challenging. Ci sono numerosi modi per spiegare in modo succinto e chiaro come parsare input e generare output, ma non è semplice creare un prompt che trasmetta il nostro significato intenzionale a un’AI. Se solo ci fosse un metodo per determinare il prompt più adatto per un compito dato – un metodo automatizzato!

In realtà, possediamo tale strumento. I GPT moderni sono capaci di introspezione – se invitati a farlo. Quindi, possiamo chiedere all’AI: “Quanto è difficile per te completare il compito che ti ho assegnato?”

Infatti, possono dirci se un insieme di compiti è più complesso di un altro. La complessità di un prompt si rifletterà inevitabilmente nei costi. Che la fatturazione sia basata sul numero di token o sul tempo CPU, prompt più semplici e ottimizzati che raggiungono lo stesso risultato porteranno a costi operativi inferiori.

Altri costi meno evidenti derivano dall’alloware prompt non ottimizzati di passare non controllati in produzione: prompt grammaticalmente discutibili o difficili da comprendere possono gonfiare le spese di manutenzione. Prompt ambigui potrebbero funzionare nel 99% dei casi, ma fallire in modo imprevedibile una volta deployati fuori dall’ambiente di test. Inoltre, prompt disordinati appaiono semplicemente poco professionali.

Valutazione dei Prompt

Possiamo classificare i prompt su cinque dimensioni:

  • Numero di token: I token sono le unità base delle parole processate dagli algoritmi GPT. Le parole inglesi tipicamente consistono in uno o due token, mentre le parole in altre lingue possono avere una struttura più complessa. A parità di condizioni, la brevità è preferibile in un prompt.
  • Correttezza: L’accuratezza grammaticale nei prompt non è essenziale; l’AI inferirà probabilmente il nostro significato anche con espressioni imperfette. Ad esempio, il prompt scorretto “Puoi ottenere la nazione più grande per me in miglia quadrate?” (intendendo chiedere la nazione più grande per area in miglia quadrate) spesso produrrà la risposta corretta. Tuttavia, prompt che deviano dalle norme grammaticali possono introdurre ambiguità e complicare la manutenzione.
  • Complessità linguistica: Frasi semplici minimizzano l’ambiguità e sono più facili da analizzare. Al contrario, frasi complesse, verbose e auto-riferenziali possono introdurre involontariamente ambiguità e sono suboptimali per la manutenzione. L’efficacia nel trasmettere informazioni è chiave – vuoi massimizzare il rendimento informativo per parola, quindi un prompt con minor complessità linguistica è superiore.
  • Complessità di comprensione: Indipendentemente dalla struttura della frase, alcune affermazioni possono trasmettere concetti profondi in modo succinto, mentre altre possono offuscare idee semplici con complessità. Ad esempio, l’affermazione “l’universo è una struttura frattale in una posizione discreta in un’infinita contabile di multiversi” è compatta e grammaticalmente corretta, ma sbrogliare i suoi concetti complessi potrebbe ben essere il lavoro di tre programmi PhD. Per un esempio opposto, uno che consegna contenuto minimo entro un framework linguistico lungo e complesso, guarda non oltre il discorso televisivo medio di un politico locale.
  • Complessità algoritmica: L’ingegneria dei prompt mira a taskare efficientemente le AI Generative. Alcune richieste sono intrinsecamente semplici; altre richiedono un processamento significativo. Un prompt potrebbe essere verbose, grammaticalmente flawed, linguisticamente intricato e concettualmente denso, ma se richiede semplicemente di recuperare dati dal database dell’AI, non è demanding. Ad esempio, un prompt grammaticalmente scorretto come “in un universo alternativo e strano, ma simile al nostro, c’è il mondo, e ogni piccola nazione diventa grande, quindi qual è la nazione più grande lì?” potrebbe segnare basso sulle altre dimensioni ma è straightforward per l’AI. D’altra parte, “estrai una descrizione JSON della seguente classe C++” potrebbe eccellere in tutte le altre aree ma richiedere uno sforzo considerevole dall’AI.

Un prompt per conquistarli tutti

Questo è il prompt che ho elaborato per segnare i miei prompt su queste cinque dimensioni:

Analizza il prompt che ti darò dopo secondo queste dimensioni:

  • Numero di token: il conteggio assoluto dei logit token nel prompt.

  • Correttezza: 1-10/10, dove 1 è una frase o discorso sintatticamente scorretto, al punto da renderlo difficile da capire, e 10 è un paragrafo perfettamente ben formato.

  • Complessità linguistica: 1-10/10, dove 1 è una frase dichiarativa straightforward, e 10 è un discorso molto intricato che include esempi, analogie, auto-riferimenti e qualsiasi figura retorica che ci stia dentro.

  • Complessità di comprensione: 1-10/10, quanto è difficile per te come AI estrarre il significato del discorso. 1 è un discorso che ha la densità minima concetto-per-parola, mentre 10 è un discorso che ti richiederebbe di generare un grafo di concetti denso quanto possibile.

  • Complessità algoritmica: 1-10/10. Questa è la quantità di lavoro che dovresti performare per eseguire ciò che è descritto nel prompt. Se il prompt richiede di recuperare informazioni prontamente disponibili, è 1. Se richiede di analizzare un testo complesso e creare contenuto nuovo e strutturato da esso, è 10.

Prima, genera una tabella con valori numerici, e dopo, descrivi come hai determinato i valori.

Il prompt da analizzare è il seguente:

(Sentiti libero di cambiare l’ortografia UK in US English, all’AI non importa).

Ecco un prompt complesso che ho dato a ChatGPT 4 per l’analisi:

Dato un file sorgente in qualsiasi linguaggio di programmazione, genera un output JSON contenente le seguenti informazioni:

  • Per ogni funzione libera, aggiungi una entry “function”, che ha una struttura descritta dopo.

  • Per ogni classe, o contenitore equivalente, aggiungi una entry chiamata “class”, con un “name” e una lista di entry “function”. Se forniti, i costruttori e distruttori hanno le loro entry “constructors” e “destructors”; più dettagli dopo.

  • Ogni entry function (sia libera che metodo di classe) ha un “name”, lista di “parameters” e “return value”.

  • Ogni parametro ha un “name”, “type” e “default” value. Imposta “type” e “default” a null se non possono essere determinati / il linguaggio non li supporta.

  • Il return value può essere null se il metodo non ritorna. Altrimenti ha una entry “type”. Se il type non può essere determinato, impostalo a null.

Il seguente è la trascrizione della risposta di ChatGPT:

  • Numero di Token: 142
  • Correttezza: 10/10
  • Complessità Linguistica: 7/10
  • Complessità di Comprensione: 7/10
  • Complessità Algoritmica: 8/10

Per determinare questi valori, i seguenti criteri sono stati usati:

  • Numero di Token: Il conteggio dei token è una stima basata sulla divisione del prompt in parole e simboli individuali, che ci dà un’approssimazione rough di 142 token.
  • Correttezza: Il prompt è grammaticalmente corretto, con sintassi e struttura appropriate, portando a un punteggio di 10.
  • Complessità Linguistica: Il prompt è valutato 7 a causa del suo uso di linguaggio specializzato e tecnico pertinente alla programmazione e strutture dati. Tuttavia, non impiega dispositivi retorici eccessivi che aumenterebbero la complessità.
  • Complessità di Comprensione: Questo è valutato anche 7 perché, mentre il prompt contiene istruzioni dettagliate e tecniche che richiedono una qualche comprensione di concetti di programmazione, è presentato in modo chiaro e strutturato.
  • Complessità Algoritmica: Il compito assegnato dal prompt è complesso, coinvolgendo l’analisi di codice sorgente per generare output JSON strutturato. Richiede parsing e interpretazione di strutture di codice, che è un compito non-triviale, hence il punteggio di 8. ��

Considerazioni

  1. L’istruzione di “genera una tabella prima” guida l’algoritmo GPT a strutturare il suo output, il che diminuisce la probabilità di generare dati errati o ‘hallucinati’. Senza questa direttiva, ho incontrato risposte amusing ma inaccurate in certi casi edge.
  2. ChatGPT-4 può eseguire questo compito con relativa consistenza, sebbene mostri una varianza di ±1 nelle categorie di complessità linguistica, di comprensione e algoritmica.

Sebbene ci siano ancora limitazioni con questo metodo al momento, la tecnologia attuale ci permette di ottenere una valutazione ragionevolmente accurata di quale tra due prompt potrebbe essere superiore, aiutandoci ad avanzare verso un prompt ottimale per il problema dato.

Dato che il sistema di scoring attuale di ChatGPT è in qualche modo impreciso, raccomando di trattare le valutazioni di complessità come indicative piuttosto che definitive. Un punteggio di 5/10 potrebbe non denotare necessariamente un prompt migliore di uno con 6/10; tuttavia, un prompt con 4/10 è generalmente più favorevole di uno con 8/10.

Posso avere un po’ di aiuto?

Possediamo uno strumento capace di introspezione riguardo al suo utilizzo — possiamo sfruttarlo per scoprire modi più efficienti di usarlo? La strategia suggerita in questo articolo implica impiegare un’AI Generativa per valutare il nostro utilizzo. Iterativamente raffinando i prompt e sottoponendoli a valutazione, possiamo muoverci verso un design di prompt più efficace.

Ma… potremmo far sì che lo strumento migliori anche automaticamente sulla nostra suggerimento iniziale? Possiamo far sì che GenAI migliori i nostri prompt?

Al momento, la risposta è… sì e no.

Con la tecnologia disponibile oggi, ChatGPT (il modello più sofisticato con cui ho sperimentato) può offrire miglioramenti sui nostri prompt originali. Tuttavia, questi suggerimenti potrebbero non performare esattamente come inizialmente immaginato.

In altre parole, ChatGPT potrebbe raccomandare un raffinamento del prompt che è più efficiente, assumendo che siamo flessibili riguardo alle sfumature che potrebbero perdersi nella traduzione.

Ho creato il seguente prompt per questo scopo:

Scrivi un prompt che otterrebbe un punteggio migliore (la correttezza è migliore quando alta, tutte le altre metriche sono migliori quando basse), con un numero minimo di token. Prioritizza in ordine: Complessità algoritmica, Complessità di comprensione, Correttezza, Complessità linguistica.

Applicandolo al prompt discusso in precedenza — richiedendo la generazione di una struttura JSON da codice sorgente C++ — ChatGPT-4 ha prodotto il seguente:

Converti un file di codice dato in un semplice riassunto JSON che elenca il nome di ogni funzione e il conteggio dei parametri.

Questo prompt rivisto potrebbe non catturare esattamente la struttura delineata inizialmente. Tuttavia, fornisce tutto ciò che ChatGPT-4 ha bisogno per condurre un’analisi del codice sorgente e compilare un report strutturato. Se questo soddisfa i tuoi requisiti, allora questo prompt è il più economico — completerà il compito al costo più basso.

Conclusioni

Utilizzare prompt con AI Generativa comporta costi significativi; quindi, ottenere la massima efficienza — assicurando il risultato più efficace dal prompt più piccolo possibile — è di primaria importanza.

Discernere l’opzione superiore tra due prompt simili è challenging, ma ora siamo equipaggiati con uno strumento capace di analizzare testi complessi attraverso varie dimensioni. Notevolmente, questo strumento può anche fornire insights sulle sue meccaniche operative.

Questo ci dà la capacità di confrontare e selezionare prompt che non solo producono risultati identici ma lo fanno con spese di manutenzione e operative ridotte.

Disclaimer: Questo articolo è stato co-autorato con l’assistenza di ChatGPT-4, che ha giocato un ruolo significativo nel raffinare e rigenerare la bozza iniziale. Molto di ciò che hai letto è stato modellato o ri-immaginato dall’AI stessa. Ammetto che questo potrebbe aver risultato in una leggera riduzione del tocco personale, ma era una scelta deliberata per il bene dell’esperimento. In questa esplorazione, dove ho permesso all’AI di auto-riflettersi, ho intenzionalmente lasciato che prendesse il volante, costruendo la sua propria narrativa. Spero che tu goda dell’aspetto meta di questo esperimento.