跳到主要内容

本文为非官方中文翻译,内容以 OpenAI 官方英文文档为准。
官方来源:https://developers.openai.com/codex/cloud/environments

Cloud environments

为 Codex 自定义依赖和工具

使用 environment 来控制 Codex 在云任务期间安装和运行的内容。例如,你可以添加依赖、安装诸如 linter 和 formatter 之类的工具,以及设置环境变量。

Codex settings 中配置 environment。

Codex 云任务如何运行

当你提交一个任务时,会发生以下情况:

  1. Codex 创建一个容器,并在所选分支或 commit SHA 检出你的仓库。
  2. Codex 运行你的 setup 脚本;如果恢复的是一个已缓存的容器,还会运行一个可选的 maintenance 脚本。
  3. Codex 应用你的互联网访问设置。setup 脚本会在具有互联网访问权限的情况下运行。Agent 的互联网访问默认关闭,但如果需要,你可以启用受限或不受限访问。参见 agent internet access
  4. agent 以循环方式运行终端命令。它会编辑代码、运行检查,并尝试验证其工作。如果你的仓库包含 AGENTS.md,agent 会使用它来查找项目特定的 lint 和测试命令。
  5. 当 agent 完成后,它会显示其答案以及它所更改文件的 diff。你可以打开一个 PR,或提出后续问题。

默认 universal 镜像

Codex agent 在一个名为 universal 的默认容器镜像中运行,该镜像预装了常见的语言、软件包和工具。

在 environment 设置中,选择 Set package versions 以固定 Python、Node.js 和其他运行时的版本。

有关已安装内容的详细信息,请参见 openai/codex-universal,其中提供了一个 参考 Dockerfile,以及一个可以在本地拉取并测试的镜像。

虽然 codex-universal 为了速度和便利预装了多种语言,你也可以使用 setup scripts 向容器安装额外的软件包。

环境变量和 secrets

环境变量 会在任务的整个持续时间内设置(包括 setup 脚本和 agent 阶段)。

Secrets 与环境变量类似,但有以下区别:

  • 它们以额外一层加密方式存储,并且仅在任务执行时解密。
  • 它们仅对 setup 脚本可用。出于安全原因,在 agent 阶段开始之前,secrets 会被移除。

自动设置

对于使用常见包管理器(npmyarnpnpmpippipenvpoetry)的项目,Codex 可以自动安装依赖和工具。

手动设置

如果你的开发设置更复杂,你也可以提供自定义 setup 脚本。例如:

# Install type checker
pip install pyright

# Install dependencies
poetry install --with test
pnpm install

setup 脚本在与 agent 分离的 Bash 会话中运行,因此像 export 这样的命令不会持续到 agent 阶段。要持久化环境 变量,请将它们添加到 ~/.bashrc,或在 environment 设置中配置它们。

容器缓存

Codex 最多会缓存容器状态 12 小时,以加快新任务和后续任务的速度。

当一个 environment 被缓存时:

  • Codex 克隆仓库并检出默认分支。
  • Codex 运行 setup 脚本,并缓存生成的容器状态。

当恢复一个已缓存的容器时:

  • Codex 检出为该任务指定的分支。
  • Codex 运行 maintenance 脚本(可选)。当 setup 脚本是在较旧的 commit 上运行且依赖需要更新时,这会很有用。

如果你更改了 setup 脚本、maintenance 脚本、环境变量或 secrets,Codex 会自动使缓存失效。如果你的仓库发生了使缓存状态不兼容的更改,请在 environment 页面上选择 Reset cache

对于 Business 和 Enterprise 用户,缓存会在所有有权访问该 environment 的用户之间共享。使缓存失效将影响你工作区中该 environment 的所有用户。

互联网访问和网络代理

在 setup 脚本阶段,为安装依赖提供互联网访问。在 agent 阶段,互联网访问默认关闭,但你可以配置受限或不受限访问。参见 agent internet access

Environments 在一个 HTTP/HTTPS 网络代理之后运行,以实现安全和防滥用。所有出站互联网流量都会通过此代理。