El 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. Úsalo para:
- Procesar archivos con distintos tipos de 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, si el modelo escribe código que falla al ejecutarse, puede reescribirlo y volver a ejecutarlo hasta que funcione.
- Examinar imágenes con
gpt-6-astra. El intérprete de código puede usar Python para recortar, ampliar o rotar imágenes, o para leer píxeles individuales.
Este ejemplo muestra cómo llamar a la API de Responses para que el modelo use 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?"
}'Llamamos a esta herramienta intérprete de código, pero el modelo la conoce como la “herramienta de Python”. Los modelos suelen entender los prompts que mencionan el intérprete de código, aunque la forma más explícita de invocarlo es pedir en el prompt que el modelo use “la herramienta de Python”.
Contenedores
El 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. Puede contener tanto archivos que subas como archivos que genere el modelo.
Puedes crear contenedores de forma automática o explícita.
- Modo automático: como en el ejemplo anterior, al crear un objeto Response, pasa la propiedad
"container": { "type": "auto", "memory_limit": "4g", "file_ids": ["file-1", "file-2"] }en la configuración de la herramienta. Así se crea automáticamente un contenedor o se reutiliza uno activo que ya se usó en una llamada anterior, registrada en el contexto del modelo como un elementocode_interpreter_call. Si omitesmemory_limit, el contenedor conserva el nivel predeterminado de 1 GB. Busca el elementocode_interpreter_callen la respuesta a esta solicitud de la API para encontrar elcontainer_iddel contenedor que se creó o se reutilizó. - Modo explícito: crea un contenedor mediante el punto de acceso
v1/containerse indica elmemory_limitque necesitas (por ejemplo,"memory_limit": "4g"). Luego asigna suidcomo valor decontaineren la configuración de la herramienta del objeto Response. Por ejemplo:
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 y 64g. Los niveles superiores ofrecen más RAM para la sesión y se facturan según las tarifas de las herramientas integradas correspondientes al intérprete de código. El valor de memory_limit que elijas se aplica durante toda la vida del contenedor, tanto si lo creas automáticamente como si usas la API de contenedores.
También puedes acceder a los contenedores creados en modo automático mediante el punto de acceso /v1/containers.
Vencimiento
Te recomendamos especialmente que trates los contenedores como temporales y guardes en tus propios sistemas todos los datos relacionados con el uso de esta herramienta. Ten en cuenta lo siguiente:
- Un contenedor vence después de 20 minutos de inactividad. A partir de ese momento, cualquier intento de usarlo en
v1/responsesfallará. Aún podrás consultar una copia de los metadatos del contenedor tal como estaban al vencer, pero eliminaremos de nuestros sistemas todos los datos asociados al contenedor y no podrás recuperarlos. Descarga los archivos que puedas necesitar mientras el contenedor siga activo. - No puedes reactivar un contenedor vencido. Crea uno nuevo y vuelve a subir los archivos. Se perderá todo lo que estuviera en la memoria del contenedor anterior, incluidos los objetos de Python.
- Cualquier operación en el contenedor, como consultarlo, agregarle archivos o eliminarlos, actualiza automáticamente la hora de su última actividad en
last_active_at.
Trabajar con archivos
Cuando usa 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 archivo CSV, lo crea directamente en tu contenedor. Luego cita los archivos generados en el campo annotations de su siguiente mensaje. Por 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"
}
Para descargar los archivos generados, llama al método Obtener el contenido de un archivo del contenedor.
Todos los archivos que incluyas en la entrada del modelo se suben automáticamente al contenedor. No necesitas subirlos por separado.
Subir y descargar archivos
Agrega archivos a tu contenedor con Crear un archivo en el contenedor. Este punto de acceso acepta una carga multiparte o un cuerpo JSON con un file_id.
Usa Listar los archivos del contenedor para consultar los archivos existentes y Obtener el contenido de un archivo del contenedor para descargar su contenido en bytes.
Trabajar con citas
Los archivos y las imágenes que genera el modelo se devuelven como anotaciones en el mensaje del asistente. Las anotaciones de tipo container_file_citation hacen referencia a archivos creados en el contenedor. Incluyen los campos container_id, file_id y filename. Puedes analizar estas anotaciones para mostrar enlaces de descarga o procesar los archivos de otra manera.
Archivos compatibles
| Formato de archivo | Tipo MIME |
|---|---|
.c |
text/x-c |
.cs |
text/x-csharp |
.cpp |
text/x-c++ |
.csv |
text/csv |
.doc |
application/msword |
.docx |
application/vnd.openxmlformats-officedocument.wordprocessingml.document |
.html |
text/html |
.java |
text/x-java |
.json |
application/json |
.md |
text/markdown |
.pdf |
application/pdf |
.php |
text/x-php |
.pptx |
application/vnd.openxmlformats-officedocument.presentationml.presentation |
.py |
text/x-python |
.py |
text/x-script.python |
.rb |
text/x-ruby |
.tex |
text/x-tex |
.txt |
text/plain |
.css |
text/css |
.js |
text/javascript |
.sh |
application/x-sh |
.ts |
application/typescript |
.csv |
application/csv |
.jpeg |
image/jpeg |
.jpg |
image/jpeg |
.gif |
image/gif |
.pkl |
application/octet-stream |
.png |
image/png |
.tar |
application/x-tar |
.xlsx |
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
.xml |
application/xml or "text/xml" |
.zip |
application/zip |
Notas de uso
| Disponibilidad por API | Límites de solicitudes | Notas |
|---|---|---|
| 100 solicitudes por minuto por organización |