OpenAI API · Python 工具 · 2026-11-01 核对

OpenAI Code Interpreter 怎么用?容器、文件、网络与成本

用 Responses API 让模型在受控容器里编写并运行 Python,处理表格、文档、图片和计算任务;同时正确管理内存、文件、联网、过期与账单。

主关键词:OpenAI Code Interpreter 怎么用官方资料核对:2026-11-01第三方中文指南
先给结论

新接入可从 Responses API 的 code_interpreter 工具开始:临时任务使用 container: {type: "auto"};需要提前上传文件、固定内存、控制出站网络或显式复用时,先创建容器并传入 container ID。容器不是持久硬盘:官方当前说明连续 20 分钟未使用就会过期,重要结果必须及时下载。

Code Interpreter 适合什么任务?

Code Interpreter 是 OpenAI 托管的 Python 工具。模型可以在隔离容器中反复编写和执行代码,用于数据清洗、统计计算、表格分析、图表生成、文档处理、图片变换和可复现的数学推导。它适合“让模型通过代码得到结果”,不适合直接代替业务数据库权限、付款、发信或不可逆系统操作。

需求优先方案原因
CSV/XLSX 分析、绘图、计算Code Interpreter模型可在沙箱中迭代运行 Python 并生成文件
调用你自己的订单、CRM 或审批系统Function Calling业务代码与权限由你的服务端掌控
检索大量私有文档片段File Search面向 Vector Store 检索,而不是一次性计算
连接标准化第三方工具服务器Remote MCP发现并调用 MCP 工具
在你自己的机器执行命令本地 Shell / 自建执行器Code Interpreter 运行在 OpenAI 托管容器,不是你的服务器

最小 Responses API 示例

官方文档把 Code Interpreter 称为模型看到的“Python tool”。下面示例遵循 2026-11-01 的官方请求形状;模型名称、可用工具和价格可能调整,上线前仍需重新检查。

import OpenAI from "openai";

const client = new OpenAI();

const response = await client.responses.create({
  model: "gpt-6-astra",
  tools: [{
    type: "code_interpreter",
    container: {
      type: "auto",
      memory_limit: "1g"
    }
  }],
  input: "使用 Python 工具读取数据、计算汇总并生成 CSV。"
});

console.log(response.output_text);

tool_choice: "auto" 允许模型自行判断是否需要执行代码;任务必须执行 Python 时才考虑 "required"。不要只根据自然语言猜测工具是否运行,应读取 Response 输出中的 code_interpreter_call 项和生成文件注释。

auto 容器和显式容器怎么选?

方式一:auto,适合一次性或上下文内复用

在工具定义里使用 {type:"auto"},可同时传入 file_ids 和 memory_limit。系统会创建容器,或在模型上下文里存在有效 code_interpreter_call 时复用活动容器。响应中的调用项会提供实际 container_id。

{
  "type": "code_interpreter",
  "container": {
    "type": "auto",
    "memory_limit": "4g",
    "file_ids": ["file_abc", "file_xyz"]
  }
}

方式二:先创建容器,适合显式生命周期管理

先调用 POST /v1/containers 创建容器,再把返回的 ID 作为工具的 container。这样便于在请求前添加文件、设置网络策略、检查文件列表,或让多个明确的请求使用同一个容器。

curl https://api.openai.com/v1/containers \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "sales-analysis",
    "memory_limit": "4g",
    "network_policy": {"type": "disabled"}
  }'
不要把容器当作会话数据库

容器过期后不能恢复,内存中的 Python 对象和容器文件都会丢失。需要跨天使用的输入、任务状态和结果,应存放在自己的数据库或对象存储,再在新容器中重建。

内存、过期与复用边界

官方当前提供 1g、4g、16g 和 64g 内存档位,默认是 1 GB。内存选择在容器整个生命周期内有效;不要为了“可能更快”直接选最大档,应按真实文件、峰值内存、执行时间和成功率做基线。

  • 容器连续 20 分钟未使用会过期,之后用它创建 Response 会失败。
  • 过期容器不能重新激活;创建新容器并重新上传输入。
  • 获取容器、添加文件或删除文件会刷新 last_active_at。
  • 自动创建的容器也能通过 /v1/containers 接口查看和管理。

怎样上传输入并下载生成文件?

可以把 Files API 的 file_id 放入 auto 容器配置,也可以通过 Create container file 把文件加入显式容器。模型输入中的文件会自动复制进容器,但 Files API 的上传与保留限制、Responses 输入限制和容器可处理格式仍是不同边界。

当模型生成 CSV、PNG 等文件时,助手消息会返回 container_file_citation 注释,其中包含 container_id、file_id 与文件名。应用应把这些注释渲染为下载入口,并通过 Retrieve container file content 获取实际字节。

for (const item of response.output ?? []) {
  if (item.type !== "message") continue;
  for (const part of item.content ?? []) {
    for (const annotation of part.annotations ?? []) {
      if (annotation.type === "container_file_citation") {
        console.log(annotation.container_id,
                    annotation.file_id,
                    annotation.filename);
      }
    }
  }
}

Code Interpreter 可以联网吗?

显式容器的默认 network_policy 为 disabled,即禁用出站网络。如果确实需要访问外部数据,应使用 allowlist 只开放必要域名;不要给任意互联网访问权限,也不要让模型自己决定新增域名。

{
  "network_policy": {
    "type": "allowlist",
    "allowed_domains": ["api.example.com"],
    "domain_secrets": [{
      "domain": "api.example.com",
      "name": "EXAMPLE_TOKEN",
      "value": "由服务端密钥系统注入"
    }]
  }
}

domain_secrets 只应绑定到允许域名。日志、代码、Prompt、下载文件和错误信息都不应输出密钥值。对外部响应仍要做 Schema 校验、大小限制、超时、内容安全和提示注入隔离。

费用怎么计算?

截至 2026-11-01,官方价格页为 Hosted Shell 与 Code Interpreter 容器列出以下 20 分钟价格;页面同时说明符合条件的容器会按分钟计费,每次会话最低 5 分钟。模型输入输出 Token 另按所选模型费率计算。

容器内存官方展示价格(每 20 分钟会话)使用建议
1 GB$0.03先作为轻量数据与计算基线
4 GB$0.12较大表格、文档或图像处理
16 GB$0.48验证确有内存需求后启用
64 GB$1.92高内存任务,必须设置预算和终止条件

真实单位成本还应包含模型 Token、失败重试、文件存储与传输、下游服务、人工复核和容器空闲。按“成功任务”记录容器档位、使用分钟数、Token、运行次数、生成文件数、错误率和总费用,参见 OpenAI API Usage 与成本。

生产安全清单

  • API Key 只放在受信任后端,不写进浏览器、Prompt、代码片段或容器输出。
  • 默认禁用网络;需要联网时使用最小域名白名单和域名级密钥。
  • 把用户文件视为不可信输入,限制类型、大小、压缩包、宏、序列化文件和解析时间。
  • 不要执行用户提供的任意安装命令或从未知 URL 下载代码。
  • 限制单任务内存、调用轮数、执行时长、输出大小和总预算。
  • 生成文件下载后做病毒扫描、MIME 校验和访问控制,再提供给最终用户。
  • 记录 request ID、response ID、container ID、代码调用、文件 ID、耗时和费用,但不要记录秘密值或完整敏感数据。

常见故障怎么排查?

现象优先检查处理
模型没有运行 Python模型工具支持、Prompt、tool_choice、输出项明确要求使用 Python tool;必要时设 required,并读取 code_interpreter_call
容器已过期last_active_at 与容器状态新建容器、重新上传文件,不能恢复旧内存
找不到输入文件file_id、项目权限、复制状态和格式在同一项目验证文件,检查容器文件列表
生成文件没有下载入口message annotations解析 container_file_citation 后调用文件内容接口
外部请求失败network_policy、allowed_domains、DNS/TLS、超时只添加必要域名,验证凭证与响应,不改成任意联网
内存不足或成本过高文件规模、内存档位、循环和失败重试先切分输入和优化代码,再按监控升级内存

常见问题

OpenAI Code Interpreter 和 Function Calling 有什么区别?

Code Interpreter 是 OpenAI 托管的 Python 沙箱,由模型在容器中写代码、运行代码并处理文件;Function Calling 只是让模型请求你自己的函数,实际代码、权限、网络和副作用由你的应用执行。需要自有业务系统或写操作时使用 Function Calling,需要受控 Python 计算与文件分析时使用 Code Interpreter。

auto 容器和显式创建容器怎么选?

一次性分析或不想自行管理生命周期时可使用 container.type=auto;需要提前上传文件、设置网络白名单、控制内存或在多个请求间显式复用时,可先调用 /v1/containers 创建容器,再把 container ID 传给 Responses API。两种方式创建的容器都应按临时资源管理。

Code Interpreter 容器多久过期?

官方指南当前说明,容器连续 20 分钟未使用就会过期;过期后状态不能恢复,容器数据会被丢弃且不可找回。读取容器、添加文件或删除文件等容器操作会刷新 last_active_at。需要保留的结果应在容器有效期内下载到自己的持久存储。

Code Interpreter 可以访问互联网吗?

容器的出站网络默认禁用。需要联网时应使用 network_policy allowlist,只开放任务必需的域名;如需凭证,可使用只对指定域名注入的 domain_secrets,而不要把密钥写进提示词、代码或输出日志。

可以把多少文件放进 Code Interpreter?

Responses 的自动 Code Interpreter 配置当前允许提供最多 50 个 file_ids;具体文件格式、大小与上游 Files API 限制仍需分别核对。模型输入中的文件会自动复制到容器,也可以通过容器文件接口添加、列出和下载文件。

怎样下载 Code Interpreter 生成的 CSV 或图片?

模型生成文件后,助手消息的 annotations 会出现 container_file_citation,其中包含 container_id、file_id 和 filename。应用应解析该注释,调用 Retrieve container file content 下载字节,并把需要长期保留的文件保存到自己的对象存储。

Code Interpreter 怎样计费?

截至 2026-11-01,官方价格页按 20 分钟会话展示 1 GB、4 GB、16 GB、64 GB 容器价格,并说明符合条件的容器会按分钟计费且每次会话最低 5 分钟;模型输入输出 Token 另按所选模型计费。价格会变化,上线和估算前应重新查看官方价格页。

本文核对日期为 2026-11-01。容器能力、支持模型、文件格式、内存、网络策略、过期规则与价格可能调整;生产发布前请重新读取 Code Interpreter、Containers API、Responses API 与 Pricing 官方文档。

先用 1 GB 容器建立真实成本基线

用脱敏样本验证代码调用、文件解析、结果准确、下载链路、过期恢复、网络隔离与单位成功任务成本,再决定是否扩大内存或自动化范围。