Was this page helpful?
Cette fonctionnalité est éligible à la Zero Data Retention (ZDR). Lorsque votre organisation dispose d'un accord ZDR, les données envoyées via cette fonctionnalité ne sont pas stockées après le retour de la réponse de l'API.
Pour la plupart des cas d'usage, la compaction côté serveur constitue la stratégie principale pour gérer le contexte dans les conversations de longue durée. Les stratégies présentées sur cette page sont utiles pour des scénarios spécifiques où vous avez besoin d'un contrôle plus fin sur le contenu à effacer.
L'édition du contexte vous permet d'effacer sélectivement du contenu spécifique de l'historique de conversation à mesure qu'il s'accroît. Au-delà de l'optimisation des coûts et du respect des limites, il s'agit de sélectionner activement ce que Claude voit : le contexte est une ressource finie avec des rendements décroissants, et le contenu non pertinent dégrade la concentration du modèle. L'édition du contexte vous offre un contrôle fin à l'exécution sur cette sélection. Pour les principes plus généraux de la gestion du contexte, consultez Effective context engineering. Cette page couvre :
| Approche | Lieu d'exécution | Stratégies | Fonctionnement |
|---|---|---|---|
| Côté serveur | API | Effacement des résultats d'outils (clear_tool_uses_20250919)Effacement des blocs de réflexion ( clear_thinking_20251015) | Appliqué avant que le prompt n'atteigne Claude. Efface du contenu spécifique de l'historique de conversation. Chaque stratégie peut être configurée indépendamment. |
| Côté client | SDK | Compaction | Disponible dans les SDK Python, TypeScript et Ruby lors de l'utilisation de tool_runner. Génère un résumé et remplace l'historique complet de la conversation. Voir Compaction côté client. |
L'édition du contexte est en version bêta avec prise en charge de l'effacement des résultats d'outils et de l'effacement des blocs de réflexion. Pour l'activer, utilisez l'en-tête bêta context-management-2025-06-27 dans vos requêtes API.
Partagez vos commentaires sur cette fonctionnalité via le formulaire de commentaires.
La stratégie clear_tool_uses_20250919 efface les résultats d'outils lorsque le contexte de conversation dépasse le seuil que vous avez configuré. Ceci est particulièrement utile pour les workflows agentiques avec une utilisation d'outils intensive. Les anciens résultats d'outils (comme le contenu de fichiers ou les résultats de recherche) ne sont plus nécessaires une fois que Claude les a traités.
Lorsqu'elle est activée, l'API efface automatiquement les résultats d'outils les plus anciens dans l'ordre chronologique. L'API remplace chaque résultat effacé par un texte de substitution afin que Claude sache qu'il a été supprimé. Par défaut, seuls les résultats d'outils sont effacés. Vous pouvez éventuellement effacer à la fois les résultats d'outils et les appels d'outils (les paramètres d'utilisation d'outils) en définissant clear_tool_inputs sur true.
La stratégie clear_thinking_20251015 gère les blocs thinking dans les conversations lorsque la réflexion étendue est activée. Cette stratégie vous donne le contrôle sur la préservation de la réflexion : vous pouvez choisir de conserver davantage de blocs de réflexion pour maintenir la continuité du raisonnement, ou de les effacer plus agressivement pour économiser de l'espace de contexte.
Comportement par défaut : La valeur par défaut varie selon la classe de modèle.
| Classe de modèle | Conserver toute la réflexion antérieure | Conserver uniquement la réflexion du dernier tour |
|---|---|---|
| Opus | Claude Opus 4.5 et versions ultérieures | Claude Opus 4.1 (obsolète) et versions antérieures |
| Sonnet | Claude Sonnet 4.6 et versions ultérieures | Claude Sonnet 4.5 et versions antérieures |
| Haiku | (aucun) | Tous les modèles jusqu'à Claude Haiku 4.5 inclus |
Utilisez cette stratégie pour remplacer le comportement par défaut. Si votre code s'exécute sur plusieurs niveaux de modèles, définissez keep explicitement plutôt que de vous fier à la valeur par défaut propre à chaque modèle.
Un tour de conversation de l'assistant peut inclure plusieurs blocs de contenu (par exemple, lors de l'utilisation d'outils) et plusieurs blocs de réflexion (par exemple, avec la réflexion entrelacée).
L'édition du contexte est appliquée côté serveur avant que le prompt n'atteigne Claude. Votre application cliente conserve l'historique de conversation complet et non modifié. Vous n'avez pas besoin de synchroniser l'état de votre client avec la version éditée. Continuez à gérer votre historique de conversation complet localement comme vous le feriez normalement.
L'interaction de l'édition du contexte avec la mise en cache des prompts varie selon la stratégie :
Effacement des résultats d'outils : Invalide les préfixes de prompt mis en cache lorsque du contenu est effacé. Pour en tenir compte, effacez suffisamment de tokens pour que l'invalidation du cache en vaille la peine. Utilisez le paramètre clear_at_least pour garantir qu'un nombre minimum de tokens est effacé à chaque fois. Vous encourrez des coûts d'écriture de cache chaque fois que du contenu est effacé, mais les requêtes suivantes peuvent réutiliser le préfixe nouvellement mis en cache.
Effacement des blocs de réflexion : Lorsque les blocs de réflexion sont conservés dans le contexte (non effacés), le cache de prompt est préservé, ce qui permet des correspondances de cache et réduit les coûts de tokens d'entrée. Lorsque les blocs de réflexion sont effacés, le cache est invalidé au point où l'effacement se produit. Configurez le paramètre keep selon que vous souhaitez privilégier les performances du cache ou la disponibilité de la fenêtre de contexte.
L'édition du contexte est disponible sur tous les modèles Claude pris en charge.
La façon la plus simple d'activer l'effacement des résultats d'outils est de spécifier uniquement le type de stratégie. Toutes les autres options de configuration utilisent leurs valeurs par défaut :
Vous pouvez personnaliser le comportement d'effacement des résultats d'outils avec des paramètres supplémentaires :
Activez l'effacement des blocs de réflexion pour gérer efficacement le contexte et la mise en cache des prompts lorsque la réflexion étendue est activée :
La stratégie clear_thinking_20251015 prend en charge la configuration suivante :
| Option de configuration | Valeur par défaut | Description |
|---|---|---|
keep | Spécifique au modèle | Définit le nombre de tours récents de l'assistant avec des blocs de réflexion à préserver. Utilisez {type: "thinking_turns", value: N} où N doit être > 0 pour conserver les N derniers tours, ou "all" pour conserver tous les blocs de réflexion. Opus 4.5+ et Sonnet 4.6+ : tous les tours. Opus/Sonnet antérieurs et tous les Haiku : dernier tour uniquement. |
Exemples de configurations :
Conserver les blocs de réflexion des 3 derniers tours de l'assistant :
Conserver tous les blocs de réflexion (maximise les correspondances de cache) :
Vous pouvez utiliser simultanément l'effacement des blocs de réflexion et l'effacement des résultats d'outils :
Lors de l'utilisation de plusieurs stratégies, la stratégie clear_thinking_20251015 doit être listée en premier dans le tableau edits.
| Option de configuration | Valeur par défaut | Description |
|---|---|---|
trigger | 100 000 tokens d'entrée | Définit quand la stratégie d'édition du contexte s'active. Une fois que le prompt dépasse ce seuil, l'effacement commence. Vous pouvez spécifier cette valeur en input_tokens ou en tool_uses. |
keep | 3 utilisations d'outils | Définit le nombre de paires récentes utilisation/résultat d'outil à conserver après l'effacement. L'API supprime d'abord les interactions d'outils les plus anciennes, en préservant les plus récentes. |
clear_at_least | Aucune | Garantit qu'un nombre minimum de tokens est effacé chaque fois que la stratégie s'active. Si l'API ne peut pas effacer au moins la quantité spécifiée, la stratégie ne sera pas appliquée. Cela aide à déterminer si l'effacement du contexte vaut la peine d'invalider votre cache de prompt. |
exclude_tools | Aucune | Liste des noms d'outils dont les utilisations et résultats ne doivent jamais être effacés. Utile pour préserver un contexte important. |
Vous pouvez voir quelles éditions de contexte ont été appliquées à votre requête en utilisant le champ de réponse context_management, ainsi que des statistiques utiles sur le contenu et les tokens d'entrée effacés.
{
"id": "msg_013Zva2CMHLNnXjNJJKqJ2EF",
"type": "message",
"role": "assistant",
"content": [
// ...
],
"usage": {
// ...
},
"context_management": {
"applied_edits": [
// When using `clear_thinking_20251015`
{
"type": "clear_thinking_20251015",
"cleared_thinking_turns": 3,
"cleared_input_tokens": 15000
},
// When using `clear_tool_uses_20250919`
{
"type": "clear_tool_uses_20250919",
"cleared_tool_uses": 8,
"cleared_input_tokens": 50000
}
]
}
}Pour les réponses en streaming, les éditions de contexte sont incluses dans l'événement final message_delta :
{
"type": "message_delta",
"delta": {
"stop_reason": "end_turn",
"stop_sequence": null
},
"usage": {
"output_tokens": 1024
},
"context_management": {
"applied_edits": [
// ...
]
}
}Le point de terminaison de comptage de tokens prend en charge la gestion du contexte, ce qui vous permet de prévisualiser le nombre de tokens que votre prompt utilisera après l'application de l'édition du contexte.
{
"input_tokens": 25000,
"context_management": {
"original_input_tokens": 70000
}
}La réponse affiche à la fois le nombre final de tokens après l'application de la gestion du contexte (input_tokens) et le nombre de tokens original avant tout effacement (original_input_tokens).
L'édition du contexte peut être combinée avec l'outil de mémoire. Lorsque le contexte de votre conversation approche du seuil d'effacement configuré, Claude reçoit un avertissement automatique pour préserver les informations importantes. Cela permet à Claude d'enregistrer les résultats d'outils ou le contexte dans ses fichiers de mémoire avant qu'ils ne soient effacés de l'historique de conversation.
Cette combinaison vous permet de :
Par exemple, dans un workflow d'édition de fichiers où Claude effectue de nombreuses opérations, Claude peut résumer les modifications terminées dans des fichiers de mémoire à mesure que le contexte s'accroît. Lorsque les résultats d'outils sont effacés, Claude conserve l'accès à ces informations via son système de mémoire et peut continuer à travailler efficacement.
Pour utiliser les deux fonctionnalités ensemble, activez-les dans votre requête API :
Pour la référence complète de l'outil de mémoire, y compris les commandes et les exemples, consultez Outil de mémoire.
Anthropic recommande la compaction côté serveur plutôt que la compaction SDK. La compaction côté serveur gère automatiquement la gestion du contexte avec moins de complexité d'intégration, un meilleur calcul de l'utilisation des tokens et aucune limitation côté client. Utilisez la compaction SDK uniquement si vous avez spécifiquement besoin d'un contrôle côté client sur le processus de résumé.
Le paramètre compaction_control est obsolète dans les SDK Python, TypeScript et Ruby et sera supprimé dans une version future. Les SDK émettent un avertissement d'obsolescence lorsqu'il est activé. Pour utiliser la compaction côté serveur avec un tool runner, passez l'édition compact_20260112 dans le paramètre context_management de la requête.
La compaction est disponible dans les SDK Python, TypeScript et Ruby lors de l'utilisation de la méthode tool_runner.
La compaction est une fonctionnalité du SDK qui gère automatiquement le contexte de conversation en générant des résumés lorsque l'utilisation des tokens devient trop importante. Contrairement aux stratégies d'édition du contexte côté serveur qui effacent du contenu, la compaction demande à Claude de résumer l'historique de conversation, puis remplace l'historique complet par ce résumé. Cela permet à Claude de continuer à travailler sur des tâches de longue durée qui dépasseraient autrement la fenêtre de contexte.
Lorsque la compaction est activée, le SDK surveille l'utilisation des tokens après chaque réponse du modèle :
input_tokens + cache_creation_input_tokens + cache_read_input_tokens + output_tokens.<summary></summary>.Ajoutez compaction_control à votre appel tool_runner pour activer le résumé automatique lorsque l'utilisation des tokens dépasse le seuil.
À mesure que la conversation s'allonge, l'historique des messages s'accumule :
Avant la compaction (approchant 100k tokens) :
[
{ "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..." }
// ... 50 more exchanges like this ...
]Lorsque les tokens dépassent le seuil, le SDK injecte une demande de résumé et Claude génère un résumé. L'historique entier est alors remplacé :
Après la compaction (retour à ~2–3k tokens) :
[
{
"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 continue à travailler à partir de ce résumé comme s'il s'agissait de l'historique de conversation original.
| Paramètre | Type | Obligatoire | Valeur par défaut | Description |
|---|---|---|---|---|
enabled | boolean | Oui | - | Indique si la compaction automatique doit être activée |
context_token_threshold | number | Non | 100 000 | Nombre de tokens auquel la compaction se déclenche |
model | string | Non | Identique au modèle principal | Modèle à utiliser pour générer les résumés |
summary_prompt | string | Non | Voir Prompt de résumé par défaut |
Le seuil détermine quand la compaction se produit. Un seuil plus bas signifie des compactions plus fréquentes avec des fenêtres de contexte plus petites. Un seuil plus élevé permet plus de contexte mais risque d'atteindre les limites.
Vous pouvez utiliser un modèle plus rapide ou moins coûteux pour générer les résumés :
Vous pouvez fournir un prompt personnalisé pour des besoins spécifiques à un domaine. Votre prompt doit demander à Claude d'encadrer son résumé avec des balises <summary></summary>.
Le prompt de résumé intégré demande à Claude de créer un résumé de continuation structuré comprenant :
Cette structure permet à Claude de reprendre le travail efficacement sans perdre de contexte important ni répéter des erreurs.
La compaction nécessite une attention particulière lors de l'utilisation d'outils côté serveur tels que la recherche web ou la récupération web.
Lors de l'utilisation d'outils côté serveur, le SDK peut calculer incorrectement l'utilisation des tokens, ce qui déclenche la compaction au mauvais moment.
Par exemple, après une opération de recherche web, la réponse de l'API pourrait afficher :
{
"usage": {
"input_tokens": 63000,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 270000,
"output_tokens": 1400
}
}Le SDK calcule l'utilisation totale comme 63 000 + 0 + 270 000 + 1 400 = 334 400 tokens. Cependant, la valeur cache_read_input_tokens inclut les lectures accumulées de plusieurs appels API internes effectués par l'outil côté serveur, et non la longueur réelle du contexte de votre conversation. La longueur réelle de votre contexte pourrait n'être que les 63 000 input_tokens, mais le SDK voit 334k et déclenche la compaction prématurément.
Solutions de contournement :
Lorsque le SDK déclenche la compaction alors qu'une réponse d'utilisation d'outil est en attente, il supprime le bloc d'utilisation d'outil de l'historique des messages avant de générer le résumé. Claude réémettra l'appel d'outil après avoir repris à partir du résumé si cela est toujours nécessaire.
Comprendre quand la compaction se déclenche vous aide à ajuster les seuils et à vérifier le comportement attendu.
Bons cas d'usage :
Cas d'usage moins adaptés :
Gérez les longues conversations avec la compaction côté serveur, la stratégie recommandée pour la plupart des cas d'usage.
Réduisez les coûts et la latence en mettant en cache les préfixes de prompt, et découvrez comment l'édition du contexte interagit avec le cache.
response = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
messages=[{"role": "user", "content": "Search for recent developments in AI"}],
tools=[{"type": "web_search_20250305", "name": "web_search"}],
betas=["context-management-2025-06-27"],
context_management={"edits": [{"type": "clear_tool_uses_20250919"}]},
)response = client.beta.messages.create(
model="claude-opus-4-8",
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},
],
betas=["context-management-2025-06-27"],
context_management={
"edits": [
{
"type": "clear_tool_uses_20250919",
# Déclencher l'effacement lorsque le seuil est dépassé
"trigger": {"type": "input_tokens", "value": 30000},
# Nombre d'utilisations d'outils à conserver après l'effacement
"keep": {"type": "tool_uses", "value": 3},
# Facultatif : effacer au moins ce nombre de tokens
"clear_at_least": {"type": "input_tokens", "value": 5000},
# Exclure ces outils de l'effacement
"exclude_tools": ["web_search"],
}
]
},
)response = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=16000,
messages=[{"role": "user", "content": "Hello"}],
thinking={"type": "adaptive"},
betas=["context-management-2025-06-27"],
context_management={
"edits": [
{
"type": "clear_thinking_20251015",
"keep": {"type": "thinking_turns", "value": 2},
}
]
},
)response = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=16000,
messages=[{"role": "user", "content": "Hello"}],
thinking={"type": "adaptive"},
betas=["context-management-2025-06-27"],
context_management={
"edits": [
{
"type": "clear_thinking_20251015",
"keep": {"type": "thinking_turns", "value": 3},
}
]
},
)response = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=16000,
messages=[{"role": "user", "content": "Hello"}],
thinking={"type": "adaptive"},
betas=["context-management-2025-06-27"],
context_management={
"edits": [
{
"type": "clear_thinking_20251015",
"keep": "all",
}
]
},
)response = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=16000,
messages=[
{
"role": "user",
"content": "Search for the latest developments in quantum error correction and summarize the key breakthroughs.",
}
],
thinking={"type": "adaptive"},
tools=[
{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 5,
}
],
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},
},
]
},
)
print(response)clear_tool_inputs | false | Contrôle si les paramètres d'appel d'outil sont effacés en même temps que les résultats d'outils. Par défaut, seuls les résultats d'outils sont effacés tout en gardant visibles les appels d'outils originaux de Claude. |
response = client.beta.messages.count_tokens(
model="claude-opus-4-8",
messages=[{"role": "user", "content": "Continue our conversation..."}],
betas=["context-management-2025-06-27"],
context_management={
"edits": [
{
"type": "clear_tool_uses_20250919",
"trigger": {"type": "input_tokens", "value": 30000},
"keep": {"type": "tool_uses", "value": 5},
}
]
},
)
print(f"Original tokens: {response.context_management.original_input_tokens}")
print(f"After clearing: {response.input_tokens}")
print(
f"Savings: {response.context_management.original_input_tokens - response.input_tokens} tokens"
)response = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
messages=[{"role": "user", "content": "Hello"}],
tools=[{"type": "memory_20250818", "name": "memory"}],
betas=["context-management-2025-06-27"],
context_management={"edits": [{"type": "clear_tool_uses_20250919"}]},
)| Prompt personnalisé pour la génération de résumé |