Per la maggior parte dei casi d'uso, la compattazione lato server è la strategia principale per gestire il contesto nelle conversazioni di lunga durata. Le strategie in questa pagina sono utili per scenari specifici in cui è necessario un controllo più granulare su quale contenuto viene eliminato.
La modifica del contesto consente di eliminare selettivamente contenuti specifici dalla cronologia della conversazione man mano che cresce. Oltre a ottimizzare i costi e rimanere entro i limiti, si tratta di curare attivamente ciò che Claude vede: il contesto è una risorsa finita con rendimenti decrescenti, e i contenuti irrilevanti degradano la concentrazione del modello. La modifica del contesto offre un controllo granulare in fase di esecuzione su questa cura. Per i principi più ampi alla base della gestione del contesto, vedere Effective context engineering. Questa pagina tratta:
| Approccio | Dove viene eseguito | Strategie | Come funziona |
|---|---|---|---|
| Lato server | API | Eliminazione dei risultati degli strumenti (clear_tool_uses_20250919)Eliminazione dei blocchi di pensiero ( clear_thinking_20251015) | Applicato prima che il prompt raggiunga Claude. Elimina contenuti specifici dalla cronologia della conversazione. Ogni strategia può essere configurata indipendentemente. |
| Lato client | SDK | Compattazione | Disponibile negli SDK Python e TypeScript quando si utilizza tool_runner. Genera un riassunto e sostituisce l'intera cronologia della conversazione. Vedere Compattazione lato client di seguito. |
La modifica del contesto è attualmente in beta con supporto per l'eliminazione dei risultati degli strumenti e l'eliminazione dei blocchi di pensiero. Per abilitarla, utilizza l'intestazione beta context-management-2025-06-27 nelle tue richieste API.
Condividi il feedback su questa funzionalità tramite il modulo di feedback.
This feature is eligible for Zero Data Retention (ZDR). When your organization has a ZDR arrangement, data sent through this feature is not stored after the API response is returned.
La strategia clear_tool_uses_20250919 elimina i risultati degli strumenti quando il contesto della conversazione supera la soglia configurata. Questo è particolarmente utile per i flussi di lavoro agentici con uso intensivo degli strumenti. I risultati degli strumenti più vecchi (come contenuti di file o risultati di ricerca) non sono più necessari una volta che Claude li ha elaborati.
Quando attivata, l'API elimina automaticamente i risultati degli strumenti più vecchi in ordine cronologico. Ogni risultato eliminato viene sostituito con un testo segnaposto in modo che Claude sappia che è stato rimosso. Per impostazione predefinita, vengono eliminati solo i risultati degli strumenti. Puoi facoltativamente eliminare sia i risultati degli strumenti che le chiamate agli strumenti (i parametri di utilizzo degli strumenti) impostando clear_tool_inputs su true.
La strategia clear_thinking_20251015 gestisce i blocchi thinking nelle conversazioni quando il pensiero esteso è abilitato. Questa strategia ti dà il controllo sulla preservazione del pensiero: puoi scegliere di mantenere più blocchi di pensiero per mantenere la continuità del ragionamento, o eliminarli in modo più aggressivo per risparmiare spazio nel contesto.
Comportamento predefinito: Quando il pensiero esteso è abilitato senza configurare la strategia clear_thinking_20251015, l'API mantiene automaticamente solo i blocchi di pensiero dell'ultimo turno dell'assistente (equivalente a keep: {type: "thinking_turns", value: 1}).
Per massimizzare i cache hit, preserva tutti i blocchi di pensiero impostando keep: "all".
Un turno di conversazione dell'assistente può includere più blocchi di contenuto (ad esempio quando si utilizzano strumenti) e più blocchi di pensiero (ad esempio con il pensiero interleaved).
La modifica del contesto viene applicata lato server prima che il prompt raggiunga Claude. La tua applicazione client mantiene la cronologia completa e non modificata della conversazione. Non è necessario sincronizzare lo stato del client con la versione modificata. Continua a gestire la tua cronologia completa della conversazione localmente come faresti normalmente.
L'interazione della modifica del contesto con il caching dei prompt varia in base alla strategia:
Eliminazione dei risultati degli strumenti: Invalida i prefissi del prompt memorizzati nella cache quando il contenuto viene eliminato. Per tenerne conto, elimina abbastanza token da rendere conveniente l'invalidazione della cache. Usa il parametro clear_at_least per garantire che venga eliminato un numero minimo di token ogni volta. Incorrerai in costi di scrittura della cache ogni volta che il contenuto viene eliminato, ma le richieste successive possono riutilizzare il prefisso appena memorizzato nella cache.
Eliminazione dei blocchi di pensiero: Quando i blocchi di pensiero vengono mantenuti nel contesto (non eliminati), la cache del prompt viene preservata, consentendo cache hit e riducendo i costi dei token di input. Quando i blocchi di pensiero vengono eliminati, la cache viene invalidata nel punto in cui avviene l'eliminazione. Configura il parametro keep in base al fatto che tu voglia dare priorità alle prestazioni della cache o alla disponibilità della finestra di contesto.
La modifica del contesto è disponibile su:
claude-opus-4-6)claude-opus-4-5-20251101)claude-opus-4-1-20250805)claude-opus-4-20250514)claude-sonnet-4-6)claude-sonnet-4-5-20250929)claude-sonnet-4-20250514)claude-haiku-4-5-20251001)Il modo più semplice per abilitare l'eliminazione dei risultati degli strumenti è specificare solo il tipo di strategia. Tutte le altre opzioni di configurazione utilizzano i loro valori predefiniti:
Puoi personalizzare il comportamento di eliminazione dei risultati degli strumenti con parametri aggiuntivi:
Abilita l'eliminazione dei blocchi di pensiero per gestire efficacemente il contesto e il caching dei prompt quando il pensiero esteso è abilitato:
La strategia clear_thinking_20251015 supporta la seguente configurazione:
| Opzione di configurazione | Predefinito | Descrizione |
|---|---|---|
keep | {type: "thinking_turns", value: 1} | Definisce quanti turni recenti dell'assistente con blocchi di pensiero preservare. Usa {type: "thinking_turns", value: N} dove N deve essere > 0 per mantenere gli ultimi N turni, o "all" per mantenere tutti i blocchi di pensiero. |
Configurazioni di esempio:
Mantieni i blocchi di pensiero degli ultimi 3 turni dell'assistente:
{
"type": "clear_thinking_20251015",
"keep": {
"type": "thinking_turns",
"value": 3
}
}Mantieni tutti i blocchi di pensiero (massimizza i cache hit):
{
"type": "clear_thinking_20251015",
"keep": "all"
}Puoi utilizzare sia l'eliminazione dei blocchi di pensiero che l'eliminazione dei risultati degli strumenti insieme:
Quando si utilizzano più strategie, la strategia clear_thinking_20251015 deve essere elencata per prima nell'array edits.
| Opzione di configurazione | Predefinito | Descrizione |
|---|---|---|
trigger | 100.000 token di input | Definisce quando la strategia di modifica del contesto si attiva. Una volta che il prompt supera questa soglia, inizierà l'eliminazione. Puoi specificare questo valore in input_tokens o tool_uses. |
keep | 3 utilizzi degli strumenti | Definisce quante coppie recenti di utilizzo/risultato degli strumenti mantenere dopo l'eliminazione. L'API rimuove prima le interazioni con gli strumenti più vecchie, preservando quelle più recenti. |
clear_at_least | Nessuno | Garantisce che venga eliminato un numero minimo di token ogni volta che la strategia si attiva. Se l'API non riesce a eliminare almeno la quantità specificata, la strategia non verrà applicata. Questo aiuta a determinare se l'eliminazione del contesto vale la pena di invalidare la cache del prompt. |
exclude_tools | Nessuno | Elenco dei nomi degli strumenti i cui utilizzi e risultati non devono mai essere eliminati. Utile per preservare il contesto importante. |
Puoi vedere quali modifiche al contesto sono state applicate alla tua richiesta utilizzando il campo di risposta context_management, insieme a statistiche utili sul contenuto e sui token di input eliminati.
{
"id": "msg_013Zva2CMHLNnXjNJJKqJ2EF",
"type": "message",
"role": "assistant",
"content": [
// ...
],
"usage": {
// ...
},
"context_management": {
"applied_edits": [
// Quando si utilizza `clear_thinking_20251015`
{
"type": "clear_thinking_20251015",
"cleared_thinking_turns": 3,
"cleared_input_tokens": 15000
},
// Quando si utilizza `clear_tool_uses_20250919`
{
"type": "clear_tool_uses_20250919",
"cleared_tool_uses": 8,
"cleared_input_tokens": 50000
}
]
}
}Per le risposte in streaming, le modifiche al contesto saranno incluse nell'evento finale message_delta:
{
"type": "message_delta",
"delta": {
"stop_reason": "end_turn",
"stop_sequence": null
},
"usage": {
"output_tokens": 1024
},
"context_management": {
"applied_edits": [
// ...
]
}
}L'endpoint di conteggio dei token supporta la gestione del contesto, consentendoti di visualizzare in anteprima quanti token utilizzerà il tuo prompt dopo l'applicazione della modifica del contesto.
{
"input_tokens": 25000,
"context_management": {
"original_input_tokens": 70000
}
}La risposta mostra sia il conteggio finale dei token dopo l'applicazione della gestione del contesto (input_tokens) che il conteggio originale dei token prima di qualsiasi eliminazione (original_input_tokens).
La modifica del contesto può essere combinata con lo strumento memory. Quando il contesto della conversazione si avvicina alla soglia di eliminazione configurata, Claude riceve un avviso automatico per preservare le informazioni importanti. Questo consente a Claude di salvare i risultati degli strumenti o il contesto nei suoi file di memoria prima che vengano eliminati dalla cronologia della conversazione.
Questa combinazione ti consente di:
Ad esempio, in un flusso di lavoro di modifica dei file in cui Claude esegue molte operazioni, Claude può riassumere le modifiche completate nei file di memoria man mano che il contesto cresce. Quando i risultati degli strumenti vengono eliminati, Claude mantiene l'accesso a quelle informazioni attraverso il suo sistema di memoria e può continuare a lavorare efficacemente.
Per utilizzare entrambe le funzionalità insieme, abilitale nella tua richiesta API:
La compattazione lato server è raccomandata rispetto alla compattazione SDK. La compattazione lato server gestisce la gestione del contesto automaticamente con minore complessità di integrazione, migliore calcolo dell'utilizzo dei token e nessuna limitazione lato client. Usa la compattazione SDK solo se hai specificamente bisogno del controllo lato client sul processo di riepilogo.
La compattazione è disponibile negli SDK Python e TypeScript quando si utilizza il metodo tool_runner.
La compattazione è una funzionalità SDK che gestisce automaticamente il contesto della conversazione generando riassunti quando l'utilizzo dei token diventa troppo grande. A differenza delle strategie di modifica del contesto lato server che eliminano il contenuto, la compattazione istruisce Claude a riassumere la cronologia della conversazione, quindi sostituisce l'intera cronologia con quel riassunto. Questo consente a Claude di continuare a lavorare su attività di lunga durata che altrimenti supererebbero la finestra di contesto.
Quando la compattazione è abilitata, l'SDK monitora l'utilizzo dei token dopo ogni risposta del modello:
input_tokens + cache_creation_input_tokens + cache_read_input_tokens + output_tokens.<summary></summary>.Aggiungi compaction_control alla tua chiamata tool_runner:
Man mano che la conversazione cresce, la cronologia dei messaggi si accumula:
Prima della compattazione (avvicinandosi a 100k token):
[
{ "role": "user", "content": "Analyze all files and write a report..." },
{ "role": "assistant", "content": "I'll help. Let me start by reading..." },
{
"role": "user",
"content": [{ "type": "tool_result", "tool_use_id": "...", "content": "..." }]
},
{ "role": "assistant", "content": "Based on file1.txt, I see..." },
{
"role": "user",
"content": [{ "type": "tool_result", "tool_use_id": "...", "content": "..." }]
},
{ "role": "assistant", "content": "After analyzing file2.txt..." }
// ... altri 50 scambi come questo ...
]Quando i token superano la soglia, l'SDK inietta una richiesta di riepilogo e Claude genera un riassunto. L'intera cronologia viene quindi sostituita:
Dopo la compattazione (tornando a ~2-3k token):
[
{
"role": "assistant",
"content": "# Task Overview\nThe user requested analysis of directory files to produce a summary report...\n\n# Current State\nAnalyzed 52 files across 3 subdirectories. Key findings documented in report.md...\n\n# Important Discoveries\n- Configuration files use YAML format\n- Found 3 deprecated dependencies\n- Test coverage at 67%\n\n# Next Steps\n1. Analyze remaining files in /src/legacy\n2. Complete final report sections...\n\n# Context to Preserve\nUser prefers markdown format with executive summary first..."
}
]Claude continua a lavorare da questo riassunto come se fosse la cronologia originale della conversazione.
| Parametro | Tipo | Obbligatorio | Predefinito | Descrizione |
|---|---|---|---|---|
enabled | boolean | Sì | - | Se abilitare la compattazione automatica |
context_token_threshold | number | No | 100.000 | Conteggio dei token al quale si attiva la compattazione |
model | string | No | Stesso del modello principale | Modello da utilizzare per generare i riassunti |
summary_prompt | string | No | Vedere di seguito | Prompt personalizzato per la generazione del riassunto |
La soglia determina quando avviene la compattazione. Una soglia più bassa significa compattazioni più frequenti con finestre di contesto più piccole. Una soglia più alta consente più contesto ma rischia di raggiungere i limiti.
# Compattazione più frequente per scenari con memoria limitata
compaction_control = {"enabled": True, "context_token_threshold": 50000}
# Compattazione meno frequente quando hai bisogno di più contesto
compaction_control = {"enabled": True, "context_token_threshold": 150000}Puoi utilizzare un modello più veloce o meno costoso per generare i riassunti:
compaction_control = {
"enabled": True,
"context_token_threshold": 100000,
"model": "claude-haiku-4-5",
}Puoi fornire un prompt personalizzato per esigenze specifiche del dominio. Il tuo prompt dovrebbe istruire Claude a racchiudere il suo riassunto nei tag <summary></summary>.
compaction_control = {
"enabled": True,
"context_token_threshold": 100000,
"summary_prompt": """Riassumi la ricerca condotta finora, includendo:
- Fonti consultate e risultati chiave
- Domande a cui è stata data risposta e incognite rimanenti
- Prossimi passi raccomandati
Racchiudi il tuo riassunto nei tag <summary></summary>.""",
}Il prompt di riepilogo integrato istruisce Claude a creare un riepilogo di continuazione strutturato che include:
Questa struttura consente a Claude di riprendere il lavoro in modo efficiente senza perdere il contesto importante o ripetere gli errori.
La compattazione richiede una considerazione speciale quando si utilizzano strumenti lato server come la ricerca web o il recupero web.
Quando si utilizzano strumenti lato server, l'SDK potrebbe calcolare in modo errato l'utilizzo dei token, causando l'attivazione della compattazione al momento sbagliato.
Ad esempio, dopo un'operazione di ricerca web, la risposta API potrebbe mostrare:
{
"usage": {
"input_tokens": 63000,
"cache_read_input_tokens": 270000,
"output_tokens": 1400
}
}L'SDK calcola l'utilizzo totale come 63.000 + 270.000 = 333.000 token. Tuttavia, il valore cache_read_input_tokens include le letture accumulate da più chiamate API interne effettuate dallo strumento lato server, non il contesto effettivo della conversazione. La lunghezza reale del contesto potrebbe essere solo i 63.000 input_tokens, ma l'SDK vede 333k e attiva la compattazione prematuramente.
Soluzioni alternative:
Quando la compattazione viene attivata mentre è in attesa una risposta di utilizzo degli strumenti, l'SDK rimuove il blocco di utilizzo degli strumenti dalla cronologia dei messaggi prima di generare il riepilogo. Claude rieseguirà la chiamata allo strumento dopo aver ripreso dal riepilogo, se ancora necessario.
Abilita il logging per tracciare quando si verifica la compattazione:
import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger("anthropic.lib.tools").setLevel(logging.INFO)
# I log mostreranno:
# INFO: Token usage 105000 has exceeded the threshold of 100000. Performing compaction.
# INFO: Compaction complete. New token usage: 2500Casi d'uso ideali:
Casi d'uso meno ideali:
Was this page helpful?
curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--header "anthropic-beta: context-management-2025-06-27" \
--data '{
"model": "claude-opus-4-6",
"max_tokens": 4096,
"messages": [
{
"role": "user",
"content": "Search for recent developments in AI"
}
],
"tools": [
{
"type": "web_search_20250305",
"name": "web_search"
}
],
"context_management": {
"edits": [
{"type": "clear_tool_uses_20250919"}
]
}
}'curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--header "anthropic-beta: context-management-2025-06-27" \
--data '{
"model": "claude-opus-4-6",
"max_tokens": 4096,
"messages": [
{
"role": "user",
"content": "Create a simple command line calculator app using Python"
}
],
"tools": [
{
"type": "text_editor_20250728",
"name": "str_replace_based_edit_tool",
"max_characters": 10000
},
{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 3
}
],
"context_management": {
"edits": [
{
"type": "clear_tool_uses_20250919",
"trigger": {
"type": "input_tokens",
"value": 30000
},
"keep": {
"type": "tool_uses",
"value": 3
},
"clear_at_least": {
"type": "input_tokens",
"value": 5000
},
"exclude_tools": ["web_search"]
}
]
}
}'curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--header "anthropic-beta: context-management-2025-06-27" \
--data '{
"model": "claude-opus-4-6",
"max_tokens": 1024,
"messages": [/* ... */],
"thinking": {
"type": "enabled",
"budget_tokens": 10000
},
"context_management": {
"edits": [
{
"type": "clear_thinking_20251015",
"keep": {
"type": "thinking_turns",
"value": 2
}
}
]
}
}'response = client.beta.messages.create(
model="claude-opus-4-6",
max_tokens=1024,
messages=[...],
thinking={"type": "enabled", "budget_tokens": 10000},
tools=[...],
betas=["context-management-2025-06-27"],
context_management={
"edits": [
{
"type": "clear_thinking_20251015",
"keep": {"type": "thinking_turns", "value": 2},
},
{
"type": "clear_tool_uses_20250919",
"trigger": {"type": "input_tokens", "value": 50000},
"keep": {"type": "tool_uses", "value": 5},
},
]
},
)clear_tool_inputs | false | Controlla se i parametri della chiamata allo strumento vengono eliminati insieme ai risultati degli strumenti. Per impostazione predefinita, vengono eliminati solo i risultati degli strumenti mantenendo visibili le chiamate originali agli strumenti di Claude. |
curl https://api.anthropic.com/v1/messages/count_tokens \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--header "anthropic-beta: context-management-2025-06-27" \
--data '{
"model": "claude-opus-4-6",
"messages": [
{
"role": "user",
"content": "Continue our conversation..."
}
],
"tools": [...],
"context_management": {
"edits": [
{
"type": "clear_tool_uses_20250919",
"trigger": {
"type": "input_tokens",
"value": 30000
},
"keep": {
"type": "tool_uses",
"value": 5
}
}
]
}
}'response = client.beta.messages.create(
model="claude-opus-4-6",
max_tokens=4096,
messages=[...],
tools=[
{"type": "memory_20250818", "name": "memory"},
# I tuoi altri strumenti
],
betas=["context-management-2025-06-27"],
context_management={"edits": [{"type": "clear_tool_uses_20250919"}]},
)import anthropic
client = anthropic.Anthropic()
runner = client.beta.messages.tool_runner(
model="claude-opus-4-6",
max_tokens=4096,
tools=[...],
messages=[
{
"role": "user",
"content": "Analyze all the files in this directory and write a summary report.",
}
],
compaction_control={"enabled": True, "context_token_threshold": 100000},
)
for message in runner:
print(f"Token utilizzati: {message.usage.input_tokens}")
final = runner.until_done()