cache_control per ridurre costi e latenza, usando la cache automatica o breakpoint espliciti con TTL di 5 minuti o 1 ora.La "prompt caching" (cache dei prompt) ottimizza il tuo utilizzo dell'API consentendo di riprendere da prefissi specifici nei tuoi prompt. Questo riduce significativamente i tempi di elaborazione e i costi per attività ripetitive o prompt con elementi coerenti.
Per sapere come la "zero data retention" (conservazione zero dei dati), o ZDR, si applica a questa funzionalità, consulta API e conservazione dei dati.
Ci sono due modi per abilitare la cache dei prompt:
cache_control al livello superiore della tua richiesta. Il sistema applica automaticamente il breakpoint della cache all'ultimo blocco memorizzabile nella cache e lo sposta in avanti man mano che le conversazioni crescono. Ideale per conversazioni multi-turno in cui la cronologia dei messaggi in crescita dovrebbe essere memorizzata nella cache automaticamente.cache_control direttamente sui singoli blocchi di contenuto per un controllo granulare su cosa viene esattamente memorizzato nella cache.Il modo più semplice per iniziare è con la cache automatica:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
cache_control={"type": "ephemeral"},
system="You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.",
messages=[
{
"role": "user",
"content": "Analyze the major themes in 'Pride and Prejudice'.",
}
],
)
print(response.usage.model_dump_json())Con la cache automatica, il sistema memorizza nella cache tutto il contenuto fino all'ultimo blocco memorizzabile incluso. Nelle richieste successive con lo stesso prefisso, il contenuto memorizzato nella cache viene riutilizzato automaticamente.
Quando invii una richiesta con la cache dei prompt abilitata:
Questo è particolarmente utile per:
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.
Se ritieni che 5 minuti siano troppo pochi, Anthropic offre anche una durata della cache di 1 ora a un costo aggiuntivo.
Per maggiori informazioni, consulta Durata della cache di 1 ora.
La cache dei prompt memorizza l'intero prefisso
La cache dei prompt fa riferimento all'intero prompt - tools, system e messages (in quest'ordine) fino al blocco designato con cache_control incluso.
La cache dei prompt introduce una nuova struttura di prezzi. La seguente tabella mostra il prezzo per milione di token per ogni modello supportato:
| Modello | Token di input base | Scritture cache 5m | Scritture cache 1h | Hit e aggiornamenti cache | Token di output |
|---|---|---|---|---|---|
| Claude Fable 5 | $10 / MTok | $12.50 / MTok | $20 / MTok | $1 / MTok | $50 / MTok |
| Claude Mythos 5 (disponibilità limitata) | $10 / MTok | $12.50 / MTok | $20 / MTok | $1 / MTok | $50 / MTok |
| Claude Opus 5 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.8 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.7 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.6 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.5 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.1 (deprecato) | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
| Claude Opus 4 (ritirato, eccetto su Google Cloud) | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
| Claude Sonnet 5 fino al 31 agosto 2026 | $2 / MTok | $2.50 / MTok | $4 / MTok | $0.20 / MTok | $10 / MTok |
| Claude Sonnet 5 a partire dal 1 settembre 2026 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 4.6 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 4.5 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 4 (ritirato, eccetto su Bedrock e Google Cloud) | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Haiku 4.5 | $1 / MTok | $1.25 / MTok | $2 / MTok | $0.10 / MTok | $5 / MTok |
| Claude Haiku 3.5 (ritirato, eccetto su Bedrock e Google Cloud) | $0.80 / MTok | $1 / MTok | $1.60 / MTok | $0.08 / MTok | $4 / MTok |
La tabella precedente riflette i seguenti moltiplicatori di prezzo per la cache dei prompt:
Questi moltiplicatori si sommano ad altri modificatori di prezzo come lo sconto della Batch API e la residenza dei dati. Consulta prezzi per tutti i dettagli.
La cache dei prompt (sia automatica che esplicita) è supportata su tutti i modelli Claude attivi.
La cache automatica è il modo più semplice per abilitare la cache dei prompt. Invece di posizionare cache_control sui singoli blocchi di contenuto, aggiungi un singolo campo cache_control al livello superiore del corpo della tua richiesta. Il sistema applica automaticamente il breakpoint della cache all'ultimo blocco memorizzabile nella cache.
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
cache_control={"type": "ephemeral"},
system="You are a helpful assistant that remembers our conversation.",
messages=[
{"role": "user", "content": "My name is Alex. I work on machine learning."},
{
"role": "assistant",
"content": "Nice to meet you, Alex! How can I help with your ML work today?",
},
{"role": "user", "content": "What did I say I work on?"},
],
)
print(response.usage.model_dump_json())Con la cache automatica, il punto di cache si sposta in avanti automaticamente man mano che le conversazioni crescono. Ogni nuova richiesta memorizza nella cache tutto fino all'ultimo blocco memorizzabile, e il contenuto precedente viene letto dalla cache.
| Richiesta | Contenuto | Comportamento della cache |
|---|---|---|
| Richiesta 1 | System + User(1) + Asst(1) + User(2) ◀ cache | Tutto scritto nella cache |
| Richiesta 2 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) ◀ cache | Da System a User(2) letto dalla cache; Asst(2) + User(3) scritti nella cache |
| Richiesta 3 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) + Asst(3) + User(4) ◀ cache | Da System a User(3) letto dalla cache; Asst(3) + User(4) scritti nella cache |
Il breakpoint della cache si sposta automaticamente all'ultimo blocco memorizzabile in ogni richiesta, quindi non è necessario aggiornare alcun marcatore cache_control man mano che la conversazione cresce.
Per impostazione predefinita, la cache automatica utilizza un TTL di 5 minuti. Puoi specificare un TTL di 1 ora a 2 volte il prezzo base dei token di input:
{ "cache_control": { "type": "ephemeral", "ttl": "1h" } }La cache automatica è compatibile con i breakpoint di cache espliciti. Quando usati insieme, il breakpoint di cache automatico utilizza uno dei 4 slot di breakpoint disponibili.
Questo ti consente di combinare entrambi gli approcci. Ad esempio, usa un breakpoint esplicito per memorizzare nella cache il tuo prompt di sistema, mentre la cache automatica gestisce la conversazione:
{
"model": "claude-opus-5",
"max_tokens": 1024,
"cache_control": { "type": "ephemeral" },
"system": [
{
"type": "text",
"text": "You are a helpful assistant.",
"cache_control": { "type": "ephemeral" }
}
],
"messages": [{ "role": "user", "content": "What are the key terms?" }]
}La cache automatica utilizza la stessa infrastruttura di caching sottostante. I prezzi, le soglie minime di token, i requisiti di ordinamento del contesto e la finestra di lookback di 20 blocchi si applicano tutti allo stesso modo dei breakpoint espliciti.
cache_control esplicito con lo stesso TTL, la cache automatica non ha alcun effetto.cache_control esplicito con un TTL diverso, l'API restituisce un errore 400.La cache automatica è disponibile sulla Claude API, Claude Platform on AWS, Google Cloud e Microsoft Foundry. Amazon Bedrock non supporta la cache automatica.
Per un maggiore controllo sulla cache, puoi posizionare cache_control direttamente sui singoli blocchi di contenuto. Questo è utile quando devi memorizzare nella cache sezioni diverse che cambiano con frequenze diverse, o hai bisogno di un controllo granulare su cosa viene esattamente memorizzato nella cache.
Posiziona il contenuto statico (definizioni degli strumenti, istruzioni di sistema, contesto, esempi) all'inizio del tuo prompt. Contrassegna la fine del contenuto riutilizzabile per la cache usando il parametro cache_control.
I prefissi della cache vengono creati nel seguente ordine: tools, system, poi messages. Questo ordine forma una gerarchia in cui ogni livello si basa sui precedenti.
Puoi usare un solo breakpoint di cache alla fine del tuo contenuto statico, e il sistema troverà automaticamente il prefisso più lungo che una richiesta precedente ha già scritto nella cache. Comprendere come funziona ti aiuta a ottimizzare la tua strategia di caching.
Tre principi fondamentali:
Le scritture nella cache avvengono solo al tuo breakpoint. Contrassegnare un blocco con cache_control scrive esattamente una voce di cache: un hash del prefisso che termina in quel blocco. Il sistema non scrive voci per nessuna posizione precedente. Poiché l'hash è cumulativo, coprendo tutto fino al breakpoint incluso, modificare qualsiasi blocco al breakpoint o prima di esso produce un hash diverso nella richiesta successiva.
Le letture della cache cercano all'indietro le voci che le richieste precedenti hanno scritto. A ogni richiesta il sistema calcola l'hash del prefisso al tuo breakpoint e verifica la presenza di una voce di cache corrispondente. Se non ne esiste nessuna, procede all'indietro un blocco alla volta, verificando se l'hash del prefisso in ogni posizione precedente corrisponde a qualcosa già presente nella cache. Sta cercando scritture precedenti, non contenuto stabile.
La finestra di lookback è di 20 blocchi. Il sistema verifica al massimo 20 posizioni per breakpoint, contando il breakpoint stesso come la prima. Se il sistema non trova alcuna voce corrispondente in quella finestra, la verifica si interrompe (o riprende dal successivo breakpoint esplicito, se presente).
Esempio: Lookback in una conversazione in crescita
Aggiungi nuovi blocchi a ogni turno e imposti cache_control sul blocco finale di ogni richiesta:
Errore comune: Breakpoint su contenuto che cambia a ogni richiesta
Il tuo prompt ha un grande contesto di sistema statico (blocchi da 1 a 5) seguito da un blocco per richiesta contenente un timestamp e il messaggio dell'utente (blocco 6). Imposti cache_control sul blocco 6:
Il lookback non trova il contenuto stabile dietro il tuo breakpoint per memorizzarlo nella cache. Trova le voci che le richieste precedenti hanno già scritto, e le scritture avvengono solo ai breakpoint. Sposta cache_control al blocco 5, l'ultimo blocco che rimane invariato tra le richieste, e ogni richiesta successiva legge il prefisso memorizzato nella cache. La cache automatica incorre nella stessa trappola: posiziona il breakpoint sull'ultimo blocco memorizzabile, che in questa struttura è quello che cambia a ogni richiesta, quindi usa invece un breakpoint esplicito sul blocco 5.
Punto chiave: Posiziona cache_control sull'ultimo blocco il cui prefisso è identico tra le richieste che vuoi che condividano una cache. In una conversazione in crescita il blocco finale funziona purché ogni turno aggiunga meno di 20 blocchi: il contenuto precedente non cambia mai, quindi il lookback della richiesta successiva trova la scrittura precedente. Per un prompt con un suffisso variabile (timestamp, contesto per richiesta, il messaggio in arrivo), posiziona il breakpoint alla fine del prefisso statico, non sul blocco variabile.
Puoi definire fino a 4 breakpoint di cache se vuoi:
Limitazione importante: Il lookback può trovare solo voci che le richieste precedenti hanno già scritto. Se una conversazione in crescita spinge il tuo breakpoint 20 o più blocchi oltre l'ultima scrittura, la finestra di lookback la manca. Aggiungi un secondo breakpoint più vicino a quella posizione fin dall'inizio in modo che una scrittura si accumuli lì prima che tu ne abbia bisogno.
I breakpoint di cache di per sé non aggiungono alcun costo. Ti viene addebitato solo per:
Aggiungere più breakpoint cache_control non aumenta i tuoi costi - paghi comunque lo stesso importo in base a quale contenuto viene effettivamente memorizzato nella cache e letto. I breakpoint ti danno il controllo su quali sezioni possono essere memorizzate nella cache in modo indipendente.
Sulla Claude API, Claude Platform on AWS, Google Cloud e Microsoft Foundry, la lunghezza minima del prompt memorizzabile nella cache è:
Questi minimi si applicano su ogni piattaforma in cui ciascun modello è disponibile.
I prompt più brevi non possono essere memorizzati nella cache, anche se contrassegnati con cache_control. Qualsiasi richiesta di memorizzare nella cache un numero di token inferiore a questo verrà elaborata senza cache, e non viene restituito alcun errore. Per verificare se un prompt è stato memorizzato nella cache, controlla i campi usage della risposta: se sia cache_creation_input_tokens che cache_read_input_tokens sono 0, il prompt non è stato memorizzato nella cache (probabilmente perché non ha soddisfatto il requisito di lunghezza minima).
Se il tuo prompt è appena al di sotto del minimo per il tuo modello e la tua piattaforma, espandere il contenuto memorizzato nella cache per raggiungere la soglia è spesso conveniente. Le letture dalla cache costano significativamente meno dei token di input non memorizzati nella cache, quindi raggiungere il minimo può ridurre i costi per i prompt riutilizzati frequentemente.
Bedrock è una piattaforma gestita da AWS. Su Bedrock, consulta la documentazione sulla cache dei prompt di Bedrock per i minimi per modello, il comportamento in caso di errore e i nomi dei campi usage applicabili.
Per le richieste concorrenti, nota che una voce di cache diventa disponibile solo dopo che la prima risposta inizia. Se hai bisogno di cache hit per richieste parallele, attendi la prima risposta prima di inviare le richieste successive.
Attualmente, "ephemeral" è l'unico tipo di cache supportato, che per impostazione predefinita ha una durata di 5 minuti.
La maggior parte dei blocchi nella richiesta può essere memorizzata nella cache. Questo include:
toolssystemmessages.content, sia per i turni dell'utente che dell'assistentemessages.content, nei turni dell'utentemessages.content, sia nei turni dell'utente che dell'assistenteOgnuno di questi elementi può essere memorizzato nella cache, automaticamente o contrassegnandolo con cache_control.
Sebbene la maggior parte dei blocchi della richiesta possa 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, VENGONO conteggiati come token di input quando letti dalla cache.
I sotto-blocchi di contenuto (come le citazioni) 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 fungono da materiale di origine per le citazioni possono essere memorizzati nella cache. Questo ti consente di usare la cache dei prompt con le citazioni in modo efficace memorizzando nella cache i documenti a cui le citazioni faranno riferimento.
I blocchi di testo vuoti non possono essere memorizzati nella 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. Le modifiche 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 modifiche. ✘ indica che la cache viene invalidata, mentre ✓ indica che la cache rimane valida.
| Cosa cambia | Cache tools | Cache system | Cache messages | Impatto |
|---|---|---|---|---|
| Definizioni degli strumenti | ✘ | ✘ | ✘ | Modificare le definizioni degli strumenti (nomi, descrizioni, parametri) invalida l'intera cache |
| Attivazione/disattivazione della ricerca web | ✓ | ✘ | ✘ | Abilitare/disabilitare la ricerca web modifica il prompt di sistema |
| Attivazione/disattivazione delle citazioni | ✓ | ✘ | ✘ | Abilitare/disabilitare le citazioni modifica il prompt di sistema |
| Impostazione della velocità | ✓ | ✘ | ✘ | Passare tra speed: "fast" e velocità standard invalida le cache di sistema e dei messaggi |
| Scelta dello strumento | ✓ | ✓ | ✘ | Le modifiche al parametro tool_choice influiscono solo sui blocchi dei messaggi |
| Immagini | ✓ | ✓ | ✘ | Aggiungere/rimuovere immagini in qualsiasi punto del prompt influisce sui blocchi dei messaggi |
| Parametri di pensiero | Specifico del modello | Specifico del modello | ✘ | La configurazione del pensiero (modalità e budget_tokens in modalità estesa) viene resa nel prompt, quindi modificarla invalida sempre i blocchi dei messaggi; le cache degli strumenti e di sistema vengono invalidate anche sui modelli che rendono la configurazione prima di esse. Consulta Pensiero e cache dei prompt. |
| Impostazione dell'effort | Specifico del modello | Specifico del modello | ✘ | Modificare il valore output_config.effort invalida sempre i blocchi dei messaggi, con lo stesso effetto specifico del modello sulle cache degli strumenti e di sistema dei parametri di pensiero. Impostare esplicitamente l'effort al valore predefinito del modello equivale a ometterlo e non invalida. |
| Risultati non di strumenti passati a richieste con pensiero esteso | ✓ | ✓ | Specifico del modello | Su Opus 4.5+ e Sonnet 4.6+, i blocchi di pensiero vengono preservati per impostazione predefinita, quindi la cache rimane valida (✓). Sui modelli Opus/Sonnet precedenti e su tutti i modelli Haiku, tutti i blocchi di pensiero precedentemente memorizzati nella cache vengono rimossi dal contesto, e qualsiasi messaggio che segue quei blocchi di pensiero viene rimosso dalla cache (✘). Per maggiori dettagli, consulta Cache con blocchi di pensiero. |
Su Claude Fable 5, Claude Mythos 5, Claude Opus 4.8 e Claude Opus 5, puoi aggiungere una nuova istruzione di sistema a metà di una conversazione senza invalidare le cache di sistema o dei messaggi. Aggiungi un messaggio {"role": "system"} a messages invece di modificare il campo system di livello superiore, in modo che il prefisso memorizzato nella cache rimanga invariato. Questa funzionalità non è disponibile su Claude Sonnet 5; usa invece il campo system di livello superiore. Consulta Messaggi di sistema a metà conversazione.
Monitora le prestazioni della cache usando questi campi della risposta API, all'interno di usage nella risposta (o nell'evento message_start se usi lo streaming):
cache_creation_input_tokens: Numero di token scritti nella cache durante la creazione di 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 né utilizzati per crearne una (cioè, i token dopo l'ultimo breakpoint di cache).Comprendere la suddivisione dei token
Il campo input_tokens rappresenta solo i token che vengono dopo l'ultimo breakpoint di cache nella tua richiesta - non tutti i token di input che hai inviato.
Per calcolare i token di input totali:
total_input_tokens = cache_read_input_tokens + cache_creation_input_tokens + input_tokensSpiegazione spaziale:
cache_read_input_tokens = token prima del breakpoint già memorizzati nella cache (letture)cache_creation_input_tokens = token prima del breakpoint che vengono memorizzati nella cache ora (scritture)input_tokens = token dopo il tuo ultimo breakpoint (non idonei per la cache)Esempio: Se hai una richiesta con 100.000 token di contenuto memorizzato nella cache (letti dalla cache), 0 token di nuovo contenuto da memorizzare nella cache e 50 token nel tuo messaggio utente (dopo il breakpoint di cache):
cache_read_input_tokens: 100.000cache_creation_input_tokens: 0input_tokens: 50Questo è importante per comprendere sia i costi che i limiti di velocità, poiché input_tokens sarà tipicamente molto più piccolo del tuo input totale quando usi la cache in modo efficace.
Quando usi il pensiero con la cache dei prompt, i blocchi di pensiero hanno un comportamento speciale:
Cache automatica insieme ad altro contenuto: Sebbene i blocchi di pensiero non possano essere contrassegnati esplicitamente con cache_control, vengono memorizzati nella cache come parte del contenuto della richiesta quando effettui 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, vengono conteggiati come token di input nelle tue metriche di utilizzo. Questo è importante per il calcolo dei costi e il budget dei token.
Modelli di invalidazione della cache:
cache_control esplicitiPer maggiori dettagli sull'invalidazione della cache, consulta Cosa invalida la cache.
Esempio con uso degli strumenti:
Request 1: User: "What's the weather in Paris?"
Response: [thinking_block_1] + [tool_use block 1]
Request 2:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True]
Response: [thinking_block_2] + [text block 2]
# Request 2 caches its request content (not the response)
# The cache includes: user message, thinking_block_1, tool_use block 1, and tool_result_1
Request 3:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True],
Assistant: [thinking_block_2] + [text block 2],
User: [Text response, cache=True]
# On earlier Opus/Sonnet and all Haiku models, non-tool-result user block causes prior thinking blocks to be stripped; on Opus 4.5+/Sonnet 4.6+ they are keptSui modelli Opus/Sonnet precedenti e su tutti i modelli Haiku, tutti i blocchi di pensiero precedenti vengono rimossi dal contesto a questo punto. Su Opus 4.5+ e Sonnet 4.6+, i blocchi di pensiero precedenti vengono mantenuti per impostazione predefinita e rimangono parte del prefisso memorizzato nella cache.
Per informazioni più dettagliate, consulta Pensiero e cache dei prompt.
A partire dal 5 febbraio 2026, la cache dei prompt utilizza l'isolamento a livello di workspace invece dell'isolamento a livello di organizzazione. Le cache sono isolate per workspace, garantendo la separazione dei dati tra i workspace all'interno della stessa organizzazione. Questo si applica alla Claude API, Claude Platform on AWS e Microsoft Foundry; Bedrock e Google Cloud mantengono l'isolamento della cache a livello di organizzazione. Se usi più workspace, rivedi la tua strategia di caching per tenere conto di questa differenza.
Isolamento di organizzazione e workspace: Le cache sono isolate tra le organizzazioni. Organizzazioni diverse non condividono mai le cache, anche se usano prompt identici. A partire dal 5 febbraio 2026, le cache sono anche isolate per workspace all'interno di un'organizzazione sulla Claude API, Claude Platform on AWS e Microsoft Foundry; Bedrock e Google Cloud continuano a usare solo l'isolamento a livello di organizzazione.
Corrispondenza esatta: I cache hit richiedono segmenti di prompt identici al 100%, inclusi tutto il testo e le immagini fino al blocco contrassegnato con cache control incluso.
Generazione dei token di output: La cache dei prompt non ha alcun effetto sulla generazione dei token di output. La risposta che ricevi è identica a quella che otterresti se la cache dei prompt non fosse utilizzata.
Per ottimizzare le prestazioni della cache dei prompt:
Adatta la tua strategia di cache dei prompt al tuo scenario:
Se riscontri comportamenti inattesi:
La diagnostica della cache (beta) fa sì che l'API confronti richieste consecutive e riporti esattamente dove il prefisso del prompt è divergente, il che gestisce automaticamente molti dei passaggi in questo elenco.
cache_control siano nelle stesse posizionitool_choice, l'uso delle immagini, la configurazione del pensiero e output_config.effort rimangano coerenti tra le chiamatetool_use abbiano un ordinamento stabile, poiché alcuni linguaggi (ad esempio, Swift, Go) randomizzano l'ordine delle chiavi durante la conversione JSON, rompendo le cacheLe modifiche a tool_choice o la presenza/assenza di immagini in qualsiasi punto del prompt invalideranno la cache, richiedendo la creazione di una nuova voce di cache. Per maggiori dettagli sull'invalidazione della cache, consulta Cosa invalida la cache.
Se ritieni che 5 minuti siano troppo pochi, Anthropic offre anche una durata della cache di 1 ora a un costo aggiuntivo.
La durata della cache di 1 ora è disponibile sulla Claude API, Amazon Bedrock, Amazon Bedrock (Opus 4.6 e precedenti), Claude Platform on AWS, Google Cloud e Microsoft Foundry.
Per usare la cache estesa, includi ttl nella definizione di cache_control in questo modo:
"cache_control": {
"type": "ephemeral",
"ttl": "1h"
}La risposta include informazioni dettagliate sulla cache come le seguenti:
{
"usage": {
"input_tokens": 2048,
"cache_read_input_tokens": 1800,
"cache_creation_input_tokens": 248,
"output_tokens": 503,
"cache_creation": {
"ephemeral_5m_input_tokens": 148,
"ephemeral_1h_input_tokens": 100
}
}
}Nota che l'attuale campo cache_creation_input_tokens è uguale alla somma dei valori nell'oggetto cache_creation.
Se vedi scritture ephemeral_5m_input_tokens che non hai richiesto mentre usi strumenti server come la ricerca web, consulta Uso degli strumenti con la cache dei prompt.
Se hai prompt che vengono utilizzati con una cadenza regolare (cioè, prompt di sistema che vengono utilizzati più frequentemente di ogni 5 minuti), continua a usare la cache di 5 minuti, perché questa continuerà a essere aggiornata senza costi aggiuntivi.
La cache di 1 ora è più adatta nei seguenti scenari:
La cache di 5 minuti e quella di 1 ora si comportano allo stesso modo rispetto alla latenza. In genere vedrai un miglioramento del time-to-first-token per i documenti lunghi.
Puoi usare sia i controlli di cache di 1 ora che quelli di 5 minuti nella stessa richiesta, ma con un vincolo importante: le voci di cache con TTL più lungo devono apparire prima di quelle con TTL più breve (cioè, una voce di cache di 1 ora deve apparire prima di qualsiasi voce di cache di 5 minuti).
Quando combini i TTL, l'API determina tre posizioni di fatturazione nel tuo prompt:
A: Il conteggio dei token al cache hit più alto (o 0 se non ci sono hit).B: Il conteggio dei token al blocco cache_control di 1 ora più alto dopo A (o uguale ad A se non ne esistono).C: Il conteggio dei token all'ultimo blocco cache_control.Se B e/o C sono maggiori di A, saranno necessariamente cache miss, perché A è il cache hit più alto.
Ti verrà addebitato per:
A.(B - A).(C - B).Ecco tre esempi. Questo rappresenta i token di input di 3 richieste, ognuna delle quali ha cache hit e cache miss diversi. Ognuna ha un prezzo calcolato diverso, mostrato nei riquadri colorati, come risultato.
Il pre-riscaldamento della cache ti consente di caricare il tuo prompt di sistema o le definizioni degli strumenti nella cache dei prompt prima che un utente attivi una richiesta reale. Questo elimina la penalità di latenza del cache miss alla prima interazione dell'utente, riducendo il time-to-first-token (TTFT) per le applicazioni sensibili alla latenza.
Imposta max_tokens: 0 nella tua richiesta. L'API legge il tuo prompt nel modello e scrive la cache in qualsiasi punto di interruzione cache_control, quindi restituisce immediatamente senza generare alcun output. La risposta ha un array content vuoto, stop_reason: "max_tokens" e un blocco usage completamente popolato.
Posiziona il punto di interruzione cache_control sull'ultimo blocco condiviso con la richiesta successiva (tipicamente il tuo prompt di sistema o le definizioni degli strumenti), non sul messaggio utente segnaposto. Altrimenti la voce della cache viene associata al segnaposto e la richiesta successiva non la troverà. Usa anche la stessa configurazione di pensiero e lo stesso output_config.effort delle tue richieste successive: quei valori vengono renderizzati nel prompt (vedi Cosa invalida la cache), quindi un pre-riscaldamento con una configurazione diversa può scrivere una voce che il tuo traffico reale non raggiungerà mai. Questo significa usare un punto di interruzione della cache esplicito piuttosto che la cache automatica, poiché la cache automatica posiziona il punto di interruzione sull'ultimo blocco, che in questo caso è il segnaposto. Il messaggio utente segnaposto può essere qualsiasi stringa con contenuto non vuoto (gli esempi qui usano "warmup"); il suo contenuto viene letto nel modello ma non riceve mai risposta.
Una richiesta di pre-riscaldamento comporta un addebito di scrittura della cache se il prefisso non è già in cache, come qualsiasi altra richiesta. Controlla usage.cache_creation_input_tokens nella risposta per confermare che sia avvenuta una scrittura. Vengono fatturati zero token di output.
client = anthropic.Anthropic()
# Esegui questa chiamata prima dell'arrivo degli utenti per preriscaldare la cache condivisa del prompt di sistema.
prewarm = client.messages.create(
model="claude-opus-5",
max_tokens=0,
system=[
{
"type": "text",
"text": "You are an expert software engineer with deep knowledge of distributed systems...",
"cache_control": {"type": "ephemeral"},
}
],
messages=[{"role": "user", "content": "warmup"}],
)
print(prewarm.stop_reason) # "max_tokens"
print(prewarm.content) # []
print(prewarm.usage)L'API restituisce un array content vuoto:
{
"id": "msg_01XFDUDYJgAACzvnptvVoYEL",
"type": "message",
"role": "assistant",
"content": [],
"model": "claude-opus-5",
"stop_reason": "max_tokens",
"stop_sequence": null,
"usage": {
"input_tokens": 8,
"cache_creation_input_tokens": 5120,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 5120,
"ephemeral_1h_input_tokens": 0
},
"iterations": [
{
"input_tokens": 8,
"output_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 5120,
"cache_creation": {
"ephemeral_5m_input_tokens": 5120,
"ephemeral_1h_input_tokens": 0
},
"type": "message"
}
],
"output_tokens": 0,
"service_tier": "standard",
"inference_geo": "global"
}
}Invia una richiesta di pre-riscaldamento all'avvio della tua applicazione (o a intervalli programmati), quindi invia le richieste reali degli utenti dopo che il pre-riscaldamento è stato completato:
client = anthropic.Anthropic()
SYSTEM_PROMPT = [
{
"type": "text",
"text": "You are an expert software engineer with deep knowledge of distributed systems...",
"cache_control": {"type": "ephemeral"},
}
]
def prewarm_cache() -> None:
"""Call this at application startup or on a scheduled interval."""
client.messages.create(
model="claude-opus-5",
max_tokens=0,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": "warmup"}],
)
def respond(user_message: str) -> anthropic.types.Message:
"""The real user request; benefits from a warm cache."""
return client.messages.create(
model="claude-opus-5",
max_tokens=1024,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": user_message}],
)
# Riscalda la cache prima che arrivi il traffico degli utenti.
prewarm_cache()
# In seguito, quando l'utente invia un messaggio, il prefisso del prompt di sistema è già in cache.
response = respond("How do I implement a binary search tree?")
for block in response.content:
if block.type == "text":
print(block.text)Tieni presente che il TTL della cache si applica comunque. Per la cache predefinita di 5 minuti, invia una nuova richiesta di pre-riscaldamento almeno ogni 5 minuti per mantenere la cache attiva. Per intervalli più lunghi tra le richieste degli utenti, usa invece la durata della cache di 1 ora.
Una richiesta con max_tokens: 0 viene rifiutata con un errore invalid_request_error se è impostata una qualsiasi delle seguenti opzioni, poiché ciascuna implica un output che un budget di zero token non può produrre:
stream: truethinking.type: "enabled")output_config.format)tool_choice di tipo {"type": "tool", ...} o {"type": "any"}max_tokens: 0 viene rifiutato anche all'interno di una richiesta Message Batches. Il pre-riscaldamento mira al tempo fino al primo token, che non si applica all'elaborazione batch, e una voce della cache scritta durante l'elaborazione batch probabilmente scadrebbe prima dell'esecuzione della richiesta successiva.
Prima che max_tokens: 0 fosse disponibile, alcune applicazioni usavano chiamate di riscaldamento con max_tokens: 1 per ottenere lo stesso effetto. L'approccio con max_tokens: 0 è preferibile: non viene prodotto alcun output, quindi non c'è una risposta di un singolo token da scartare, non vengono fatturati token di output e l'intento della richiesta è inequivocabile.
Per aiutarti a iniziare con la cache dei prompt, il cookbook sulla cache dei prompt fornisce esempi dettagliati e best practice.
I seguenti frammenti di codice mostrano vari schemi di cache dei prompt. Questi esempi dimostrano come implementare la cache in diversi scenari, aiutandoti a comprendere le applicazioni pratiche di questa funzionalità:
La cache dei prompt (sia automatica che esplicita) è idonea per ZDR. Anthropic non memorizza il testo grezzo dei tuoi prompt o delle risposte di Claude.
Le rappresentazioni della cache KV (key-value) e gli hash crittografici del contenuto memorizzato nella cache sono conservati solo in memoria e non vengono archiviati a riposo. Le voci della cache hanno una durata minima di 5 minuti (standard) o 1 ora (estesa), dopo la quale vengono eliminate prontamente, anche se non immediatamente. Le voci della cache sono isolate tra le organizzazioni e, sulla Claude API, su Claude Platform su AWS e su Microsoft Foundry, tra i workspace all'interno di un'organizzazione.
Per l'idoneità ZDR di tutte le funzionalità, vedi API e conservazione dei dati.
Was this page helpful?