Il prompt chaining significa dividere un lavoro in una sequenza di prompt, in cui l'output di un prompt diventa parte dell'input del successivo. Invece di chiedere a un modello di leggere cinquanta recensioni, trovare i problemi, metterli in ordine e scrivere un report in un colpo solo, gli chiedi ognuna di queste cose a turno. Ogni prompt ha un solo compito, e tra un passaggio e l'altro tu (o il tuo codice) puoi guardare il risultato, correggerlo o fermarti.
Il blocco qui sotto è una catena di tre passaggi che trasforma le recensioni dei clienti in una nota per un team di prodotto. Ogni scheda è un passaggio. L'input del passaggio 2 è la risposta al passaggio 1, incollata, e l'input del passaggio 3 è la risposta al passaggio 2.
[
{"review": 1, "complaint": "Batteria scarica dopo 4 ore"},
{"review": 1, "complaint": "Cavo di ricarica troppo corto"},
{"review": 2, "complaint": "L'app continua a disconnettere"},
{"review": 3, "complaint": "La batteria non dura un tragitto"},
{"review": 4, "complaint": "App bloccata durante l'abbinamento"},
{"review": 4, "complaint": "La batteria si scarica in fretta"},
{"review": 5, "complaint": "Cavo troppo corto per usarle in carica"}
]
Il passaggio 1 legge ed estrae soltanto. Il passaggio 2 non vede mai le recensioni, solo l'elenco, quindi non può tornare a riassumerle. Il passaggio 3 scrive soltanto. Se il passaggio 3 esce con il tono sbagliato, riesegui solo il passaggio 3; l'estrazione e il raggruppamento restano come erano.
Nota cosa non dice il passaggio 3: che una batteria si è scaricata dopo 4 ore, o che i problemi dell'app erano disconnessioni e blocchi. Il passaggio 3 ha ricevuto solo i nomi dei temi, quindi quei dettagli non erano nel suo input. Decidere cosa riceve ogni passaggio è la principale scelta di progettazione di una catena, e un dettaglio che vuoi nella risposta finale deve essere passato fino in fondo.
Perché concatenare invece di scrivere un unico grande prompt
Ogni passaggio ha un compito e uno standard. Un singolo prompt che chiede estrazione, analisi e una scrittura curata ha tre obiettivi da bilanciare, e niente ti dice quale ha sacrificato. Un prompt con un solo compito può dire esattamente com'è un buon risultato per quel compito, e puoi giudicare la risposta su quella base.
Puoi controllare il punto intermedio. In un singolo prompt, un reclamo dimenticato sparisce dentro un paragrafo ben scritto e non lo vedi mai. In una catena, l'elenco del passaggio 1 è lì davanti a te. Controllarlo richiede pochi secondi, e correggerlo prima del passaggio 2 costa meno che trovare l'errore nel report finale.
Ogni passaggio può usare le sue impostazioni. Estrazione e raggruppamento vogliono una temperatura bassa e un output strutturato che il codice possa leggere. Il passaggio di scrittura può essere più libero. Nel codice puoi perfino mandare passaggi diversi a modelli diversi, per esempio uno piccolo e veloce per l'estrazione.
I guasti sono locali. Quando una catena si rompe, sai quale passaggio si è rotto e riesegui solo quello.
Anche i costi sono reali. Una catena fa più chiamate, quindi richiede più tempo e costa più di un solo prompt. E un errore che sfugge in un passaggio iniziale viene trascinato in tutti quelli successivi, ed è per questo che vale la pena controllare i passaggi intermedi.
Come progettare una catena
- Scrivi i passaggi che faresti a mano. Se prima faresti un elenco, poi lo ordineresti e poi lo metteresti per iscritto, sono tre prompt. I passaggi che richiedono tipi di ragionamento diversi sono i punti naturali in cui dividere.
- Decidi il formato di output di ogni passaggio prima di scriverne il prompt. Ciò che il passaggio successivo consuma deve essere facile da leggere e da controllare: un array JSON, un elenco numerato, una tabella. La prosa libera va bene solo per l'ultimo passaggio.
- Passa solo ciò che serve al passaggio successivo. Il passaggio 2 qui sopra riceve l'elenco dei reclami, non le recensioni. Meno input significa meno distrazioni, e rende ogni passaggio testabile da solo.
- Aggiungi un controllo tra i passaggi. Nel codice, leggi il JSON e verifica che i campi esistano. Per le valutazioni di giudizio, il controllo può essere a sua volta un prompt: "Questo elenco contiene ogni reclamo di queste recensioni? Rispondi sì o no, poi elenca quelli mancanti."
- Segna chiaramente il materiale incollato. L'input di ogni passaggio è testo prodotto da un passaggio precedente, e i delimitatori evitano che il modello lo legga come nuove istruzioni.
Ecco un passaggio di controllo per la catena qui sopra, eseguito su una versione dell'output del passaggio 1 a cui mancava un reclamo. Un controllo del genere è un prompt separato con una sola domanda precisa, quindi è più facile da azzeccare dell'estrazione stessa.
Incompleto
- Recensione 4: la batteria si scarica in fretta
Se il controllo dice "Incompleto", riesegui il passaggio 1 o aggiungi a mano l'elemento mancante prima che parta il passaggio 2.
Una catena nel codice
Nel codice, una catena è una sequenza di chiamate in cui ogni prompt viene costruito dalla risposta precedente. Questa versione usa l'SDK Python di Anthropic; la stessa struttura funziona con qualsiasi fornitore.
import json
import anthropic
client = anthropic.Anthropic()
MODEL = "your-model-id" # e.g. from your provider's model list
def ask(prompt):
response = client.messages.create(
model=MODEL,
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return response.content[0].text
reviews = open("reviews.txt", encoding="utf-8").read()
complaints = ask(
"List every complaint in the reviews inside the <reviews> tags. Ignore praise. "
'Return a JSON array of objects with the keys "review" and "complaint". '
"Return only the JSON, with no code fence.\n\n"
f"<reviews>\n{reviews}\n</reviews>"
)
json.loads(complaints) # raises an error here if step 1 did not return valid JSON
themes = ask(
"Group these complaints into themes. Return only a JSON array with the keys "
'"theme", "count" and "reviews", sorted by count, highest first.\n\n'
f"<complaints>\n{complaints}\n</complaints>"
)
note = ask(
"Write a note of at most four sentences to the product team based on these "
f"themes. Lead with the most common one.\n\n<themes>\n{themes}\n</themes>"
)
print(note)
La riga json.loads è il controllo più semplice possibile: se il passaggio 1 ha risposto con della prosa, la catena si ferma lì invece di passare avanti un input sbagliato. Una catena in produzione controllerebbe anche i campi, riproverebbe una volta un passaggio fallito e registrerebbe ogni risultato intermedio, così una risposta finale sbagliata può essere ricondotta al passaggio che l'ha causata.
Concatenare in un'app di chat
Non ti serve il codice per concatenare i prompt. Esegui il passaggio 1, leggi la risposta, correggi ciò che è sbagliato e incollala nel prompt del passaggio 2. Fare ogni passaggio in una nuova chat tiene la conversazione precedente fuori dal contesto, quindi un'istruzione scritta per un passaggio non influenza il successivo. Restare nella stessa chat è più rapido e funziona quando i passaggi sono strettamente collegati, ma tutta la cronologia viaggia insieme a ogni nuovo messaggio.
Il prompt chaining a confronto con tecniche simili
Il chain of thought è un ragionamento scritto dentro una risposta; una catena di prompt è fatta di diverse risposte, e sei tu a controllare cosa passa dall'una all'altra. Le due tecniche si combinano bene: qualsiasi passaggio di una catena può chiedere un ragionamento passo dopo passo.
In una catena, i passaggi li fissi tu in anticipo. Quando è il modello stesso a decidere quale passaggio viene dopo, per esempio cercare, leggere un risultato e poi scegliere un'altra azione, lo schema diventa invece un ciclo da agente, descritto in ReAct prompting. Le catene fisse sono più facili da testare e da prevedere, quindi sono il punto di partenza migliore ogni volta che conosci già i passaggi.
Domande frequenti
Cos'è il prompt chaining?
Il prompt chaining è una tecnica in cui dividi un compito in diversi prompt che vengono eseguiti uno dopo l'altro, e l'output di ogni prompt viene inserito nel successivo. Per esempio, un prompt estrae i reclami da alcune recensioni, un secondo li raggruppa in temi e un terzo scrive un report partendo dai temi.
Che differenza c'è tra prompt chaining e chain of thought?
Il chain of thought avviene dentro una sola risposta: il modello scrive il suo ragionamento prima della risposta. Il prompt chaining usa diverse chiamate separate, e tu o il tuo codice passate il risultato di una alla successiva. Puoi esaminare, correggere o rieseguire qualsiasi singolo passaggio di una catena, cosa che non puoi fare con il ragionamento dentro una risposta.
Posso fare prompt chaining in ChatGPT o Claude senza programmare?
Sì. Esegui il primo prompt, controlla la risposta, poi incollala nel prompt successivo, nella stessa chat o in una nuova. Aprire una nuova chat per ogni passaggio evita che bozze e istruzioni precedenti influenzino i passaggi successivi.
Quando conviene concatenare prompt invece di usarne uno solo?
Usa una catena quando un solo prompt chiede diversi tipi di lavoro, come estrarre, analizzare e scrivere, o quando devi controllare o riusare un risultato intermedio. Se un singolo prompt dà già una risposta affidabile, una catena aggiunge solo chiamate, costi e tempi di attesa.