Claude peut analyser des données, créer des visualisations, effectuer des calculs complexes, exécuter des commandes système, créer et modifier des fichiers, et traiter des fichiers téléversés directement dans la conversation de l'API. L'outil d'exécution de code permet à Claude d'exécuter des commandes Bash et de manipuler des fichiers, y compris l'écriture de code, dans un environnement sécurisé et isolé (sandbox).
L'exécution de code est gratuite lorsqu'elle est utilisée avec la recherche web ou la récupération web. Lorsque web_search_20260209 (ou version ultérieure) ou web_fetch_20260209 (ou version ultérieure) est inclus dans votre requête, aucun frais supplémentaire n'est facturé pour les appels à l'outil d'exécution de code au-delà des coûts standard de tokens d'entrée et de sortie. Les frais standard d'exécution de code s'appliquent lorsque ces outils ne sont pas inclus.
L'exécution de code est une primitive essentielle pour construire des agents performants. Elle permet le filtrage dynamique dans les outils de recherche web et de récupération web, permettant à Claude de traiter les résultats avant qu'ils n'atteignent la fenêtre de contexte, améliorant ainsi la précision tout en réduisant la consommation de tokens.
Contactez-nous via le formulaire de commentaires pour partager vos retours sur cette fonctionnalité.
Cette fonctionnalité n'est pas éligible à la Zero Data Retention (ZDR). Les données sont conservées conformément à la politique de conservation standard de la fonctionnalité.
L'outil d'exécution de code est disponible sur les modèles suivants :
| Modèle | Versions de l'outil |
|---|---|
| Claude Fable 5 (claude-fable-5) | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Mythos 5 (claude-mythos-5) | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Opus 4.8 (claude-opus-4-8) | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Opus 4.7 (claude-opus-4-7) | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Opus 4.6 (claude-opus-4-6) | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Sonnet 4.6 (claude-sonnet-4-6) | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Opus 4.5 (claude-opus-4-5-20251101) | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Sonnet 4.5 (claude-sonnet-4-5-20250929) | code_execution_20250825, code_execution_20260120, code_execution_20260521 |
| Claude Haiku 4.5 (claude-haiku-4-5-20251001) | code_execution_20250825 |
| Claude Opus 4.1 (claude-opus-4-1-20250805) (obsolète) | code_execution_20250825 |
code_execution_20250825 prend en charge les commandes Bash et les opérations sur les fichiers, et est disponible sur tous les modèles du tableau. code_execution_20260120 ajoute la persistance de l'état REPL et l'appel d'outils programmatique depuis l'intérieur du sandbox, et est disponible uniquement sur Claude Fable 5, Claude Mythos 5, Opus 4.5+ et Sonnet 4.5+. code_execution_20260521 utilise le même environnement d'exécution que _20260120, avec la limite de temps d'exécution par cellule indiquée dans la description de l'outil, afin que Claude puisse planifier les cellules à exécution longue en conséquence. Chaque cellule dispose d'une limite de temps réel de 90 secondes ; le code qui dépasse cette limite renvoie un résultat detection_timeout. Si vous utilisez toujours l'ancienne version code_execution_20250522 (Python uniquement), consultez Mettre à niveau vers la dernière version de l'outil pour effectuer la migration.
La rétrocompatibilité des anciennes versions d'outils avec les modèles plus récents n'est pas garantie. Utilisez toujours la version de l'outil qui correspond à la version de votre modèle.
L'exécution de code est disponible sur :
L'exécution de code n'est actuellement pas disponible sur Amazon Bedrock ni sur Vertex AI.
Pour Claude Mythos Preview, l'exécution de code est prise en charge uniquement sur la Claude API et Microsoft Foundry. Elle n'est pas disponible pour Mythos Preview sur Amazon Bedrock, Vertex AI ou Claude Platform on AWS.
Voici un exemple simple qui demande à Claude d'effectuer un calcul :
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
messages=[
{
"role": "user",
"content": "Calculate the mean and standard deviation of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
print(response)Lorsque vous ajoutez l'outil d'exécution de code à votre requête API :
Claude exécute du code lorsque la requête bénéficie d'un calcul ou d'une manipulation de fichiers :
Claude répond directement sans exécuter de code pour :
Si vous souhaitez que Claude exécute du code pour une requête limite, demandez-le explicitement (par exemple, « exécute du code pour vérifier cela »).
Lorsque vous fournissez l'exécution de code en parallèle d'outils fournis par le client qui exécutent également du code (comme un outil bash ou un REPL personnalisé), Claude opère dans un environnement multi-ordinateurs. L'outil d'exécution de code s'exécute dans le conteneur sandbox d'Anthropic, tandis que vos outils fournis par le client s'exécutent dans un environnement distinct que vous contrôlez. Claude peut parfois confondre ces environnements, en tentant d'utiliser le mauvais outil ou en supposant que l'état est partagé entre eux.
Pour éviter cela, ajoutez des instructions à votre invite système qui clarifient la distinction :
When multiple code execution environments are available, be aware that:
- Variables, files, and state do NOT persist between different execution environments
- Use the code_execution tool for general-purpose computation in Anthropic's sandboxed environment
- Use client-provided execution tools (e.g., bash) when you need access to the user's local system, files, or data
- If you need to pass results between environments, explicitly include outputs in subsequent tool calls rather than assuming shared stateCeci est particulièrement important lorsque vous combinez l'exécution de code avec la recherche web ou la récupération web, qui activent automatiquement l'exécution de code. Si votre application fournit déjà un outil shell côté client, l'exécution de code automatique crée un second environnement d'exécution que Claude doit distinguer.
Pour analyser vos propres fichiers de données (tels que CSV, Excel ou images), téléversez-les via l'API Files et référencez-les dans votre requête :
L'utilisation de l'API Files avec l'exécution de code nécessite l'en-tête bêta de l'API Files : "anthropic-beta": "files-api-2025-04-14"
L'environnement Python peut traiter divers types de fichiers téléversés via l'API Files, notamment :
container_uploadclient = anthropic.Anthropic()
# Téléverser un fichier
file_object = client.beta.files.upload(
file=open("data.csv", "rb"),
)
# Utiliser le file_id avec l'exécution de code
response = client.beta.messages.create(
model="claude-opus-4-8",
betas=["files-api-2025-04-14"],
max_tokens=4096,
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "Analyze this CSV data"},
{"type": "container_upload", "file_id": file_object.id},
],
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
print(response)Lorsque Claude crée des fichiers pendant l'exécution de code, vous pouvez récupérer ces fichiers à l'aide de l'API Files :
# Initialiser le client
client = Anthropic()
# Demander une exécution de code qui crée des fichiers
response = client.beta.messages.create(
model="claude-opus-4-8",
betas=["files-api-2025-04-14"],
max_tokens=4096,
messages=[
{
"role": "user",
"content": "Create a matplotlib visualization and save it as output.png",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# Extraire les identifiants de fichiers de la réponse
def extract_file_ids(response):
file_ids = []
for item in response.content:
if item.type == "bash_code_execution_tool_result":
content_item = item.content
if content_item.type == "bash_code_execution_result":
# liste à typage concret : List[BashCodeExecutionOutputBlock]
for file in content_item.content:
file_ids.append(file.file_id)
return file_ids
# Télécharger les fichiers créés
for file_id in extract_file_ids(response):
file_metadata = client.beta.files.retrieve_metadata(file_id)
file_content = client.beta.files.download(file_id)
file_content.write_to_file(file_metadata.filename)
print(f"Downloaded: {file_metadata.filename}")L'outil d'exécution de code ne nécessite aucun paramètre supplémentaire :
{
"type": "code_execution_20250825",
"name": "code_execution"
}Lorsque cet outil est fourni, Claude obtient automatiquement l'accès à deux sous-outils :
bash_code_execution : exécuter des commandes shelltext_editor_code_execution : afficher, créer et modifier des fichiers, y compris l'écriture de codeL'outil d'exécution de code peut renvoyer deux types de résultats selon l'opération :
{
"type": "server_tool_use",
"id": "srvtoolu_01B3C4D5E6F7G8H9I0J1K2L3",
"name": "bash_code_execution",
"input": {
"command": "ls -la | head -5"
}
},
{
"type": "bash_code_execution_tool_result",
"tool_use_id": "srvtoolu_01B3C4D5E6F7G8H9I0J1K2L3",
"content": {
"type": "bash_code_execution_result",
"stdout": "total 24\ndrwxr-xr-x 2 user user 4096 Jan 1 12:00 .\ndrwxr-xr-x 3 user user 4096 Jan 1 11:00 ..\n-rw-r--r-- 1 user user 220 Jan 1 12:00 data.csv\n-rw-r--r-- 1 user user 180 Jan 1 12:00 config.json",
"stderr": "",
"return_code": 0
}
}Afficher un fichier :
{
"type": "server_tool_use",
"id": "srvtoolu_01C4D5E6F7G8H9I0J1K2L3M4",
"name": "text_editor_code_execution",
"input": {
"command": "view",
"path": "config.json"
}
},
{
"type": "text_editor_code_execution_tool_result",
"tool_use_id": "srvtoolu_01C4D5E6F7G8H9I0J1K2L3M4",
"content": {
"type": "text_editor_code_execution_result",
"file_type": "text",
"content": "{\n \"setting\": \"value\",\n \"debug\": true\n}",
"numLines": 4,
"startLine": 1,
"totalLines": 4
}
}Créer un fichier :
{
"type": "server_tool_use",
"id": "srvtoolu_01D5E6F7G8H9I0J1K2L3M4N5",
"name": "text_editor_code_execution",
"input": {
"command": "create",
"path": "new_file.txt",
"file_text": "Hello, World!"
}
},
{
"type": "text_editor_code_execution_tool_result",
"tool_use_id": "srvtoolu_01D5E6F7G8H9I0J1K2L3M4N5",
"content": {
"type": "text_editor_code_execution_result",
"is_file_update": false
}
}Modifier un fichier (str_replace) :
{
"type": "server_tool_use",
"id": "srvtoolu_01E6F7G8H9I0J1K2L3M4N5O6",
"name": "text_editor_code_execution",
"input": {
"command": "str_replace",
"path": "config.json",
"old_str": "\"debug\": true",
"new_str": "\"debug\": false"
}
},
{
"type": "text_editor_code_execution_tool_result",
"tool_use_id": "srvtoolu_01E6F7G8H9I0J1K2L3M4N5O6",
"content": {
"type": "text_editor_code_execution_result",
"oldStart": 3,
"oldLines": 1,
"newStart": 3,
"newLines": 1,
"lines": ["- \"debug\": true", "+ \"debug\": false"]
}
}Tous les résultats d'exécution incluent :
stdout : sortie d'une exécution réussiestderr : messages d'erreur si l'exécution échouereturn_code : 0 en cas de succès, non nul en cas d'échecChamps supplémentaires pour les opérations sur les fichiers :
file_type, content, numLines, startLine, totalLinesis_file_update (indique si le fichier existait déjà)oldStart, oldLines, newStart, newLines, lines (format diff)Chaque type d'outil peut renvoyer des erreurs spécifiques :
Erreurs communes (tous les outils) :
{
"type": "bash_code_execution_tool_result",
"tool_use_id": "srvtoolu_01VfmxgZ46TiHbmXgy928hQR",
"content": {
"type": "bash_code_execution_tool_result_error",
"error_code": "unavailable"
}
}Codes d'erreur par type d'outil :
| Outil | Code d'erreur | Description |
|---|---|---|
| Tous les outils | unavailable | L'outil est temporairement indisponible |
| Tous les outils | execution_time_exceeded | L'exécution a dépassé la limite de temps maximale |
| Tous les outils | container_expired | Le conteneur a expiré et n'est plus disponible |
| Tous les outils | invalid_tool_input | Paramètres invalides fournis à l'outil |
| Tous les outils | too_many_requests | Limite de débit dépassée pour l'utilisation de l'outil |
| bash | output_file_too_large | La sortie de la commande a dépassé la taille maximale |
| text_editor | file_not_found | Le fichier n'existe pas (pour les opérations d'affichage/modification) |
| text_editor | string_not_found | La chaîne old_str n'a pas été trouvée dans le fichier (pour str_replace) |
pause_turnLa réponse peut inclure un stop_reason pause_turn, qui indique que l'API a mis en pause un tour de longue durée. Vous pouvez renvoyer la réponse telle quelle dans une requête ultérieure pour permettre à Claude de poursuivre son tour, ou modifier le contenu si vous souhaitez interrompre la conversation.
L'outil d'exécution de code s'exécute dans un environnement conteneurisé sécurisé, conçu spécifiquement pour l'exécution de code, avec un accent particulier sur Python.
L'environnement Python isolé inclut ces bibliothèques couramment utilisées :
Vous pouvez réutiliser un conteneur existant sur plusieurs requêtes API en fournissant l'ID de conteneur d'une réponse précédente. Cela vous permet de conserver les fichiers créés entre les requêtes.
# Première requête : créer un fichier avec un nombre aléatoire
response1 = client.messages.create(
model="claude-opus-4-8",
max_tokens=4096,
messages=[
{
"role": "user",
"content": "Write a file with a random number and save it to '/tmp/number.txt'",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# Extraire l'ID du conteneur de la première réponse
container_id = response1.container.id
# Deuxième requête : réutiliser le conteneur pour lire le fichier
response2 = client.messages.create(
container=container_id, # Reuse the same container
model="claude-opus-4-8",
max_tokens=4096,
messages=[
{
"role": "user",
"content": "Read the number from '/tmp/number.txt' and calculate its square",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
print(response2)Avec le streaming activé, vous recevrez les événements d'exécution de code au fur et à mesure qu'ils se produisent :
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "code_execution"}}
// Code execution streamed
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"code\":\"import pandas as pd\\ndf = pd.read_csv('data.csv')\\nprint(df.head())\"}"}}
// Pause while code executes
// Execution results streamed
event: content_block_start
data: {"type": "content_block_start", "index": 2, "content_block": {"type": "code_execution_tool_result", "tool_use_id": "srvtoolu_xyz789", "content": {"stdout": " A B C\n0 1 2 3\n1 4 5 6", "stderr": ""}}}Vous pouvez inclure l'outil d'exécution de code dans l'API Messages Batches. Les appels à l'outil d'exécution de code via l'API Messages Batches sont facturés au même tarif que ceux des requêtes API Messages standard.
L'exécution de code est gratuite lorsqu'elle est utilisée avec la recherche web ou la récupération web. Lorsque web_search_20260209 (ou version ultérieure) ou web_fetch_20260209 (ou version ultérieure) est inclus dans votre requête API, aucun frais supplémentaire n'est facturé pour les appels à l'outil d'exécution de code au-delà des coûts standard des tokens d'entrée et de sortie.
Lorsqu'elle est utilisée sans ces outils, l'exécution de code est facturée en fonction du temps d'exécution, comptabilisé séparément de l'utilisation des tokens :
L'utilisation de l'exécution de code est indiquée dans la réponse :
{
"usage": {
"input_tokens": 105,
"output_tokens": 239,
"server_tool_use": {
"code_execution_requests": 1
}
}
}En passant à code-execution-2025-08-25, vous obtenez l'accès à la manipulation de fichiers et aux capacités Bash, y compris le code dans plusieurs langages. Il n'y a aucune différence de prix.
| Composant | Ancienne version | Version actuelle |
|---|---|---|
| En-tête bêta | code-execution-2025-05-22 | code-execution-2025-08-25 |
| Type d'outil | code_execution_20250522 | code_execution_20250825 |
| Capacités | Python uniquement | Commandes Bash, opérations sur les fichiers |
| Types de réponse | code_execution_result | bash_code_execution_result, text_editor_code_execution_result |
Pour effectuer la mise à niveau, mettez à jour le type d'outil dans vos requêtes API :
- "type": "code_execution_20250522"
+ "type": "code_execution_20250825"Vérifiez la gestion des réponses (si vous analysez les réponses de manière programmatique) :
Pour exécuter des outils à l'intérieur du conteneur d'exécution de code, consultez Appel d'outils programmatique.
L'exécution de code s'effectue dans des conteneurs sandbox côté serveur. Les données du conteneur, y compris les artefacts d'exécution, les fichiers téléversés et les sorties, sont conservées jusqu'à 30 jours. Cette conservation s'applique à toutes les données traitées dans l'environnement du conteneur. Les fichiers que l'exécution de code crée dans l'API Files (récupérables via client.beta.files.download()) persistent jusqu'à leur suppression explicite.
Pour l'éligibilité ZDR sur l'ensemble des fonctionnalités, consultez API et conservation des données.
L'outil d'exécution de code permet à Claude d'utiliser les Agent Skills. Les Skills sont des capacités modulaires composées d'instructions, de scripts et de ressources qui étendent les fonctionnalités de Claude.
Pour en savoir plus, consultez Agent Skills et Utiliser les Agent Skills avec l'API.
Was this page helpful?