For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navigation principale

Interpréteur de code

Permettez aux modèles d’écrire et d’exécuter du code Python pour résoudre des problèmes.

L’outil Interpréteur de code permet aux modèles d’écrire et d’exécuter du code Python dans un environnement isolé en bac à sable pour résoudre des problèmes complexes dans des domaines comme l’analyse de données, la programmation et les mathématiques. Utilisez-le pour :

  • Traiter des fichiers contenant des données et des mises en forme variées
  • Générer des fichiers contenant des données et des images de graphiques
  • Écrire et exécuter du code de manière itérative pour résoudre des problèmes. Par exemple, un modèle qui écrit du code dont l’exécution échoue peut continuer à le réécrire et à l’exécuter jusqu’à ce qu’il fonctionne
  • Renforcer l’intelligence visuelle de nos derniers modèles de raisonnement (comme o3 et o4-mini). Le modèle peut utiliser cet outil pour recadrer des images, zoomer, les faire pivoter, ainsi que les traiter et les transformer de différentes manières.

Voici un exemple d’appel à l’API Responses avec un appel à l’outil Interpréteur de code :

Utilisez l’API Responses avec l’Interpréteur de code
curl https://api.openai.com/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-6-astra",
    "tools": [{
      "type": "code_interpreter",
      "container": { "type": "auto", "memory_limit": "4g" }
    }],
    "instructions": "You are a personal math tutor. When asked a math question, write and run code using the python tool to answer the question.",
    "input": "I need to solve the equation 3x + 11 = 14. Can you help me?"
  }'

Nous appelons cet outil Interpréteur de code, mais le modèle le connaît sous le nom de « python tool ». Les modèles comprennent généralement les prompts qui font référence à l’outil Interpréteur de code. Toutefois, la façon la plus explicite de l’invoquer consiste à demander « the python tool » dans vos prompts.

Conteneurs

L’outil Interpréteur de code nécessite un objet conteneur. Un conteneur est une machine virtuelle entièrement isolée en bac à sable dans laquelle le modèle peut exécuter du code Python. Il peut contenir des fichiers que vous importez ou que le modèle génère.

Il existe deux façons de créer des conteneurs :

  1. Mode automatique : comme dans l’exemple ci-dessus, transmettez la propriété "container": { "type": "auto", "memory_limit": "4g", "file_ids": ["file-1", "file-2"] } dans la configuration de l’outil lors de la création d’un nouvel objet Response. Un nouveau conteneur est alors créé automatiquement, ou un conteneur actif utilisé par un élément code_interpreter_call précédent dans le contexte du modèle est réutilisé. Si vous omettez memory_limit, le conteneur conserve le niveau par défaut de 1 Go. Recherchez l’élément code_interpreter_call dans la sortie de cette requête API pour trouver le container_id généré ou utilisé.
  2. Mode explicite : créez explicitement un conteneur à l’aide du point de terminaison v1/containers, en précisant la valeur de memory_limit dont vous avez besoin (par exemple "memory_limit": "4g"), puis affectez son id à la valeur container dans la configuration de l’outil de l’objet Response. Par exemple :
Utilisez la création explicite de conteneurs
curl https://api.openai.com/v1/containers \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "name": "My Container",
        "memory_limit": "4g"
      }'

# Use the returned container id in the next call:
curl https://api.openai.com/v1/responses \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6-astra",
    "tools": [{
      "type": "code_interpreter",
      "container": "cntr_abc123"
    }],
    "tool_choice": "required",
    "input": "use the python tool to calculate what is 4 * 3.82. and then find its square root and then find the square root of that result"
  }'

Vous pouvez choisir entre 1g (par défaut), 4g, 16g ou 64g. Les niveaux supérieurs offrent davantage de RAM pour la session et sont facturés aux tarifs des outils intégrés applicables à l’Interpréteur de code. La valeur de memory_limit sélectionnée s’applique pendant toute la durée de vie du conteneur, qu’il ait été créé automatiquement ou via l’API de conteneurs.

Les conteneurs créés en mode automatique sont également accessibles via le point de terminaison /v1/containers.

Expiration

Nous vous recommandons vivement de considérer les conteneurs comme éphémères et de stocker toutes les données liées à l’utilisation de cet outil sur vos propres systèmes. Voici les modalités d’expiration :

  • Un conteneur expire s’il n’est pas utilisé pendant 20 minutes. Toute tentative d’utilisation de ce conteneur dans v1/responses échoue alors. Vous pouvez toujours consulter un instantané de ses métadonnées au moment de son expiration, mais toutes les données associées au conteneur sont supprimées de nos systèmes et ne peuvent pas être récupérées. Téléchargez les fichiers dont vous pourriez avoir besoin tant que le conteneur est actif.
  • Vous ne pouvez pas réactiver un conteneur expiré. Créez un nouveau conteneur et importez à nouveau les fichiers. Tout état conservé dans la mémoire de l’ancien conteneur, comme les objets Python, sera perdu.
  • Toute opération sur un conteneur, comme sa récupération ou l’ajout ou la suppression de fichiers, actualise automatiquement son horodatage last_active_at.

Travailler avec des fichiers

Lorsqu’il utilise l’Interpréteur de code, le modèle peut créer ses propres fichiers. Par exemple, si vous lui demandez de tracer un graphique ou de créer un CSV, il crée ces images directement dans votre conteneur. Il cite ensuite ces fichiers dans les annotations de son prochain message. Voici un exemple :

{
  "id": "msg_682d514e268c8191a89c38ea318446200f2610a7ec781a4f",
  "content": [
    {
      "annotations": [
        {
          "file_id": "cfile_682d514b2e00819184b9b07e13557f82",
          "index": null,
          "type": "container_file_citation",
          "container_id": "cntr_682d513bb0c48191b10bd4f8b0b3312200e64562acc2e0af",
          "end_index": 0,
          "filename": "cfile_682d514b2e00819184b9b07e13557f82.png",
          "start_index": 0
        }
      ],
      "text": "Here is the histogram of the RGB channels for the uploaded image. Each curve represents the distribution of pixel intensities for the red, green, and blue channels. Peaks toward the high end of the intensity scale (right-hand side) suggest a lot of brightness and strong warm tones, matching the orange and light background in the image. If you want a different style of histogram (e.g., overall intensity, or quantized color groups), let me know!",
      "type": "output_text",
      "logprobs": []
    }
  ],
  "role": "assistant",
  "status": "completed",
  "type": "message"
}

Vous pouvez télécharger les fichiers ainsi créés en appelant la méthode Récupérer le contenu d’un fichier du conteneur.

Tous les fichiers fournis en entrée au modèle sont automatiquement importés dans le conteneur. Vous n’avez pas à les y importer explicitement.

Importation et téléchargement de fichiers

Ajoutez de nouveaux fichiers à votre conteneur à l’aide de Créer un fichier dans le conteneur. Ce point de terminaison accepte soit un envoi multipart, soit un corps JSON contenant un file_id. Listez les fichiers existants du conteneur avec Lister les fichiers du conteneur et téléchargez leurs octets avec Récupérer le contenu d’un fichier du conteneur.

Gestion des citations

Les fichiers et les images générés par le modèle sont renvoyés sous forme d’annotations dans le message de l’assistant. Les annotations container_file_citation renvoient aux fichiers créés dans le conteneur. Elles comprennent les champs container_id, file_id et filename. Vous pouvez analyser ces annotations pour afficher des liens de téléchargement ou traiter les fichiers d’autres manières.

Fichiers pris en charge

Format de fichierType MIME
.ctext/x-c
.cstext/x-csharp
.cpptext/x-c++
.csvtext/csv
.docapplication/msword
.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
.htmltext/html
.javatext/x-java
.jsonapplication/json
.mdtext/markdown
.pdfapplication/pdf
.phptext/x-php
.pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentation
.pytext/x-python
.pytext/x-script.python
.rbtext/x-ruby
.textext/x-tex
.txttext/plain
.csstext/css
.jstext/javascript
.shapplication/x-sh
.tsapplication/typescript
.csvapplication/csv
.jpegimage/jpeg
.jpgimage/jpeg
.gifimage/gif
.pklapplication/octet-stream
.pngimage/png
.tarapplication/x-tar
.xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xmlapplication/xml or "text/xml"
.zipapplication/zip

Notes d’utilisation

Disponibilité dans les API Limites de débit Remarques
100 RPM par organisation

Tarifs
ZDR et résidence des données