Torna al blog

AI per principiantiGuida

Few-shot prompting: mostra al modello 3–5 esempi per ottenere il tuo formato

Come 3–5 esempi con tag fanno rispondere un modello con le tue etichette o JSON, con una richiesta Python e il costo extra di input per richiesta.

Di CheapTokens TeamPubblicato il 6 min di lettura

Copertina: un prompt few-shot con un ticket di esempio e la sua etichetta
In questa pagina
  1. Cosa significa "few-shot"
  2. Tre regole per esempi che funzionano
  3. Inviarlo tramite l'API
  4. Quanto aggiungono cinque esempi alla fattura
  5. JSON, tono e verifica dei tuoi esempi

Il tuo bot per i ticket dovrebbe rispondere con una sola parola: billing, bug o other. La maggior parte delle risposte è esattamente così. Poi ne arriva una come "Label: billing — the customer seems upset about a refund", e il codice che legge l'etichetta si blocca.

La soluzione abituale non è un'istruzione più lunga. Sono alcuni esempi: inserisci 3–5 ticket completati con le loro etichette nel prompt, e il modello copia il pattern. Questo è il few-shot prompting. La guida al prompting di Anthropic (sezione "Use examples effectively", consultata il 3 novembre 2026) definisce gli esempi uno dei modi più affidabili per guidare formato, tono e struttura, e ne raccomanda 3–5. Il problema: ogni esempio è input che paghi di nuovo a ogni richiesta. La sezione sui costi qui sotto lo calcola per un bot che gestisce 2.000 ticket al giorno.

Cosa significa "few-shot"#

Immagina un nuovo collega al suo primo giorno al supporto. Gli dici "etichetta ogni ticket come billing, bug o other" e te ne vai. Alcune etichette corrisponderanno alla tua idea, altre no. Ora lascia tre ticket già etichettati e digli "come questi". Stesso collega, molte meno sorprese.

I modelli si comportano allo stesso modo. La sola istruzione si chiama zero-shot. Istruzione più diversi esempi svolti è few-shot (la pagina di Anthropic dice anche multishot). Uno "shot" è semplicemente un esempio.

Confronta

Stesso compito, due prompt

Solo istruzione

text
Label the support ticket as billing, bug or other.

Istruzione più esempi

text
Label the support ticket with one word: billing, bug or other.

Ticket: I was charged twice for one top-up.
Label: billing

Ticket: The export button does nothing.
Label: bug

Ticket: Do you have a dark theme?
Label: other

Il secondo prompt non spiega mai cosa significhi billing. Gli esempi lo fanno mostrando, e portano con sé il formato insieme al significato. Una riga esplicita di istruzione non guasta comunque, quindi la versione qui sotto la mantiene.

Tre regole per esempi che funzionano#

La pagina di Anthropic riduce i buoni esempi a tre parole:

  • Rilevanti: vicini ai ticket che ricevi davvero, non a qualche altro compito.
  • Diversi: coprono i casi limite e differiscono tra loro, così il modello non si aggrappa a un pattern accidentale.
  • Strutturati: racchiusi in tag (<example>, e diversi dentro <examples>) così il modello distingue gli esempi dalle istruzioni. La stessa pagina dice di mantenere coerenti i nomi dei tag.

Ecco un prompt completo costruito così. Salvalo come prompt.txt:

text
<instructions>
Label the support ticket with exactly one word: billing, bug or other.
Reply with the label only.
</instructions>

<examples>
<example>
<ticket>I was charged twice for the same top-up.</ticket>
<label>billing</label>
</example>
<example>
<ticket>The export button does nothing when I click it.</ticket>
<label>bug</label>
</example>
<example>
<ticket>Do you have a dark theme?</ticket>
<label>other</label>
</example>
<example>
<ticket>Please refund me. Also, the page crashes on login.</ticket>
<label>billing</label>
</example>
<example>
<ticket>Is there an API for exporting reports?</ticket>
<label>other</label>
</example>
</examples>

Guarda il quarto esempio: una richiesta di rimborso che menziona anche un crash. Un'istruzione non può risolvere un ticket misto, un esempio sì. Qui vince il denaro, quindi l'etichetta è billing. Qualunque regola scegli, mostrala una volta.

Abbina le coppie

Quale regola è violata?

  • I tuoi esempi sono saluti di chat di una riga, ma i ticket reali sono email lungheNon rilevanti: gli esempi devono essere vicini al compito reale
  • Tutti i tuoi esempi portano la stessa etichettaNon diversi: il modello può cogliere un pattern accidentale
  • Gli esempi sono incollati come testo libero tra le istruzioniNon strutturati: racchiudili in tag così non possono essere scambiati per istruzioni

Inviarlo tramite l'API#

Il prompt è lo stesso testo in ogni richiesta, e cambia solo il nuovo ticket. Ogni ticket fa lo stesso breve viaggio:

Istruzione, esempi e il nuovo ticket finiscono in un'unica richiesta; torna un'etichetta
Una richiesta per ticket: istruzioni ed esempi restano, il ticket cambia

Ecco il codice in Python con il pacchetto openai. L'indirizzo è l'API di CheapTokens, la chiave sta in una variabile d'ambiente (vedi come memorizzare una chiave in modo sicuro), e l'id del modello è quello completo dalla documentazione:

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

PROMPT = open("prompt.txt", encoding="utf-8").read()


def label(ticket: str) -> str:
    response = client.chat.completions.create(
        model="deepseek-ai/DeepSeek-V4-Flash-0731",
        max_tokens=64,
        messages=[
            {"role": "system", "content": PROMPT},
            {"role": "user", "content": f"<ticket>{ticket}</ticket>"},
        ],
    )
    print(response.usage.prompt_tokens, response.usage.completion_tokens)
    return response.choices[0].message.content.strip()


print(label("The app shows a blank screen after the update."))

Quando funziona vedi due conteggi di token su una riga e poi l'etichetta stessa, una parola come bug. Se ottieni una frase, gli esempi non stanno ancora facendo il loro lavoro: controlla i tag e che ogni etichetta del tuo schema compaia almeno una volta.

Il primo numero è quello da tenere d'occhio. È l'intero prompt, istruzioni più esempi più il ticket, e cresce con ogni esempio che aggiungi. Esegui lo script una volta con il prompt.txt completo e una volta con la sola parte <instructions>: la differenza tra i due primi numeri è quanto ti costano gli esempi per richiesta.

DeepSeek-V4-Flash è adatto a questo tipo di etichettatura di massa: un prezzo a qualsiasi ora del giorno, una finestra di contesto di 380K token (così un lungo blocco di esempi entra facilmente) e fino a 32.768 token per risposta. GLM-5.3-Flash, con un contesto di 390K, va bene anch'esso per compiti brevi di etichettatura. Entrambi sono sulla pagina dei modelli, dietro un unico saldo.

Quanto aggiungono cinque esempi alla fattura#

Diciamo che il bot gestisca 2.000 ticket al giorno. Supponi che un ticket sia circa 120 token e l'istruzione circa 80, quindi una richiesta senza esempi è 80 + 120 = 200 token di input. Cinque esempi da circa 60 token ciascuno aggiungono 5 × 60 = 300, quindi una richiesta con essi è 200 + 300 = 500. La risposta è una parola, chiamala 3 token di output in entrambi i casi. Queste sono ipotesi: sostituisci con i prompt_tokens che ha stampato il tuo script.

Nell'arco di un giorno, 200 × 2.000 = 400.000 token di input diventano 500 × 2.000 = 1.000.000, mentre l'output resta a 3 × 2.000 = 6.000 token. Su DeepSeek-V4-Flash sono $0.0066 al giorno senza esempi e $0.0156 con essi. Gli esempi ti costano la differenza tra questi due numeri, e secondo Anthropic ti danno un output più coerente.

Uguale in ogni richiesta: istruzioni e cinque esempi. Nuovo ogni volta: il ticket
Tra le richieste cambia solo il ticket

Quell'immagine nasconde un dettaglio utile. Il blocco degli esempi è identico in ogni richiesta, che è esattamente il tipo di inizio ripetuto di cui si occupa il prompt caching; cos'è il prompt caching spiega come funziona.

Ecco lo stesso carico, 500 token di input e 3 di output per richiesta, 2.000 richieste, tra i modelli. La tabella si ricalcola dai prezzi attuali:

Modello Per richiesta 2000 richieste OpenRouter, 2000 richieste
GLM-5.3-Flash $0.00001 $0.0202 $0.034
DeepSeek-V4-Flash $0.0000078 $0.0156 $0.0708
MiniMax-M2.7 $0.000025 $0.0509 $0.611

500 token di input e 3 token di output per richiesta. I prezzi per 1M di token sono attuali e cambiano insieme alle nostre tariffe; la colonna OpenRouter mostra i prezzi di riferimento per lo stesso carico di lavoro.

Contando insieme input e output, DeepSeek-V4-Flash e GLM-5.3-Flash risultano più economici di OpenRouter con questo carico. L'elenco completo dei prezzi è sulla pagina dei prezzi.

JSON, tono e verifica dei tuoi esempi#

Lo stesso trucco copre gli altri due casi che incontrerai. Ti servono gli stessi campi JSON ogni volta? Fai in modo che l'esempio sia la risposta JSON stessa:

text
<example>
<ticket>I was charged twice for the same top-up.</ticket>
<output>{"label": "billing", "urgent": true}</output>
</example>

Per response_format e cosa fare quando una risposta non è ancora valida, vedi ottenere JSON valido da un'API LLM. Vuoi un testo riscritto con un certo tono? Aggettivi come "amichevole ma breve" sono vaghi; due coppie prima-e-dopo lo mostrano meglio.

Prima di fidarti di qualsiasi insieme di esempi, prendi 20 ticket che hai già etichettato a mano, eseguili e confronta. Un solo passaggio ti dice più di qualsiasi regola. La pagina di Anthropic aggiunge una scorciatoia: chiedi al modello di valutare i tuoi esempi per rilevanza e diversità, o di scriverne altri partendo da quelli che hai.

Lista di controllo

Prima di fidarti dei tuoi esempi

Una volta che gli esempi funzionano, la domanda successiva è come evitare che diversi documenti si confondano in un unico prompt. Etichettare ogni documento in un prompt se ne occupa.