Ingegneria pratica del prompt per LLM più piccoli

Maud Nalpas
Maud Nalpas

L'efficacia di un modello linguistico di grandi dimensioni si basa in larga misura sulle istruzioni che gli forniamo. Il Prompt engineering è il processo di creazione di domande in modo da ottenere il miglior output da un LLM. Si tratta di un passaggio cruciale per l'implementazione di una funzionalità basata su LLM.

Il prompt engineering è un processo iterativo. Se hai sperimentato diversi LLM, avrai probabilmente notato che era necessario modificare il prompt per ottenere un risultato migliore.

Questo vale anche per i modelli di dimensioni diverse.

Le interfacce di chat basate su LLM di grandi dimensioni, come Gemini o ChatGPT, spesso possono produrre risultati soddisfacenti con uno sforzo minimo per i prompt. Tuttavia, quando lavori con un LLM predefinito e più piccolo che non è ottimizzato, devi adattare il tuo approccio.

Gli LLM più piccoli sono meno potenti e hanno un pool di informazioni più piccolo da cui attingere.

Cosa intendiamo con "LLM più piccoli"?

La definizione di dimensioni LLM è complicata e non sempre viene resa nota dai responsabili.

In questo documento, per "LLM più piccoli" si intende qualsiasi modello con meno di 30 miliardi di parametri. A oggi, i modelli con alcuni milioni o alcuni miliardi di parametri possono essere eseguiti in modo realistico nel browser su dispositivi di livello consumer.

Dove vengono utilizzati gli LLM più piccoli?

  • IA generativa su dispositivo/nel browser, ad esempio se utilizzi Gemma 2B con l'API LLM Inference di MediaPipe (adatta anche per dispositivi solo CPU) o DistilBert nel browser con Transformers.js. Il download di un modello e l'esecuzione dell'inferenza sul dispositivo di un utente è possibile solo con questi LLM più piccoli, al fine di mantenere ragionevoli i download sul web e soddisfare i vincoli di memoria e GPU/CPU di un dispositivo.
  • IA generativa lato server personalizzata. Modelli a peso aperto di piccole dimensioni come Gemma 2B, Gemma 7B o Gemma 27B possono essere eseguiti sul tuo server (e facoltativamente perfezionati).

Inizia

Le interfacce di chat basate su LLM di grandi dimensioni, come Gemini o ChatGPT, spesso possono produrre risultati soddisfacenti con uno sforzo minimo per i prompt. Tuttavia, quando si lavora con LLM più piccoli, è necessario adattare l'approccio. Gli LLM più piccoli sono meno potenti e hanno un pool di informazioni più piccolo da cui attingere.

Fornisci contesto e istruzioni precise sul formato

Per ottenere risultati ottimali con LLM di piccole dimensioni, crea prompt più dettagliati e specifici.

Ad esempio:

Based on a user review, provide a product rating as an integer between 1 and 5. \n
Only output the integer.

Review: "${review}"
Rating:
Input (revisione) Output (valutazione)
  LLM più grande (Gemini 1.5) LLM più piccolo (Gemma 2B)
Adoro la vestibilità! Distribuisce il peso bene e straordinariamente comodo anche durante le camminate durante l'intera giornata. Lo consiglierei. 5 4 stelle su 5**
Le cinghie sono debole e hanno iniziato a affondarmi nelle spalle sotto carichi pesanti. 1 2/5

Mentre Gemini 1.5 fornisce l'output desiderato con questo semplice prompt, l'output di Gemma non è soddisfacente:

  • Il formato non è corretto. Abbiamo richiesto un numero intero per la valutazione.
  • La valutazione non sembra abbastanza precisa. La prima recensione è abbastanza entusiasta da indicare una recensione da 5 stelle.

Per risolvere questo problema, dobbiamo utilizzare tecniche di prompt engineering, Prompt one-, few-shot e multi-shot e chain-of-thought prompting. Dobbiamo inoltre fornire istruzioni chiare per il formato e insistere che il modello utilizzi l'intera gamma di valutazioni.

Ad esempio:

`Analyze a product review, and then based on your analysis give me the
corresponding rating (integer). The rating should be an integer between 1 and
5. 1 is the worst rating, and 5 is the best rating. A strongly dissatisfied
review that only mentions issues should have a rating of 1 (worst). A strongly
satisfied review that only mentions positives and upsides should have a rating
of 5 (best). Be opinionated. Use the full range of possible ratings (1 to
5). \n\n
    \n\n
    Here are some examples of reviews and their corresponding analyses and
    ratings:
    \n\n
    Review: 'Stylish and functional. Not sure how it'll handle rugged outdoor
    use, but it's perfect for urban exploring.'
    Analysis: The reviewer appreciates the product's style and basic
    functionality. They express some uncertainty about its ruggedness but
    overall find it suitable for their intended use, resulting in a positive,
    but not top-tier rating.
    Rating (integer): 4
    \n\n
    Review: 'It's a solid backpack at a decent price. Does the job, but nothing
    particularly amazing about it.'
    Analysis: This reflects an average opinion. The backpack is functional and
    fulfills its essential purpose. However, the reviewer finds it unremarkable
    and lacking any standout features deserving of higher praise.
    Rating (integer): 3
    \n\n
    Review: 'The waist belt broke on my first trip! Customer service was unresponsive too. Would not recommend.'
    Analysis: A serious product defect and poor customer service experience naturally warrants the lowest possible rating. The reviewer is extremely unsatisfied with both the product and the company.
    Rating (integer): 1
    \n\n
    Review: 'Love how many pockets and compartments it has. Keeps everything organized on long trips. Durable too!'
    Analysis: The enthusiastic review highlights specific features the user loves (organization and durability), indicating great satisfaction with the product. This justifies the highest rating.
    Rating (integer): 5
    \n\n
    Review: 'The straps are a bit flimsy, and they started digging into my shoulders under heavy loads.'
    Analysis: While not a totally negative review, a significant comfort issue leads the reviewer to rate the product poorly. The straps are a key component of a backpack, and their failure to perform well under load is a major flaw.
    Rating (integer): 1
    \n\n
    Now, here is the review you need to assess:
    \n
    Review: "${review}" \n`;
Input (revisione) Output con un LLM più piccolo (Gemma 2B)

Adoro la vestibilità! Distribuisce bene il peso e, sorprendentemente, comodo anche durante le escursioni di tutta la giornata. Lo consiglierei.

Analisi: questa recensione è molto positiva ed evidenzia la vestibilità e il comfort del prodotto, indicando una grande soddisfazione nei confronti del prodotto. Questo giustifica una valutazione elevata.

Valutazione (numero intero): 5

Le cinghie sono debole e hanno iniziato a affondarmi nelle spalle sotto carichi pesanti.

**Analisi:** la recensione evidenzia un problema significativo di comfort delle cinghie. Suggerisce inoltre che il prodotto potrebbe non essere adatto a carichi pesanti o gite prolungate.

**Valutazione:** 1 (peggiore)

Il nostro prompt più elaborato, combinato con prompt few-shot e tecniche di Chain-of-Thought Prompting, fornisce valutazioni più accurate.

È prevista l'analisi manuale dell'output

Sebbene sia sempre necessario pulire e interpretare manualmente l'output di un LLM, questo è particolarmente vero per gli LLM più piccoli, che potrebbero produrre risultati meno precisi e potrebbero richiedere prompt di catena di pensiero.

Nel primo esempio abbiamo usato prompt di catena di pensiero, quindi l'output includeva sia un'analisi che una valutazione e dobbiamo analizzare manualmente la valutazione. Nota inoltre la formattazione incoerente nell'output della sezione precedente: il modello a volte restituisce markdown, ma non ogni volta.

// Use try/catch to catch (parsing) errors
try {
  // Parse the output for a rating
  const int = /[1-5]/;
  const ratingAsString = llmOutput.match(int)[0];
  // Parse as int
  const ratingAsInt = parseInt(ratingAsString);
  // `checkRating` checks the rating is a number between 1 and 5, since the
  // regEx may catch a number like "100"
  const finalRating = checkRating(ratingAsInt);
} catch (e) {
  console.error('Error', e);
}

Differenze tra API Mind

Le API cloud LLM come Gemini API o OpenAI, che in genere sono il punto di ingresso di LLM più grandi, offrono pratiche funzionalità di prompt. Ad esempio, Gemini 1.5 Pro offre istruzioni di sistema e la modalità JSON.

Al momento, queste funzionalità non sono sempre disponibili per l'utilizzo dei modelli personalizzati o per gli LLM più piccoli accessibili utilizzando API IA nel browser, ad esempio l'API MediaPipe LLM Inference o Transformers.js. Sebbene questa non sia necessariamente una limitazione tecnica, le API IA integrate nel browser tendono a essere più snelle.

Limiti di Mind token

Poiché la richiesta per gli LLM più piccoli deve includere esempi o istruzioni più dettagliate, probabilmente sarà più lungo e utilizzerà più del limite di token di input, se presente.

Inoltre, i modelli più piccoli tendono ad avere un limite di token di input più piccolo. Ad esempio, Gemini 1.5 Pro ha un limite di token di input di 1 milione, mentre i modelli Gemma hanno una finestra di contesto 8K.

Utilizza le funzioni di conteggio dei token per evitare di raggiungere il limite.

Adatta le stime dei tempi

Tieni conto della progettazione e dei test dei prompt nelle stime dei tempi di progettazione.

A causa delle differenze delle API e dei limiti di token, probabilmente avrai bisogno di più tempo e impegno per creare il tuo prompt per un LLM più piccolo rispetto a uno più grande. Anche testare e convalidare l'output dell'LLM può richiedere uno sforzo maggiore.

Ingegnere del prompt o ottimizzazione?

Per gli sviluppatori web, il prompt engineering è il modo preferito di sfruttare l'IA generativa anziché l'addestramento e l'ottimizzazione personalizzati. Tuttavia, anche il prompt engineering avanzato potrebbe non essere sufficiente in alcuni casi d'uso, soprattutto se si utilizza un LLM più piccolo.

Usa l'ottimizzazione quando:

  • Hai bisogno di accuratezza e prestazioni di primissimo livello per un'attività specifica. L'ottimizzazione regola direttamente i parametri interni del modello per ottenere risultati ottimali.
  • Disponi di dati ben curati, pertinenti all'attività e già etichettati con gli output preferiti. Questi dati sono necessari per una messa a punto efficace.
  • Devi usare il modello per lo stesso scopo più volte. L'ottimizzazione può essere eseguita una volta e riutilizzata per un'attività specifica.