繁體中文

沙箱

瞭解沙箱如何在 ChatGPT 和 Codex 客戶端中工作

沙箱是一道邊界,讓智能體可以自主行動,而不獲得對機器的無限制存取權限。本機聊天在 ChatGPT 桌面應用Codex CLIIDE 擴充套件中執行命令時,預設會進入受限環境,而不是直接獲得完全存取權限。

該環境決定智能體可以自行完成哪些操作,例如能修改哪些檔案、命令能否使用網路。任務保持在邊界內時,智能體可以持續工作而無需反覆確認;需要越過邊界時,則會進入審批流程。

沙箱做什麼

沙箱適用於派生的命令,而不只限制內建檔案操作。如果智能體執行 git、包管理器或測試 runner,這些命令會繼承相同的沙箱邊界。

Codex 在每種作業系統上使用平台原生的強制機制。macOS、Linux、WSL2 和原生 Windows 的實現不同,但各介面的目標一致:為智能體提供邊界明確的工作區域,使日常任務可以在清晰限制內自主執行。

為什麼這很重要

沙箱可以減少審批疲勞。智能體無需為每條低風險命令請求確認,而可以在已獲核准的邊界內讀取檔案、編輯內容並執行日常專案命令。

它也為智能體工作提供更清晰的信任模型:你依賴的不只是智能體的意圖,還包括強制執行的限制。這樣既可以讓智能體獨立工作,也能知道它會在什麼情況下停止並請求幫助。

開始使用

預設權限模式會自動應用沙箱。

前提條件

macOS 上,沙箱使用系統內建 Seatbelt framework,無需額外設定。

Windows 上,通過 PowerShell 執行時,Codex 使用原生 Windows sandbox;通過 WSL2 執行時,則使用 Linux 沙箱實現。

Linux 和 WSL2 上,請先用包管理器安裝 bubblewrap

Ubuntu/Debian

sudo apt install bubblewrap

Fedora

sudo dnf install bubblewrap

Codex 會使用 PATH 中找到的第一個 bwrap 執行檔。如果找不到,Codex 會回退到隨附的輔助程式,但該輔助程式要求系統支援建立非特權使用者名稱空間。安裝發行版提供的 bwrap 軟體包可以讓設定更可靠。

bwrap 缺失,或輔助程式無法建立所需使用者名稱空間時,Codex 會在啟動時顯示警告。對於限制這一 AppArmor 設定的發行版,建議載入 bwrap AppArmor 設定,使 bwrap 正常工作,而不是在全域關閉限制。

權限如何工作

使用當前介面提供的權限控制項,調整 Codex 處理本機操作的方式。

審批決定 Codex 何時在執行操作前暫停;沙箱決定命令能存取哪些檔案和網路資源。當審批提供不同範圍,例如僅核准一次或核准當前會話時,請選擇能讓任務繼續的最小範圍。預設保持專案邊界;需要隔離無關儲存庫時,使用不同專案或工作樹,而不是擴大存取範圍。

在 ChatGPT 桌面應用中,權限控制項位於 composer(輸入框)下方。根據設定,選單中可能包含 Ask for approval(請求審批)、適用於部分審批請求的 Approve for me(替我核准)Full 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 flags:--sandbox workspace-write --ask-for-approval on-request。之後可以保留 approvals_reviewer = "user" 進行人工審批,或設為 approvals_reviewer = "auto_review" 進行自動審批審查。

如果智能體需要跨多個目錄工作,可以用 writable roots 擴充套件允許修改的位置,而不必完全移除沙箱。如果需要更寬或更窄的信任邊界,請調整預設沙箱模式和審批策略,不要依賴一次性例外。

工作流程需要特定例外時,請使用規則。規則允許你對沙箱外的命令字首執行允許、提示或禁止,通常比整體擴大存取權限更合適。IDE 專屬設定入口見 Codex IDE 擴充套件設定

自動審查不會改變沙箱邊界。它只是邊界處審批請求的一種 approvals_reviewer,例如沙箱權限提升、被阻止的網路存取,或仍需審批且會產生副作用的工具呼叫。已經在沙箱內獲准的操作不會額外審查。審查者生命週期、觸發類型、拒絕語義和設定詳情見自動審批審查

原生 Windows 的設定、行為和排障見 Windows。沙箱和審批的管理員要求及組織級約束見智能體審批與安全