中文

沙箱

沙箱

ChatGPT 和 Codex 客户端中的沙箱工作原理

沙箱是一道边界,让智能体能够自主执行操作,同时又不会获得对你计算机不受限制的访问权限。当本地聊天在 ChatGPT 桌面应用Codex CLIIDE 扩展中运行命令时,这些命令会在 受限环境中运行,而不是默认以完整访问权限运行。

该环境规定了智能体可以自行执行哪些操作,例如可以修改哪些文件,以及命令能否访问网络。当任务始终处于 这些边界内时,智能体可以持续推进,无需停下来请求确认。当它需要越过边界时, 审批流程便会接管。

沙箱的作用

沙箱适用于派生的命令,而不仅仅是内置文件 操作。如果智能体运行 git、包管理器或测试运行器等工具, 这些命令会继承相同的沙箱边界。

Codex 在各操作系统上使用平台原生的强制执行机制。具体实现因 macOS、Linux、WSL2 和原生 Windows 而异,但各个界面中的理念 相同:为智能体提供一个有边界的工作空间,使常规任务能在明确的限制内 自主运行。

为何重要

沙箱可以减少审批疲劳。智能体不必要求你确认每个 低风险命令,而是可以在你已批准的边界内读取文件、进行编辑并运行常规项目 命令。

它还为智能体工作提供了更清晰的信任模型。你信任的不只是 智能体的意图,还包括智能体确实在强制限制内运行。 这样一来,你可以更放心地让智能体独立工作,同时仍能明确知道它何时会 停下来寻求帮助。

开始使用

默认权限模式会自动应用沙箱。

前提条件

macOS 上,沙箱通过内置 Seatbelt 框架开箱即用。

Windows 上,如果你在 PowerShell 中运行,Codex 会使用原生 Windows 沙箱;如果在 WSL2 中运行,则会使用 Linux 沙箱实现。

Linux 和 WSL2 上,请先使用包管理器安装 bubblewrap

sudo apt install bubblewrap
sudo dnf install bubblewrap

Codex 会使用它在 PATH 上找到的第一个 bwrap 可执行文件。如果没有可用的 bwrap 可执行文件,Codex 会回退到随附的辅助程序,但该辅助程序 要求系统支持创建非特权用户命名空间。安装提供 bwrap 的 发行版软件包,可以让此配置保持可靠。

当缺少 bwrap,或者辅助程序无法创建所需的用户命名空间时,Codex 会在启动时显示警告。 对于限制此 AppArmor 设置的发行版,建议加载 bwrap AppArmor 配置文件,使 bwrap 能够 继续工作,而无需在系统范围内禁用该限制。

权限的工作原理

使用当前界面的权限控件,更改 Codex 处理本地 操作的方式。

审批决定 Codex 在执行操作前何时暂停,而沙箱 决定命令可以访问哪些文件和网络资源。如果审批提供不同的授权范围,例如仅批准一次或在当前会话中批准, 请选择能让任务继续执行的最小范围。默认保持项目 边界;对于不相关的仓库,应使用不同的项目或工作树,而不要 扩大访问范围。

ChatGPT Work 在托管的隔离环境中运行代码和 shell 命令。 工作区策略和工具专属控件决定可用的功能。 如果该设置可用,请使用 Settings > Data controls > Work network access 管理代码和 shell 命令的网络访问权限。开启 Allow public internet access 后,这些命令即可访问公共 互联网。关闭时,命令只能访问托管允许列表中的必要主机名。

网页搜索、插件和远程浏览器有各自独立的控制项。 更改会在当前代码或 shell 运行结束、Work 刷新其执行环境后生效。ChatGPT 网页版不提供本地 Codex 沙箱或审批模式选择器。

在 ChatGPT 桌面应用中,使用输入框下方的权限控件。 根据你的配置,菜单可能包含 Ask for approval、 适用于符合条件的审批请求的 Approve for meFull access,以及命名或 自定义权限配置文件。

在 CLI 中,输入 /permissions 打开权限选择器并更改当前权限配置文件。

在 IDE 扩展中,使用输入框下方的权限控件。 根据你的配置,菜单可能包含 Ask for approval、 适用于符合条件的审批请求的 Approve for meFull access,以及命名或 自定义权限配置文件。

配置默认设置

若要每次都以相同的行为启动,请在 config.toml 中设置默认值。 配置基础介绍其工作方式,配置参考则记录了 sandbox_modeapproval_policyapprovals_reviewersandbox_workspace_write.writable_roots 的确切键。使用这些设置可以决定智能体默认获得多大的 自主权、可以写入哪些目录、何时应暂停以等待审批,以及由谁审核符合条件的审批请求。

概括而言,常见的沙箱模式有:

  • read-only:智能体可以检查文件,但未经审批不能编辑文件或运行 命令。
  • workspace-write:智能体可以读取文件、在工作区内编辑,并在该边界内运行 常规本地命令。这是本地工作的默认低干扰 模式。
  • danger-full-access:智能体不受沙箱限制地运行。这会移除 文件系统和网络边界,仅应在你希望 智能体拥有完整访问权限时使用。

常见的审批策略有:

  • untrusted:智能体在运行不属于其可信集合的命令前会请求 审批。
  • on-request:智能体默认在沙箱内工作,需要越过该边界时会 询问。
  • never:智能体不会因审批提示而停下。

当审批采用交互方式时,你还可以通过 approvals_reviewer 选择由谁审核:

  • user:向用户显示审批提示。这是默认设置。
  • auto_review:符合条件的审批提示会发送给审核智能体(请参阅 自动审核)。

完整访问权限是指同时使用 sandbox_mode = "danger-full-access"approval_policy = "never"。相比之下,风险较低的本地自动化 预设会同时使用 sandbox_mode = "workspace-write"approval_policy = "on-request",或使用对应的 CLI 标志 --sandbox workspace-write --ask-for-approval on-request。随后,你可以保留 approvals_reviewer = "user" 以进行手动审批,或设置 approvals_reviewer = "auto_review" 以自动审核审批请求。

如果需要智能体跨多个目录工作,可写根目录允许你 扩展它可以修改的位置,而无需完全移除沙箱。如果 需要更宽或更窄的信任边界,请调整默认沙箱模式 和审批策略,而不要依赖一次性例外。

当工作流需要特定例外时,请使用规则。规则 允许你对沙箱外的命令前缀设置允许、提示或禁止,通常 比大范围扩大访问权限更合适。有关 IDE 专属设置 入口,请参阅 Codex IDE 扩展设置

自动审核(如果可用)不会改变沙箱边界。它是处理该边界上审批请求的一种 approvals_reviewer,例如沙箱权限提升、被阻止的网络访问,或仍需审批的 有副作用工具调用。沙箱内已允许的操作无需额外审核即可运行。 有关审核方生命周期、触发器类型、拒绝语义和配置详情,请参阅 自动审核

平台详细信息位于各平台专属文档中。有关原生 Windows 的设置、 行为和问题排查,请参阅 Windows。有关沙箱与审批的管理员 要求和组织级限制,请参阅 智能体审批与安全