Caching dei prompt
Il caching dei prompt è una funzionalità potente che ottimizza l’utilizzo delle API consentendo di riprendere da prefissi specifici nei tuoi prompt. Questo approccio riduce significativamente i tempi di elaborazione e i costi per attività ripetitive o prompt con elementi coerenti.
Ecco un esempio di come implementare il caching dei prompt con l’API Messages utilizzando un blocco cache_control
:
In questo esempio, l’intero testo di “Orgoglio e Pregiudizio” viene memorizzato nella cache utilizzando il parametro cache_control
. Questo consente il riutilizzo di questo testo di grandi dimensioni attraverso più chiamate API senza riprocessarlo ogni volta. Cambiando solo il messaggio dell’utente ti permette di fare varie domande sul libro utilizzando il contenuto memorizzato nella cache, portando a risposte più veloci e maggiore efficienza.
Come funziona il caching dei prompt
Quando invii una richiesta con il caching dei prompt abilitato:
- Il sistema controlla se un prefisso del prompt, fino a un punto di interruzione della cache specificato, è già memorizzato nella cache da una query recente.
- Se trovato, utilizza la versione memorizzata nella cache, riducendo i tempi di elaborazione e i costi.
- Altrimenti, elabora l’intero prompt e memorizza il prefisso nella cache una volta che inizia la risposta.
Questo è particolarmente utile per:
- Prompt con molti esempi
- Grandi quantità di contesto o informazioni di background
- Attività ripetitive con istruzioni coerenti
- Lunghe conversazioni multi-turno
Per impostazione predefinita, la cache ha una durata di 5 minuti. La cache viene aggiornata senza costi aggiuntivi ogni volta che il contenuto memorizzato nella cache viene utilizzato.
Il caching dei prompt memorizza l’intero prefisso
Il caching dei prompt fa riferimento all’intero prompt - tools
, system
e messages
(in quest’ordine) fino al blocco designato con cache_control
incluso.
Prezzi
Il caching dei prompt introduce una nuova struttura di prezzi. La tabella sottostante mostra il prezzo per milione di token per ogni modello supportato:
Model | Base Input Tokens | 5m Cache Writes | 1h Cache Writes | Cache Hits & Refreshes | Output Tokens |
---|---|---|---|---|---|
Claude Opus 4 | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
Claude Sonnet 4 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
Claude Sonnet 3.7 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
Claude Sonnet 3.5 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
Claude Haiku 3.5 | $0.80 / MTok | $1 / MTok | $1.6 / MTok | $0.08 / MTok | $4 / MTok |
Claude Opus 3 | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
Claude Haiku 3 | $0.25 / MTok | $0.30 / MTok | $0.50 / MTok | $0.03 / MTok | $1.25 / MTok |
Nota:
- I token di scrittura della cache di 5 minuti costano 1,25 volte il prezzo dei token di input base
- I token di scrittura della cache di 1 ora costano 2 volte il prezzo dei token di input base
- I token di lettura della cache costano 0,1 volte il prezzo dei token di input base
- I token di input e output regolari sono prezzati alle tariffe standard
Come implementare il caching dei prompt
Modelli supportati
Il caching dei prompt è attualmente supportato su:
- Claude Opus 4
- Claude Sonnet 4
- Claude Sonnet 3.7
- Claude Sonnet 3.5
- Claude Haiku 3.5
- Claude Haiku 3
- Claude Opus 3
Strutturare il tuo prompt
Posiziona il contenuto statico (definizioni degli strumenti, istruzioni di sistema, contesto, esempi) all’inizio del tuo prompt. Segna la fine del contenuto riutilizzabile per il caching utilizzando il parametro cache_control
.
I prefissi della cache vengono creati nel seguente ordine: tools
, system
, poi messages
. Questo ordine forma una gerarchia dove ogni livello si basa sui precedenti.
Come funziona il controllo automatico dei prefissi
Puoi utilizzare solo un punto di interruzione della cache alla fine del tuo contenuto statico, e il sistema troverà automaticamente il prefisso corrispondente più lungo. Ecco come funziona:
- Quando aggiungi un punto di interruzione
cache_control
, il sistema controlla automaticamente i riscontri della cache a tutti i confini dei blocchi di contenuto precedenti (fino a circa 20 blocchi prima del tuo punto di interruzione esplicito) - Se qualcuna di queste posizioni precedenti corrisponde al contenuto memorizzato nella cache da richieste precedenti, il sistema utilizza il prefisso corrispondente più lungo
- Questo significa che non hai bisogno di più punti di interruzione solo per abilitare il caching - uno alla fine è sufficiente
Quando utilizzare più punti di interruzione
Puoi definire fino a 4 punti di interruzione della cache se vuoi:
- Memorizzare nella cache sezioni diverse che cambiano a frequenze diverse (ad esempio, gli strumenti cambiano raramente, ma il contesto si aggiorna quotidianamente)
- Avere più controllo su esattamente cosa viene memorizzato nella cache
- Garantire il caching per contenuti più di 20 blocchi prima del tuo punto di interruzione finale
Limitazione importante: Il controllo automatico dei prefissi guarda indietro solo circa 20 blocchi di contenuto da ogni punto di interruzione esplicito. Se il tuo prompt ha più di 20 blocchi di contenuto prima del tuo punto di interruzione della cache, il contenuto precedente a quello non verrà controllato per i riscontri della cache a meno che tu non aggiunga punti di interruzione aggiuntivi.
Limitazioni della cache
La lunghezza minima del prompt memorizzabile nella cache è:
- 1024 token per Claude Opus 4, Claude Sonnet 4, Claude Sonnet 3.7, Claude Sonnet 3.5 e Claude Opus 3
- 2048 token per Claude Haiku 3.5 e Claude Haiku 3
I prompt più corti non possono essere memorizzati nella cache, anche se contrassegnati con cache_control
. Qualsiasi richiesta di memorizzare nella cache meno di questo numero di token verrà elaborata senza caching. Per vedere se un prompt è stato memorizzato nella cache, vedi i campi di utilizzo della risposta.
Per le richieste concorrenti, nota che una voce della cache diventa disponibile solo dopo che inizia la prima risposta. Se hai bisogno di riscontri della cache per richieste parallele, aspetta la prima risposta prima di inviare richieste successive.
Attualmente, “ephemeral” è l’unico tipo di cache supportato, che per impostazione predefinita ha una durata di 5 minuti.
Comprendere i costi dei punti di interruzione della cache
I punti di interruzione della cache stessi non aggiungono alcun costo. Vieni addebitato solo per:
- Scritture della cache: Quando nuovo contenuto viene scritto nella cache (25% in più rispetto ai token di input base per TTL di 5 minuti)
- Letture della cache: Quando il contenuto memorizzato nella cache viene utilizzato (10% del prezzo dei token di input base)
- Token di input regolari: Per qualsiasi contenuto non memorizzato nella cache
Aggiungere più punti di interruzione cache_control
non aumenta i tuoi costi - paghi ancora la stessa quantità basata su quale contenuto viene effettivamente memorizzato nella cache e letto. I punti di interruzione ti danno semplicemente controllo su quali sezioni possono essere memorizzate nella cache indipendentemente.
Cosa può essere memorizzato nella cache
La maggior parte dei blocchi nella richiesta può essere designata per il caching con cache_control
. Questo include:
- Strumenti: Definizioni degli strumenti nell’array
tools
- Messaggi di sistema: Blocchi di contenuto nell’array
system
- Messaggi di testo: Blocchi di contenuto nell’array
messages.content
, per turni sia dell’utente che dell’assistente - Immagini e Documenti: Blocchi di contenuto nell’array
messages.content
, nei turni dell’utente - Uso degli strumenti e risultati degli strumenti: Blocchi di contenuto nell’array
messages.content
, in turni sia dell’utente che dell’assistente
Ognuno di questi elementi può essere contrassegnato con cache_control
per abilitare il caching per quella porzione della richiesta.
Cosa non può essere memorizzato nella cache
Mentre la maggior parte dei blocchi di richiesta può essere memorizzata nella cache, ci sono alcune eccezioni:
-
I blocchi di pensiero non possono essere memorizzati nella cache direttamente con
cache_control
. Tuttavia, i blocchi di pensiero POSSONO essere memorizzati nella cache insieme ad altro contenuto quando appaiono nei turni precedenti dell’assistente. Quando memorizzati nella cache in questo modo, CONTANO come token di input quando letti dalla cache. -
I sotto-blocchi di contenuto (come le citazioni) stessi non possono essere memorizzati nella cache direttamente. Invece, memorizza nella cache il blocco di livello superiore.
Nel caso delle citazioni, i blocchi di contenuto del documento di livello superiore che servono come materiale sorgente per le citazioni possono essere memorizzati nella cache. Questo ti permette di utilizzare il caching dei prompt con le citazioni efficacemente memorizzando nella cache i documenti a cui le citazioni faranno riferimento.
-
I blocchi di testo vuoti non possono essere memorizzati nella cache.
Cosa invalida la cache
Le modifiche al contenuto memorizzato nella cache possono invalidare parte o tutta la cache.
Come descritto in Strutturare il tuo prompt, la cache segue la gerarchia: tools
→ system
→ messages
. I cambiamenti a ogni livello invalidano quel livello e tutti i livelli successivi.
La seguente tabella mostra quali parti della cache vengono invalidate da diversi tipi di cambiamenti. ✘ indica che la cache viene invalidata, mentre ✓ indica che la cache rimane valida.
Cosa cambia | Cache degli strumenti | Cache del sistema | Cache dei messaggi | Impatto |
---|---|---|---|---|
Definizioni degli strumenti | ✘ | ✘ | ✘ | Modificare le definizioni degli strumenti (nomi, descrizioni, parametri) invalida l’intera cache |
Interruttore ricerca web | ✓ | ✘ | ✘ | Abilitare/disabilitare la ricerca web modifica il prompt di sistema |
Interruttore citazioni | ✓ | ✘ | ✘ | Abilitare/disabilitare le citazioni modifica il prompt di sistema |
Scelta degli strumenti | ✓ | ✓ | ✘ | I cambiamenti al parametro tool_choice influenzano solo i blocchi dei messaggi |
Immagini | ✓ | ✓ | ✘ | Aggiungere/rimuovere immagini ovunque nel prompt influenza i blocchi dei messaggi |
Parametri di pensiero | ✓ | ✓ | ✘ | I cambiamenti alle impostazioni di pensiero esteso (abilita/disabilita, budget) influenzano i blocchi dei messaggi |
Risultati non-strumento passati alle richieste di pensiero esteso | ✓ | ✓ | ✘ | Quando risultati non-strumento vengono passati nelle richieste mentre il pensiero esteso è abilitato, tutti i blocchi di pensiero precedentemente memorizzati nella cache vengono rimossi dal contesto, e qualsiasi messaggio nel contesto che segue quei blocchi di pensiero viene rimosso dalla cache. Per maggiori dettagli, vedi Caching con blocchi di pensiero. |
Tracciare le prestazioni della cache
Monitora le prestazioni della cache utilizzando questi campi di risposta dell’API, all’interno di usage
nella risposta (o evento message_start
se streaming):
cache_creation_input_tokens
: Numero di token scritti nella cache quando si crea una nuova voce.cache_read_input_tokens
: Numero di token recuperati dalla cache per questa richiesta.input_tokens
: Numero di token di input che non sono stati letti dalla cache o utilizzati per creare una cache.
Migliori pratiche per un caching efficace
Per ottimizzare le prestazioni del caching dei prompt:
- Memorizza nella cache contenuto stabile e riutilizzabile come istruzioni di sistema, informazioni di background, contesti di grandi dimensioni o definizioni di strumenti frequenti.
- Posiziona il contenuto memorizzato nella cache all’inizio del prompt per le migliori prestazioni.
- Utilizza i punti di interruzione della cache strategicamente per separare diverse sezioni di prefisso memorizzabili nella cache.
- Analizza regolarmente i tassi di riscontro della cache e regola la tua strategia secondo necessità.
Ottimizzazione per diversi casi d’uso
Adatta la tua strategia di caching dei prompt al tuo scenario:
- Agenti conversazionali: Riduci costi e latenza per conversazioni estese, specialmente quelle con istruzioni lunghe o documenti caricati.
- Assistenti di codifica: Migliora l’autocompletamento e le domande e risposte sulla base di codice mantenendo sezioni rilevanti o una versione riassunta della base di codice nel prompt.
- Elaborazione di documenti di grandi dimensioni: Incorpora materiale completo di lunga durata incluse le immagini nel tuo prompt senza aumentare la latenza di risposta.
- Set di istruzioni dettagliati: Condividi elenchi estesi di istruzioni, procedure ed esempi per mettere a punto le risposte di Claude. Gli sviluppatori spesso includono un esempio o due nel prompt, ma con il caching dei prompt puoi ottenere prestazioni ancora migliori includendo 20+ esempi diversi di risposte di alta qualità.
- Uso di strumenti agentici: Migliora le prestazioni per scenari che coinvolgono più chiamate di strumenti e modifiche iterative del codice, dove ogni passaggio richiede tipicamente una nuova chiamata API.
- Parla con libri, documenti, documentazione, trascrizioni di podcast e altri contenuti di lunga durata: Porta in vita qualsiasi base di conoscenza incorporando l’intero documento/i nel prompt e lasciando che gli utenti facciano domande.
Risoluzione dei problemi comuni
Se stai sperimentando comportamenti inaspettati:
- Assicurati che le sezioni memorizzate nella cache siano identiche e contrassegnate con cache_control nelle stesse posizioni attraverso le chiamate
- Controlla che le chiamate vengano fatte entro la durata della cache (5 minuti per impostazione predefinita)
- Verifica che
tool_choice
e l’uso delle immagini rimangano coerenti tra le chiamate - Convalida che stai memorizzando nella cache almeno il numero minimo di token
- Il sistema controlla automaticamente i riscontri della cache ai confini dei blocchi di contenuto precedenti (fino a ~20 blocchi prima del tuo punto di interruzione). Per prompt con più di 20 blocchi di contenuto, potresti aver bisogno di parametri
cache_control
aggiuntivi prima nel prompt per garantire che tutto il contenuto possa essere memorizzato nella cache
I cambiamenti a tool_choice
o la presenza/assenza di immagini ovunque nel prompt invalideranno la cache, richiedendo la creazione di una nuova voce della cache. Per maggiori dettagli sull’invalidazione della cache, vedi Cosa invalida la cache.
Caching con blocchi di pensiero
Quando utilizzi il pensiero esteso con il caching dei prompt, i blocchi di pensiero hanno un comportamento speciale:
Caching automatico insieme ad altro contenuto: Mentre i blocchi di pensiero non possono essere esplicitamente contrassegnati con cache_control
, vengono memorizzati nella cache come parte del contenuto della richiesta quando fai chiamate API successive con risultati degli strumenti. Questo accade comunemente durante l’uso degli strumenti quando passi i blocchi di pensiero indietro per continuare la conversazione.
Conteggio dei token di input: Quando i blocchi di pensiero vengono letti dalla cache, contano come token di input nelle tue metriche di utilizzo. Questo è importante per il calcolo dei costi e il budgeting dei token.
Modelli di invalidazione della cache:
- La cache rimane valida quando vengono forniti solo risultati degli strumenti come messaggi dell’utente
- La cache viene invalidata quando viene aggiunto contenuto dell’utente non-risultato-strumento, causando la rimozione di tutti i blocchi di pensiero precedenti
- Questo comportamento di caching si verifica anche senza marcatori
cache_control
espliciti
Per maggiori dettagli sull’invalidazione della cache, vedi Cosa invalida la cache.
Esempio con uso degli strumenti:
Quando viene incluso un blocco utente non-risultato-strumento, designa un nuovo ciclo dell’assistente e tutti i blocchi di pensiero precedenti vengono rimossi dal contesto.
Per informazioni più dettagliate, vedi la documentazione del pensiero esteso.
Archiviazione e condivisione della cache
-
Isolamento dell’organizzazione: Le cache sono isolate tra le organizzazioni. Organizzazioni diverse non condividono mai le cache, anche se utilizzano prompt identici.
-
Corrispondenza esatta: I riscontri della cache richiedono segmenti di prompt identici al 100%, inclusi tutto il testo e le immagini fino al blocco contrassegnato con controllo della cache incluso.
-
Generazione di token di output: Il caching dei prompt non ha effetto sulla generazione di token di output. La risposta che ricevi sarà identica a quella che otterresti se il caching dei prompt non fosse utilizzato.
Durata della cache di 1 ora
Se trovi che 5 minuti siano troppo pochi, Anthropic offre anche una durata della cache di 1 ora.
La cache di 1 ora è attualmente in beta. Per utilizzare la cache estesa, aggiungi extended-cache-ttl-2025-04-11
come header beta alla tua richiesta, e poi includi ttl
nella definizione cache_control
così:
La risposta includerà informazioni dettagliate sulla cache come le seguenti:
Nota che l’attuale campo cache_creation_input_tokens
è uguale alla somma dei valori nell’oggetto cache_creation
.
Quando utilizzare la cache di 1 ora
Se hai prompt che vengono utilizzati a cadenza regolare (cioè, prompt di sistema che vengono utilizzati più frequentemente di ogni 5 minuti), continua a utilizzare la cache di 5 minuti, poiché questa continuerà ad essere aggiornata senza costi aggiuntivi.
La cache di 1 ora è meglio utilizzata nei seguenti scenari:
- Quando hai prompt che probabilmente vengono utilizzati meno frequentemente di 5 minuti, ma più frequentemente di ogni ora. Ad esempio, quando un agente laterale agentivo impiegherà più di 5 minuti, o quando si memorizza una lunga conversazione di chat con un utente e generalmente ci si aspetta che quell’utente potrebbe non rispondere nei prossimi 5 minuti.
- Quando la latenza è importante e i tuoi prompt di follow-up potrebbero essere inviati oltre i 5 minuti.
- Quando vuoi migliorare l’utilizzo del tuo limite di velocità, poiché i riscontri della cache non vengono detratti dal tuo limite di velocità.
La cache di 5 minuti e quella di 1 ora si comportano allo stesso modo rispetto alla latenza. Generalmente vedrai un miglioramento del tempo-al-primo-token per documenti lunghi.
Mescolare diversi TTL
Puoi utilizzare sia controlli di cache di 1 ora che di 5 minuti nella stessa richiesta, ma con un vincolo importante: Le voci della cache con TTL più lungo devono apparire prima dei TTL più corti (cioè, una voce della cache di 1 ora deve apparire prima di qualsiasi voce della cache di 5 minuti).
Quando si mescolano TTL, determiniamo tre posizioni di fatturazione nel tuo prompt:
- Posizione
A
: Il conteggio dei token al riscontro della cache più alto (o 0 se non ci sono riscontri). - Posizione
B
: Il conteggio dei token al bloccocache_control
di 1 ora più alto dopoA
(o uguale adA
se non ne esistono). - Posizione
C
: Il conteggio dei token all’ultimo bloccocache_control
.
Se B
e/o C
sono maggiori di A
, saranno necessariamente mancati riscontri della cache, perché A
è il riscontro della cache più alto.
Verrai addebitato per:
- Token di lettura della cache per
A
. - Token di scrittura della cache di 1 ora per
(B - A)
. - Token di scrittura della cache di 5 minuti per
(C - B)
.
Ecco 3 esempi. Questo raffigura i token di input di 3 richieste, ognuna delle quali ha diversi riscontri e mancati riscontri della cache. Ognuna ha un prezzo calcolato diverso, mostrato nelle caselle colorate, di conseguenza.
Esempi di caching dei prompt
Per aiutarti a iniziare con il caching dei prompt, abbiamo preparato un cookbook del caching dei prompt con esempi dettagliati e migliori pratiche.
Di seguito, abbiamo incluso diversi frammenti di codice che mostrano vari modelli di caching dei prompt. Questi esempi dimostrano come implementare il caching in diversi scenari, aiutandoti a comprendere le applicazioni pratiche di questa funzionalità: