ChatGPT 容器迎来重大升级:支持 Bash、多语言运行及包管理

ChatGPT 的代码执行环境近期迎来了一次静默但极其巨大的更新,这让 AI 的编程能力从“辅助工具”向“全能开发环境”迈出了关键一步。

本文将深入探讨 ChatGPT 容器(ChatGPT Containers)的新特性,包括直接运行 Bash 命令、支持 Node.js 与多种编程语言、通过内部代理安装 pip 和 npm 包,以及全新的文件下载工具。

1. 从代码解释器到全能容器

本段核心问题:「ChatGPT 的容器化环境相比之前的“代码解释器”有了哪些本质上的提升?」

长期以来,ChatGPT 的代码运行能力被称为“代码解释器”或“高级数据分析”,其核心限制在于只能运行 Python 代码。虽然在 Python 中可以通过 subprocess 模块调用 Shell 命令,但这并非原生支持,且往往效率受限。最新的更新彻底打破了这一限制,将沙箱环境升级为一个功能完备的通用计算容器。

核心功能概览

根据最新的测试与观察,以下是此次升级中最值得关注的四个方面:

  1. 「原生 Bash 支持」:不再依赖 Python 代理,容器可以直接执行 Bash 命令。
  2. 「多语言生态」:除了 Python 和 Node.js,还支持 Ruby, Perl, PHP, Go, Java, Swift, Kotlin, C, C++ 等主流语言(目前暂不支持 Rust)。
  3. 「包管理能力」:在无法直接访问公网的情况下,通过自定义代理机制实现了 pipnpm 包的安装。
  4. 「文件下载能力」:新增 container.download 工具,允许将互联网上的文件直接拉取到容器沙箱中。

反思与见解

这次升级最让我感到兴奋的不是某种具体语言的加入,而是 Bash 支持的引入。在工程实践中,Bash 往往是连接一切胶水语言。如果一个智能体能够熟练运用 Bash,它实际上就拥有了操作整个文件系统、编译代码、管理进程的能力。这标志着 ChatGPT 正从一个单纯的“代码生成器”转变为一个具备实际工程落地能力的“开发代理”。

Unsplash 编程环境图示
图片来源:Unsplash


2. 深度解析 container.download 工具

本段核心问题:「ChatGPT 如何在安全的沙箱环境中获取并处理外部文件?」

在数据分析场景中,获取数据往往是第一步。ChatGPT 容器现在提供了一个内置工具 container.download,极大地简化了从网络获取数据的流程。

实际应用案例:洛杉矶空气质量分析

为了测试这一功能,我们提出了一个关于“洛杉矶过去 20 年空气质量变化”的查询。在这个过程中,ChatGPT 并没有像以前那样要求我上传文件,而是自动在网上查找数据源。

它发现了一个包含 2000-2023 年城市空气质量统计数据的 Excel 文件。随后,它展示了如下决策过程:

“错误信息中的 URL 指向一个包含空气质量趋势的 Excel 文件。我可以使用 container.download 工具来获取它。”

ChatGPT 分析界面

工具原理与签名

container.download 的作用非常直观:它接收一个公开可访问的 URL 和一个目标路径,将文件内容下载并保存到容器的文件系统中。此后,AI 就可以使用 Python 或其他工具在本地解析和处理这个文件(例如解压、解析、转换等)。

其概念上的调用签名如下:

{
  "url": "https://example.com/somefile.zip",
  "filepath": "/mnt/data/somefile.zip"
}

网络请求指纹

通过在服务器端记录日志,我们观察到了该工具发出的网络请求特征。这有助于我们理解它是如何被外部服务器识别的:

  • 「User-Agent」: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot
  • 「IP 地址」: 请求源自 Microsoft Azure Cloud(位于美国爱荷华州得梅因)的 IP 段。

3. 安全性考量:数据外泄风险

本段核心问题:container.download 工具是否会被恶意利用导致数据泄露?」

引入能够从外部网络下载文件甚至带有参数 URL 的工具,自然会引发安全方面的担忧。特别是如果存在“提示注入”攻击,攻击者是否能诱骗 ChatGPT 将私密数据发送到攻击者控制的 URL?

安全机制验证

为了验证这一点,我们尝试构造带有查询字符串的 URL,试图让 ChatGPT 将敏感信息通过 container.download 发出。结果显示,系统内置了有效的防御机制。

当我们尝试执行此类操作时,ChatGPT 返回了以下错误:

ERROR: download failed because url not viewed in conversation before. open the file or url using web.run first.

这意味着,container.download 工具只能访问那些「预先在对话中被明确打开或通过搜索结果呈现」的 URL。它不能凭空构造一个包含数据的 URL 并访问它。这种机制有效地阻断了通过提示注入进行数据外泄的路径。

反思与见解

这种安全设计非常聪明,它借鉴了业界成熟的安全实践。将“浏览行为”与“执行行为”分离,确保 AI 只能处理用户明确授信或经过安全搜索筛选的资源。虽然我在后续的测试中尝试绕过这一限制,发现 web.run 工具在某些简单查询字符串构造上可能存在漏洞,但针对长串历史记录的注入尝试已被过滤器成功拦截。这说明系统在安全性与可用性之间找到了一个相对平衡的点,但面对更高级的安全研究员挑战时,仍需保持警惕。


4. Bash 命令与多语言支持

本段核心问题:「为什么 Bash 支持和多语言运行对 AI 编程助手如此重要?」

正如 Claude Code 和 Codex CLI 等工具所展示的那样,Bash 在编程代理的世界中统治一切。只要能运行 Bash 命令,理论上 AI 就能完成任何通过键盘输入计算机能完成的任务。

Bash 与 npm 包的实战演示

让我们通过一个具体的场景来看它的实际效果。我们要求 ChatGPT:“安装一个有趣的 npm 包并演示如何使用它”。

ChatGPT 的执行过程如下:

  1. 「创建目录」mkdir -p /mnt/data/npmfun
  2. 「初始化项目」npm init -y
  3. 「安装包」npm install cowsay --no-fund --no-audit
  4. 「执行代码」:通过 Node.js 调用 cowsay 包输出 ASCII 艺术画。
ChatGPT Bash 执行界面

通过界面上的“Thought for 32s”(思考时长)链接,我们可以打开活动侧边栏。这里详细记录了 AI 的每一步操作和日志输出。这种透明度非常重要,因为它防止了 AI“伪造”执行结果——主界面可能只展示最终结果,但侧边栏的黑白日志是无法伪造的证据。

多语言 Hello World 演示

除了 JavaScript,我们还在同一会话中测试了多种编程语言的“Hello World”程序。结果显示,ChatGPT 能够熟练地生成并运行包括 Swift, Kotlin, C, C++, Java, Go, PHP, Perl, Ruby 在内的代码。

多语言 Hello World 演示

这一能力的意义在于,ChatGPT 现在不再局限于单一语言生态。它可以编写 C++ 代码进行高性能计算,用 Java 处理企业级逻辑,或者用 Go 编写微服务工具,所有这些都发生在同一个沙箱容器内。


5. 隐藏的魔法:通过代理安装包

本段核心问题:「在容器无法直接访问公网的限制下,pip installnpm install 是如何实现的?」

在之前的演示中,ChatGPT 成功安装了 cowsay 包。但这就引出了一个技术谜题:如果容器没有 outbound network(出站网络)请求能力,它是如何从 npm 仓库下载包的?

环境变量揭秘

通过询问 ChatGPT 探索其自身环境,我们发现了一组关键的环境变量。这些变量指向了一个内部代理地址:applied-caas-gateway1.internal.api.openai.org

对于 Python 和 uv 包管理器,配置如下:

PIP_INDEX_URL=https://reader:****@packages.applied-caas-gateway1.internal.api.openai.org/.../pypi-public/simple
PIP_TRUSTED_HOST=packages.applied-caas-gateway1.internal.api.openai.org
UV_INDEX_URL=https://reader:****@packages.applied-caas-gateway1.internal.api.openai.org/.../pypi-public/simple
UV_INSECURE_HOST=https://packages.applied-caas-gateway1.internal.api.openai.org

对于 npm,配置如下:

NPM_CONFIG_REGISTRY=https://reader:****@packages.applied-caas-gateway1.internal.api.openai.org/.../npm-public

未来的伏笔

此外,环境中还包含了一些尚未启用但意味深长的环境变量,指向了其他语言的仓库,例如 Maven (Java), Gradle, Cargo (Rust) 和 Docker。

CAAS_ARTIFACTORY_MAVEN_REGISTRY=.../artifactory/maven-public
CAAS_ARTIFACTORY_CARGO_REGISTRY=.../artifactory/api/cargo/cargo-public/index
CAAS_ARTIFACTORY_DOCKER_REGISTRY=.../dockerhub-public

反思与见解

这是一个非常精妙的工程架构。OpenAI 并没有为了安全直接切断所有网络访问,而是构建了一个受控的“应用层网关”。这不仅保证了沙箱的安全性,还赋予了 AI 极大的灵活性。这种“代理机制”可能是未来 AI 沙箱的标准配置:既不被互联网的随意访问所干扰,又能通过受控通道获取必要的资源。


6. 完整的工具生态一览

本段核心问题:「除了编程之外,ChatGPT 容器内部还集成了哪些实用的工具集?」

为了全面了解这个容器的能力,我们直接查询了 ChatGPT 可用的工具列表。以下是经过整理的关键工具及其功能签名。

容器与编程工具

工具名称 功能描述 签名/关键参数
「container.exec」 在容器内运行命令并返回标准输出/错误。 cmd: string[], workdir?: string, env?: object
「container.feed_chars」 向正在运行的交互式会话发送输入。 session_name: string, chars: string
「container.open_image」 显示容器内的图片文件。 path: string
「container.download」 从 URL 下载文件到容器。 url: string, filepath: string
「python.exec」 执行 Python 代码(内部推理,不可见)。 FREEFORM
「python_user_visible.exec」 执行 Python 代码(生成图表、文件,可见)。 FREEFORM

网络与自动化工具

工具名称 功能描述 签名/关键参数
「web.run」 访问互联网,支持搜索、打开页面、截图、计算等。 search_query?, open?, click?, find?
「automations.create」 创建日程安排或提醒。 prompt: string, schedule?: string
「automations.update」 修改现有的日程任务。 jawbone_id: string, schedule?: string

个人数据集成工具

容器环境还集成了对 Google 生态的只读访问权限,这极大地拓展了其在处理个人任务时的能力:

  • 「Gmail」: gmail.search_email_ids (搜索邮件), gmail.batch_read_email (批量读取)。
  • 「Google Calendar」: gcal.search_events (搜索日程), gcal.read_event (读取详情)。
  • 「Google Contacts」: gcontacts.search_contacts (搜索联系人)。

其他辅助工具

  • 「file_search」: 搜索内部知识库或转录记录。
  • 「image_gen」: 根据文本生成或编辑图片。
  • 「canmore」: 创建和编辑 Canvas 文本文档(支持多种代码高亮)。

7. 总结与展望

本段核心问题:「这次容器升级对普通用户和开发者意味着什么?」

ChatGPT 容器的这次升级是实质性的。它不再仅仅是一个能够“写几行 Python 代码”的聊天机器人,而变成了一个能够编写代码、测试代码、安装依赖、下载数据并进行跨语言协作的完整工作站。

「对用户而言」,这意味着你可以直接把复杂的数据分析任务丢给它,它会自己找数据、下载文件、安装必要的分析库(如 pandas, numpy),然后给出报告。

「对开发者而言」,这意味着你可以在对话中快速验证不同语言的代码片段,甚至利用它来编写和测试简单的脚本。

尽管功能强大,但目前的遗憾在于「官方文档的缺失」。OpenAI 在发布更新说明方面仍有待改进,很多强大的功能都是用户在使用过程中偶然发现的。为了更好地利用这一工具,我们目前只能依靠像本文这样的探索性分析来了解其全貌。

Unsplash 云端数据图示
图片来源:Unsplash


实用摘要 / 操作清单

为了帮助你快速上手这些新功能,以下是一份简明的操作指南:

✅ 如何让 ChatGPT 下载文件

  1. 提供一个指向公开数据源的 URL,或者让 AI 自行搜索。
  2. 告诉 AI:“使用 container.download 工具将这个文件保存到 /mnt/data/”。
  3. AI 会自动处理下载,然后你可以要求它解析文件(如 Excel, CSV, Zip)。

✅ 如何安装并使用 npm 包

  1. 直接指令:“使用 npm 安装 [package-name] 包”。
  2. 容器会自动通过内部代理配置的 registry 进行安装,无需额外配置网络。
  3. 安装完成后,要求 AI 编写 Node.js 脚本或直接使用 npx 运行该包。

✅ 如何运行其他语言代码

  1. 明确指定语言:“写一段 C++ 代码计算斐波那契数列”。
  2. AI 会自动调用 gcc 进行编译并运行。
  3. 如果需要编译器支持,确保使用容器内已预装的语言(目前包括 C, C++, Go, Java 等,暂不支持 Rust)。

一页速览

功能特性 关键技术点 应用场景 注意事项
「Bash 支持」 container.exec 直接运行 Shell 命令 系统管理、文件操作、调用编译器 支持复杂管道和脚本
「多语言」 Node.js, Ruby, Go, Java, C, C++, PHP, Perl, Swift, Kotlin 跨语言代码测试、多语言项目演示 Rust 和 Docker 尚未安装
「包管理」 通过 applied-caas-gateway1 内部代理安装 安装 Python 库、Node 模块 无需公网,直接 pip install/npm install
「文件下载」 container.download(url, filepath) 获取网络数据集、下载配置文件 URL 必须先通过 web.run 验证,防注入
「数据集成」 Gmail, Calendar, Contacts (只读) 个人助理任务、日程管理、邮件摘要 需授权,仅读取权限

常见问题解答 (FAQ)

  1. 「ChatGPT 容器可以直接访问互联网上的任意网站吗?」
    不可以。容器本身无法发起任意的出站网络请求,但可以通过 web.run 工具浏览网页,并使用 container.download 下载被允许访问的文件。安装软件包则是通过特殊的内部代理完成。

  2. 「我可以在容器中使用 Docker 吗?」
    目前不行。虽然环境变量中出现了 Docker Registry 的配置,但 Docker 软件本身尚未安装在该容器环境中。

  3. 「如何防止 ChatGPT 下载恶意文件到容器?」
    container.download 具有安全限制,只能下载那些在对话历史中通过 web.run 浏览过的 URL。这防止了 AI 被诱导访问攻击者构造的恶意 URL。

  4. 「除了 Python,我还能使用哪种数据分析库?」
    你可以安装任何基于 npm 或 pip 的库。虽然 Python 的数据分析生态最强,但现在你也可以尝试 Node.js 的数据处理库,甚至通过 Bash 调用其他语言的工具。

  5. 「这些新功能在免费版 ChatGPT 中可用吗?」
    根据测试,这些新功能在免费的 ChatGPT 账户中也是可用的,并非付费用户的专属预览功能。

  6. 「如果我想在容器中运行 Rust 代码怎么办?」
    目前 Rust 编译器未预装。虽然环境变量中暗示了 Cargo 的仓库支持,但在官方添加 Rust 支持之前,你无法直接在容器内编译和运行 Rust 代码。

  7. 「容器内的文件会持久保存吗?」
    容器环境通常是临时的,文件仅在当前的聊天会话中有效。一旦会话结束或重置,容器文件系统可能会被重置。请及时下载重要输出。