Pour la plupart des cas d'usage, la compaction côté serveur est la stratégie principale pour gérer le contexte dans les conversations longues. Les stratégies de cette page sont utiles pour des scénarios spécifiques où vous avez besoin d'un contrôle plus granulaire 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 se développe. Cela vous aide à optimiser les coûts et à rester dans les limites de la fenêtre de contexte. Cette page couvre :
| Approche | Où elle s'exécute | Stratégies | Comment cela fonctionne |
|---|---|---|---|
| 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 l'invite 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 et TypeScript lors de l'utilisation de tool_runner. Génère un résumé et remplace l'historique de conversation complet. Voir Compaction côté client ci-dessous. |
L'édition du contexte est actuellement en bêta avec support pour l'effacement des résultats d'outils et l'effacement des blocs de réflexion. Pour l'activer, utilisez l'en-tête bêta context-management-2025-06-27 dans vos demandes d'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 votre seuil configuré. Ceci est particulièrement utile pour les flux de travail d'agents avec une utilisation intensive d'outils. 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. Chaque résultat effacé est remplacé par un texte d'espace réservé pour 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 plus de blocs de réflexion pour maintenir la continuité du raisonnement, ou les effacer plus agressivement pour économiser l'espace de contexte.
Comportement par défaut : Lorsque la réflexion étendue est activée sans configurer la stratégie clear_thinking_20251015, l'API conserve automatiquement uniquement les blocs de réflexion du dernier tour d'assistant (équivalent à keep: {type: "thinking_turns", value: 1}).
Pour maximiser les accès au cache, préservez tous les blocs de réflexion en définissant keep: "all".
Un tour de conversation d'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 l'invite n'atteigne Claude. Votre application cliente maintient 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 invites varie selon la stratégie :
Effacement des résultats d'outils : Invalide les préfixes d'invite mis en cache lorsque du contenu est effacé. Pour tenir compte de cela, effacez suffisamment de jetons pour que l'invalidation du cache en vaille la peine. Utilisez le paramètre clear_at_least pour assurer qu'un nombre minimum de jetons est effacé à chaque fois. Vous encourrez des coûts d'écriture de cache à chaque fois que du contenu est effacé, mais les demandes suivantes peuvent réutiliser le nouveau préfixe 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 d'invite est préservé, permettant les accès au cache et réduisant les coûts des jetons 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 prioriser les performances du cache ou la disponibilité de la fenêtre de contexte.
L'édition du contexte est disponible sur :
claude-opus-4-6)claude-opus-4-5-20251101)claude-opus-4-1-20250805)claude-opus-4-20250514)claude-sonnet-4-5-20250929)claude-sonnet-4-20250514)claude-haiku-4-5-20251001)Le moyen le 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 :
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"}
]
}
}'Vous pouvez personnaliser le comportement d'effacement des résultats d'outils avec des paramètres supplémentaires :
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"]
}
]
}
}'Activez l'effacement des blocs de réflexion pour gérer efficacement le contexte et la mise en cache des invites lorsque la réflexion étendue est activée :
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
}
}
]
}
}'La stratégie clear_thinking_20251015 prend en charge la configuration suivante :
| Option de configuration | Par défaut | Description |
|---|---|---|
keep | {type: "thinking_turns", value: 1} | Définit le nombre de tours d'assistant récents avec 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. |
Exemples de configuration :
// Keep thinking blocks from the last 3 assistant turns
{
"type": "clear_thinking_20251015",
"keep": {
"type": "thinking_turns",
"value": 3
}
}
// Keep all thinking blocks (maximizes cache hits)
{
"type": "clear_thinking_20251015",
"keep": "all"
}Vous pouvez utiliser à la fois l'effacement des blocs de réflexion et l'effacement des résultats d'outils ensemble :
Lors de l'utilisation de plusieurs stratégies, la stratégie clear_thinking_20251015 doit être listée en premier dans le tableau edits.
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
}
}
]
}
)| Option de configuration | Par défaut | Description |
|---|---|---|
trigger | 100 000 jetons d'entrée | Définit quand la stratégie d'édition du contexte s'active. Une fois que l'invite dépasse ce seuil, l'effacement commencera. Vous pouvez spécifier cette valeur en input_tokens ou tool_uses. |
keep | 3 utilisations d'outils | Définit le nombre de paires récentes d'utilisation/résultat d'outils à 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 | Aucun | Assure qu'un nombre minimum de jetons est effacé à chaque fois que la stratégie s'active. Si l'API ne peut pas effacer au moins le montant spécifié, la stratégie ne sera pas appliquée. Cela aide à déterminer si l'effacement du contexte vaut la peine de casser votre cache d'invite. |
exclude_tools | Aucun | Liste des noms d'outils dont les utilisations et résultats d'outils ne doivent jamais être effacés. Utile pour préserver un contexte important. |
clear_tool_inputs | false | Contrôle si les paramètres d'appel d'outil sont effacés avec les résultats d'outils. Par défaut, seuls les résultats d'outils sont effacés tandis que les appels d'outils originaux de Claude restent visibles. |
Vous pouvez voir quelles éditions de contexte ont été appliquées à votre demande en utilisant le champ de réponse context_management, ainsi que des statistiques utiles sur le contenu et les jetons 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 seront 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 comptage des jetons prend en charge la gestion du contexte, vous permettant de prévisualiser le nombre de jetons que votre invite utilisera après l'application de l'édition du contexte.
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
}
}
]
}
}'{
"input_tokens": 25000,
"context_management": {
"original_input_tokens": 70000
}
}La réponse affiche à la fois le nombre final de jetons après l'application de la gestion du contexte (input_tokens) et le nombre original de jetons avant tout effacement (original_input_tokens).
L'édition du contexte peut être combinée avec l'outil 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 de sauvegarder les résultats d'outils ou le contexte dans ses fichiers mémoire avant qu'ils ne soient effacés de l'historique de conversation.
Cette combinaison vous permet de :
Par exemple, dans un flux de travail d'édition de fichiers où Claude effectue de nombreuses opérations, Claude peut résumer les modifications terminées dans les fichiers mémoire à mesure que le contexte se développe. Lorsque les résultats d'outils sont effacés, Claude conserve l'accès à ces informations via son système mémoire et peut continuer à travailler efficacement.
Pour utiliser les deux fonctionnalités ensemble, activez-les dans votre demande d'API :
response = client.beta.messages.create(
model="claude-opus-4-6",
max_tokens=4096,
messages=[...],
tools=[
{
"type": "memory_20250818",
"name": "memory"
},
# Your other tools
],
betas=["context-management-2025-06-27"],
context_management={
"edits": [
{"type": "clear_tool_uses_20250919"}
]
}
)La compaction côté serveur est recommandée par rapport à la compaction du SDK. La compaction côté serveur gère la gestion du contexte automatiquement avec moins de complexité d'intégration, un meilleur calcul de l'utilisation des jetons et aucune limitation côté client. Utilisez la compaction du SDK uniquement si vous avez spécifiquement besoin d'un contrôle côté client sur le processus de résumé.
La compaction est disponible dans les SDK Python et TypeScript 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 jetons devient trop importante. Contrairement aux stratégies d'édition du contexte côté serveur qui effacent le 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 longue durée qui dépasseraient autrement la fenêtre de contexte.
Lorsque la compaction est activée, le SDK surveille l'utilisation des jetons 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 :
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"Tokens used: {message.usage.input_tokens}")
final = runner.until_done()À mesure que la conversation se développe, l'historique des messages s'accumule :
Avant la compaction (approchant 100k jetons) :
[
{ "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 jetons dépassent le seuil, le SDK injecte une demande de résumé et Claude génère un résumé. L'historique entier est ensuite remplacé :
Après la compaction (retour à ~2-3k jetons) :
[
{
"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 | Requis | Par défaut | Description |
|---|---|---|---|---|
enabled | boolean | Oui | - | Si la compaction automatique est activée |
context_token_threshold | number | Non | 100 000 | Nombre de jetons auquel la compaction se déclenche |
model | string | Non | Même modèle que le modèle principal | Modèle à utiliser pour générer les résumés |
summary_prompt | string | Non | Voir ci-dessous | Invite personnalisée pour la génération de résumé |
Le seuil détermine quand la compaction se produit. Un seuil inférieur 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.
# More frequent compaction for memory-constrained scenarios
compaction_control={
"enabled": True,
"context_token_threshold": 50000
}
# Less frequent compaction when you need more context
compaction_control={
"enabled": True,
"context_token_threshold": 150000
}Vous pouvez utiliser un modèle plus rapide ou moins cher pour générer les résumés :
compaction_control={
"enabled": True,
"context_token_threshold": 100000,
"model": "claude-haiku-4-5"
}Vous pouvez fournir une invite personnalisée pour les besoins spécifiques au domaine. Votre invite doit demander à Claude d'envelopper son résumé dans des balises <summary></summary>.
compaction_control={
"enabled": True,
"context_token_threshold": 100000,
"summary_prompt": """Summarize the research conducted so far, including:
- Sources consulted and key findings
- Questions answered and remaining unknowns
- Recommended next steps
Wrap your summary in <summary></summary> tags."""
}L'invite de résumé intégrée demande à Claude de créer un résumé de continuation structuré incluant :
Cette structure permet à Claude de reprendre le travail efficacement sans perdre de contexte important ni répéter les erreurs.
La compaction nécessite une considération 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 jetons, ce qui provoque le déclenchement de 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_read_input_tokens": 270000,
"output_tokens": 1400
}
}Le SDK calcule l'utilisation totale comme 63 000 + 270 000 = 333 000 jetons. 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 votre contexte de conversation réel. Votre longueur de contexte réelle pourrait être seulement les 63 000 input_tokens, mais le SDK voit 333k et déclenche la compaction prématurément.
Solutions de contournement :
Lorsque la compaction est déclenchée alors qu'une réponse d'utilisation d'outil est en attente, le SDK 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 la reprise à partir du résumé si cela est toujours nécessaire.
Activez la journalisation pour suivre quand la compaction se produit :
import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger("anthropic.lib.tools").setLevel(logging.INFO)
# Logs will show:
# INFO: Token usage 105000 has exceeded the threshold of 100000. Performing compaction.
# INFO: Compaction complete. New token usage: 2500Bons cas d'utilisation :
Cas d'utilisation moins idéaux :
Was this page helpful?