For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navegación principal

Intérprete de código

Permite que los modelos escriban y ejecuten código Python para resolver problemas.

La herramienta de intérprete de código permite que los modelos escriban y ejecuten código Python en un sandbox para resolver problemas complejos en áreas como el análisis de datos, la programación y las matemáticas. Úsala para:

  • Procesar archivos con distintos datos y formatos
  • Generar archivos con datos e imágenes de gráficos
  • Escribir y ejecutar código de forma iterativa para resolver problemas; por ejemplo, un modelo que escribe código que falla al ejecutarse puede seguir reescribiéndolo y ejecutándolo hasta que funcione
  • Potenciar la inteligencia visual de nuestros modelos de razonamiento más recientes (como o3 y o4-mini). El modelo puede usar esta herramienta para recortar, ampliar, rotar y procesar y transformar imágenes de otras formas.

Este es un ejemplo de una llamada a la API Responses que incluye una llamada a la herramienta de intérprete de código:

Usa la API Responses con el intérprete de código
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?"
  }'

Aunque llamamos a esta herramienta intérprete de código, el modelo la conoce como la “herramienta de Python”. Los modelos suelen entender los prompts que hacen referencia a la herramienta de intérprete de código; sin embargo, la forma más explícita de invocarla es pedir “la herramienta de Python” en tus prompts.

Contenedores

La herramienta de intérprete de código requiere un objeto de contenedor. Un contenedor es una máquina virtual completamente aislada en un sandbox donde el modelo puede ejecutar código Python. Este contenedor puede incluir archivos que tú subas o que el modelo genere.

Hay dos formas de crear contenedores:

  1. Modo automático: como se muestra en el ejemplo anterior, puedes pasar la propiedad "container": { "type": "auto", "memory_limit": "4g", "file_ids": ["file-1", "file-2"] } en la configuración de la herramienta al crear un nuevo objeto Response. Esto crea automáticamente un nuevo contenedor o reutiliza un contenedor activo que haya usado un elemento code_interpreter_call anterior en el contexto del modelo. Si omites memory_limit, se mantiene el nivel predeterminado de 1 GB para el contenedor. Busca el elemento code_interpreter_call en la salida de esta solicitud a la API para encontrar el container_id que se generó o utilizó.
  2. Modo explícito: en este caso, creas un contenedor explícitamente mediante el punto de acceso v1/containers, incluyes el memory_limit que necesitas (por ejemplo, "memory_limit": "4g") y asignas su id como valor de container en la configuración de la herramienta del objeto Response. Por ejemplo:
Usa la creación explícita de contenedores
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"
  }'

Puedes elegir entre 1g (predeterminado), 4g, 16g o 64g. Los niveles superiores ofrecen más RAM para la sesión y se facturan según las tarifas de herramientas integradas correspondientes al intérprete de código. El valor de memory_limit seleccionado se aplica durante toda la vida del contenedor, tanto si se creó automáticamente como mediante la API de contenedores.

Ten en cuenta que también puedes acceder a los contenedores creados en modo automático mediante el punto de acceso /v1/containers.

Vencimiento

Te recomendamos enfáticamente que trates los contenedores como efímeros y almacenes en tus propios sistemas todos los datos relacionados con el uso de esta herramienta. Detalles del vencimiento:

  • Un contenedor vence si no se utiliza durante 20 minutos. Cuando esto sucede, los intentos de usarlo en v1/responses fallarán. Aún podrás ver una instantánea de los metadatos del contenedor en el momento de su vencimiento, pero todos los datos asociados se eliminarán de nuestros sistemas y no se podrán recuperar. Debes descargar del contenedor los archivos que puedas necesitar mientras esté activo.
  • No puedes pasar un contenedor del estado vencido al estado activo. En su lugar, crea un nuevo contenedor y vuelve a subir los archivos. Ten en cuenta que se perderá todo el estado almacenado en la memoria del contenedor anterior, como los objetos de Python.
  • Cualquier operación sobre un contenedor, como obtenerlo o agregar o eliminar archivos, actualizará automáticamente su marca de tiempo last_active_at.

Trabajar con archivos

Al ejecutar el intérprete de código, el modelo puede crear sus propios archivos. Por ejemplo, si le pides que genere un gráfico o cree un CSV, crea estas imágenes directamente en tu contenedor. Cuando lo hace, cita estos archivos en las annotations de su siguiente mensaje. Este es un ejemplo:

{
  "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"
}

Puedes descargar estos archivos generados llamando al método obtener contenido de archivo del contenedor.

Todos los archivos incluidos en la entrada del modelo se suben automáticamente al contenedor. No tienes que subirlos explícitamente.

Subir y descargar archivos

Agrega nuevos archivos a tu contenedor mediante Crear archivo de contenedor. Este punto de acceso acepta una carga multiparte o un cuerpo JSON con un file_id. Consulta los archivos existentes del contenedor con Listar archivos del contenedor y descarga los bytes mediante Obtener contenido de archivo del contenedor.

Trabajar con citas

Los archivos y las imágenes que genera el modelo se devuelven como anotaciones en el mensaje del asistente. Las anotaciones container_file_citation hacen referencia a archivos creados en el contenedor. Incluyen container_id, file_id y filename. Puedes analizar estas anotaciones para mostrar enlaces de descarga o procesar los archivos de otras formas.

Archivos compatibles

Formato de archivoTipo 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

Notas de uso

Disponibilidad de la API Límites de solicitudes Notas
100 RPM por organización

Precios
ZDR y residencia de datos