Was this page helpful?
La cache dei prompt ottimizza l'utilizzo dell'API consentendo di riprendere da prefissi specifici nei tuoi prompt. Questo riduce significativamente il tempo di elaborazione e i costi per attività ripetitive o prompt con elementi costanti.
Questa funzionalità è idonea per la Zero Data Retention (ZDR). Quando la tua organizzazione dispone di un accordo ZDR, i dati inviati tramite questa funzionalità non vengono conservati dopo che la risposta dell'API è stata restituita.
Esistono due modi per abilitare la cache dei prompt:
cache_control al livello superiore della tua richiesta. Il sistema applica automaticamente il breakpoint di cache all'ultimo blocco memorizzabile e lo sposta in avanti man mano che le conversazioni crescono. Ideale per conversazioni multi-turno in cui la cronologia crescente dei messaggi deve essere memorizzata automaticamente nella cache.cache_control direttamente sui singoli blocchi di contenuto per un controllo granulare su cosa esattamente viene memorizzato nella cache.Il modo più semplice per iniziare è con il caching automatico:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
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 il caching automatico, 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 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 tabella seguente mostra il prezzo per milione di token per ciascun 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 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 |
La tabella sopra riflette i seguenti moltiplicatori di prezzo per la cache dei prompt:
Questi moltiplicatori si combinano con altri modificatori di prezzo come lo sconto della Batch API e la residenza dei dati. Consulta prezzi per i dettagli completi.
La cache dei prompt (sia automatica che esplicita) è supportata su tutti i modelli Claude attivi.
Il caching automatico è 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 richiesta. Il sistema applica automaticamente il breakpoint di cache all'ultimo blocco memorizzabile.
Con il caching automatico, 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 di 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, il caching automatico 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" } }Il caching automatico è 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 il caching automatico gestisce la conversazione:
{
"model": "claude-opus-4-8",
"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?" }]
}Il caching automatico utilizza la stessa infrastruttura di caching sottostante. Prezzi, soglie minime di token, 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, il caching automatico non ha effetto.cache_control esplicito con un TTL diverso, l'API restituisce un errore 400.Il caching automatico è disponibile sull'API Claude, Claude Platform on AWS e Microsoft Foundry (beta). Bedrock e Vertex AI non supportano il caching automatico.
Per un maggiore controllo sul caching, 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 quando hai bisogno di un controllo granulare su cosa esattamente viene 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 il caching utilizzando il parametro cache_control.
I prefissi di cache vengono creati nel seguente ordine: tools, system, poi messages. Questo ordine forma una gerarchia in cui ogni livello si basa sui precedenti.
Puoi utilizzare 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 questo meccanismo 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 dalla 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 esiste, 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 controlla al massimo 20 posizioni per breakpoint, contando il breakpoint stesso come la prima. Se il sistema non trova alcuna voce corrispondente in quella finestra, il controllo si interrompe (o riprende dal breakpoint esplicito successivo, 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 contenuto stabile dietro il tuo breakpoint e lo memorizza nella cache. Trova 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 leggerà il prefisso memorizzato nella cache. Il caching automatico cade 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.
Conclusione chiave: Posiziona cache_control sull'ultimo blocco il cui prefisso è identico tra le richieste che vuoi 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 semplicemente il controllo su quali sezioni possono essere memorizzate nella cache in modo indipendente.
Sull'API Claude, Claude Platform on AWS, Vertex AI e Microsoft Foundry (beta), la lunghezza minima del prompt memorizzabile nella cache è:
La disponibilità dei modelli varia in base alla piattaforma, così come il minimo per i modelli appena rilasciati: su Amazon Bedrock, la lunghezza minima del prompt memorizzabile nella cache per Claude Fable 5 e Claude Mythos 5 è di 1.024 token.
I prompt più brevi 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, e non verrà restituito alcun errore. Per verificare se un prompt è stato memorizzato nella cache, controlla i campi di utilizzo 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 soddisfaceva il requisito di lunghezza minima).
Se il tuo prompt è appena al di sotto del minimo per il tuo modello e piattaforma, espandere il contenuto memorizzato nella cache per raggiungere la soglia è spesso vantaggioso. 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 di utilizzo 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 utente che assistentemessages.content, nei turni utentemessages.content, sia nei turni utente che assistenteCiascuno di questi elementi può essere memorizzato nella cache, automaticamente o contrassegnandoli con cache_control.
Sebbene la maggior parte dei blocchi di 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 assistente precedenti. Quando memorizzati nella cache in questo modo, CONTANO come token di input quando letti dalla cache.
I sotto-blocchi di contenuto (come le citazioni) non possono essere memorizzati nella cache direttamente. Memorizza invece nella cache il blocco di livello superiore.
Nel caso delle citazioni, i blocchi di contenuto documento di livello superiore che fungono da materiale sorgente per le citazioni possono essere memorizzati nella cache. Questo ti consente di utilizzare efficacemente la cache dei prompt con le citazioni 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 prompt, la cache segue la gerarchia: tools → system → messages. Le modifiche a ciascun livello invalidano quel livello e tutti i livelli successivi.
La tabella seguente mostra quali parti della cache vengono invalidate da diversi tipi di modifiche. ✘ indica che la cache è invalidata, mentre ✓ indica che la cache rimane valida.
| Cosa cambia | Cache strumenti | Cache sistema | Cache messaggi | Impatto |
|---|---|---|---|---|
| Definizioni degli strumenti | ✘ | ✘ | ✘ | Modificare le definizioni degli strumenti (nomi, descrizioni, parametri) invalida l'intera cache |
| Attivazione/disattivazione ricerca web | ✓ | ✘ | ✘ | Abilitare/disabilitare la ricerca web modifica il prompt di sistema |
| Attivazione/disattivazione citazioni | ✓ | ✘ | ✘ | Abilitare/disabilitare le citazioni modifica il prompt di sistema |
| Impostazione velocità | ✓ | ✘ | ✘ | Passare tra speed: "fast" e velocità standard invalida le cache di sistema e messaggi |
Su Claude Opus 4.8, puoi aggiungere una nuova istruzione di sistema a metà conversazione senza invalidare le cache di sistema o 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. Consulta Messaggi di sistema a metà conversazione.
Monitora le prestazioni della cache utilizzando questi campi di risposta dell'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 (ovvero, 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 (letto dalla cache), 0 token di nuovo contenuto in fase di memorizzazione nella cache e 50 token nel tuo messaggio utente (dopo il breakpoint di cache):
cache_read_input_tokens: 100.000Quando usi il pensiero esteso con la cache dei prompt, i blocchi di pensiero hanno un comportamento speciale:
Caching automatico 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 indietro i blocchi di pensiero 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 la pianificazione del budget di token.
Pattern 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 la documentazione sul pensiero esteso.
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 workspace all'interno della stessa organizzazione. Questo si applica all'API Claude, Claude Platform on AWS e Microsoft Foundry (beta); Bedrock e Vertex AI mantengono l'isolamento della cache a livello di organizzazione. Se utilizzi più workspace, rivedi la tua strategia di caching per tenere conto di questa differenza.
Isolamento per organizzazione e workspace: Le cache sono isolate tra organizzazioni. Organizzazioni diverse non condividono mai le cache, anche se utilizzano prompt identici. A partire dal 5 febbraio 2026, le cache sono isolate anche per workspace all'interno di un'organizzazione sull'API Claude, Claude Platform on AWS e Microsoft Foundry (beta); Bedrock e Vertex AI continuano a utilizzare 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 di 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 imprevisti:
La diagnostica della cache (beta) fa sì che l'API confronti richieste consecutive e riporti esattamente dove il prefisso del prompt è divergente, gestendo automaticamente molti dei passaggi in questo elenco.
cache_control siano nelle stesse posizionitool_choice e l'uso delle immagini 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, interrompendo 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 sull'API Claude, Claude Platform on AWS, Amazon Bedrock, Amazon Bedrock (legacy), Vertex AI e Microsoft Foundry (beta).
Per utilizzare la cache estesa, includi ttl nella definizione cache_control in questo modo:
"cache_control": {
"type": "ephemeral",
"ttl": "1h"
}La risposta includerà 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 il campo cache_creation_input_tokens corrente è uguale alla somma dei valori nell'oggetto cache_creation.
Se hai prompt che vengono utilizzati con cadenza regolare (ovvero, prompt di sistema utilizzati più frequentemente di ogni 5 minuti), continua a utilizzare la cache di 5 minuti, poiché 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. Generalmente vedrai un miglioramento del time-to-first-token per documenti lunghi.
Puoi utilizzare sia controlli cache di 1 ora che 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 (ovvero, una voce di cache di 1 ora deve apparire prima di qualsiasi voce di cache di 5 minuti).
Quando combini 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 3 esempi. Questo rappresenta i token di input di 3 richieste, ciascuna delle quali ha cache hit e cache miss diversi. Ciascuna 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 da cache miss sulla prima interazione dell'utente, riducendo il "time-to-first-token" (tempo al primo token), o TTFT, per applicazioni sensibili alla latenza.
Imposta max_tokens: 0 nella tua richiesta. L'API legge il tuo prompt nel modello e scrive la cache a qualsiasi breakpoint 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 breakpoint cache_control sull'ultimo blocco condiviso con la richiesta di follow-up (tipicamente il tuo prompt di sistema o le definizioni degli strumenti), non sul messaggio utente segnaposto. Altrimenti la voce di cache è associata al segnaposto e la richiesta di follow-up non la troverà. Questo significa utilizzare un breakpoint di cache esplicito anziché il caching automatico, poiché il caching automatico posiziona il breakpoint sull'ultimo blocco, che qui è il segnaposto. Il messaggio utente segnaposto può essere qualsiasi stringa con contenuto non composto solo da spazi (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 cache se il prefisso non è già memorizzato nella 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.
L'API restituisce un array content vuoto:
{
"id": "msg_01XFDUDYJgAACzvnptvVoYEL",
"type": "message",
"role": "assistant",
"content": [],
"model": "claude-opus-4-8",
"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 utente reali dopo il completamento del pre-riscaldamento:
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-4-8",
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-4-8",
max_tokens=1024,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": user_message}],
)
# Riscalda la cache prima che arrivi qualsiasi traffico utente.
prewarm_cache()
# In seguito, quando l'utente invia un messaggio, il prefisso del prompt di sistema è già nella cache.
response = respond("How do I implement a binary search tree?")
print(response.content[0].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 calda. Per intervalli più lunghi tra le richieste utente, usa invece la durata della cache di 1 ora.
Una richiesta con max_tokens: 0 viene rifiutata con un invalid_request_error se è impostato uno qualsiasi dei seguenti parametri, poiché ciascuno 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-warming mira al time-to-first-token, che non si applica all'elaborazione batch, e una voce di cache scritta durante l'elaborazione batch probabilmente scadrebbe prima dell'esecuzione della richiesta successiva.
Prima che max_tokens: 0 fosse disponibile, alcune applicazioni utilizzavano chiamate di warm-up con max_tokens: 1 per ottenere lo stesso effetto. L'approccio max_tokens: 0 è preferibile: non viene prodotto alcun output, quindi non c'è nessuna 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 pattern 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 in modo persistente. Le voci memorizzate nella 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, sull'API Claude, Claude Platform su AWS e Microsoft Foundry (beta), tra i workspace all'interno di un'organizzazione.
Per l'idoneità ZDR su tutte le funzionalità, consulta API e conservazione dei dati.
| 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 (deprecato) | $15 / MTok | $18,75 / MTok | $30 / MTok | $1,50 / MTok | $75 / 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 (deprecato) | $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 Vertex AI) | $0,80 / MTok | $1 / MTok | $1,60 / MTok | $0,08 / MTok | $4 / MTok |
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
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())| Scelta strumento | ✓ | ✓ | ✘ | Le modifiche al parametro tool_choice influenzano solo i blocchi messaggio |
| Immagini | ✓ | ✓ | ✘ | Aggiungere/rimuovere immagini in qualsiasi punto del prompt influenza i blocchi messaggio |
| Parametri di pensiero | ✓ | ✓ | ✘ | Le modifiche alle impostazioni del pensiero esteso (abilita/disabilita, budget) influenzano i blocchi messaggio |
| Risultati non-strumento passati a richieste di pensiero esteso | ✓ | ✓ | Specifico per 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 tutti i messaggi che seguono quei blocchi di pensiero vengono rimossi dalla cache (✘). Per maggiori dettagli, consulta Caching con blocchi di pensiero. |
cache_creation_input_tokensinput_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 il caching in modo efficace.
client = anthropic.Anthropic()
# Esegui questo prima dell'arrivo degli utenti per riscaldare la cache condivisa del prompt di sistema.
prewarm = client.messages.create(
model="claude-opus-4-8",
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)