打造 SPACE:為長期運行的代理提供安全且高效的執行階段
SPACE 是 Perplexity 的安全、高效 沙箱 平台,為長期運行的 代理 工作流程 以及快速、隔離的程式碼執行提供支援。
隨著具代理能力的 工作流程 變得更長且更具自主性,AI 代理所運行的環境與驅動它們的模型同等重要。代理需要執行實際的工作,例如執行程式碼、編輯檔案系統,以及在數小時或數天內執行多步驟任務。使用者希望代理能夠存取其執行這些任務所需的工具和檔案,但也需要確保即使代理遭到入侵,其系統仍能保持安全。沙箱 就是讓這一切成為可能的原因:一個隔離的環境,代理可以在其中自由運作,同時主機、其他租戶和敏感憑證保持受保護狀態。
傳統的基於容器的 沙箱 方法並不是為了這些任務而設計的。它們通常假設是生命週期短、無狀態的作業,並將核心作為單一故障點。相比之下,代理 工作階段 是長期且具狀態的:代理會累積數小時的上下文、工作檔案系統,以及無法簡單丟棄並從頭重建的執行中行程。此外,內部的工作負載預設應為不受信任的,因此需要更強的安全措施。長期運行的代理 工作階段 需要一個基質,能夠隔離具敵意的訪客、保留其狀態,並仍能在規模化下運作。
沙箱 工程面臨的主要挑戰來自於安全性、功能性和效率之間經常出現的張力。例如:
授予更廣泛的存取權限可讓代理完成更多工作,但會將系統的更多部分暴露給不受信任的工作負載。
在 沙箱 之間共享更多內容可以加快建立速度,但會擴大攻擊面。
更頻繁地進行快照可改善復原並啟用還原等功能,但需要時間和儲存 空間。
代理 沙箱(例如執行程式碼、使用 Agent Skills,或在 Computer 查詢中執行 Search as Code 管線所需的沙箱)需要兼顧這三者。在過去幾個月裡,我們一直努力不懈地設計驅動我們產品的下一代代理基礎設施。今天,我們隆重介紹 SPACE (Sandboxed Platform for Agentic Code Execution):一個專為具備規模化、安全、可靠且高效的 代理 工作流程 而建構的 沙箱 平台。上個月,我們開始推出 SPACE 作為驅動 Perplexity Computer 的 沙箱 層。在過去的一週裡,它安全地支援了數百萬次 沙箱 建立和數千萬次重新連接,啟動時間比我們先前的解決方案快 3 到 5 倍。
本文介紹了 SPACE 背後的架構與設計決策。截至今日,100% 的 Computer 工作階段 現已在 SPACE 上運行。我們很高興將此平台部署到更多介面,為使用者和開發人員提供一流的代理執行階段。
架構
從宏觀來看,系統組織為三個層級。
控制平面是系統的大腦,決定應該存在什麼以及在哪裡存在。它由 API 閘道器和叢集層級狀態管理模組組成。
節點本地服務是用於執行控制平面計畫所需的本地機制。它們擁有 沙箱 生命週期、儲存、網路以及其背後的特權操作。
沙箱 本身就是隔離的執行環境。它實作為虛擬機器,並與 space 守護行程配對:這是一個訪客內部的背景行程,為工作負載代理檔案系統、行程和網路存取。

控制平面
API 閘道器是進入點。傳入的請求會經過身份驗證和授權,然後轉化為期望狀態的記錄。
控制平面在設計上是無狀態的,所有持久性資訊都卸載到共用資料庫中。它追蹤關於 沙箱 的叢集層級資訊,例如它們被分配到哪個節點、在哪裡運行,以及是否已備份到持久性儲存。它不斷將期望狀態與觀察到的狀態進行比較,並推動兩者走向收斂。操作具備冪等性,因此控制平面在任何當機、重新啟動或部分故障後都能自動恢復。
節點本地服務
節點本地服務執行準備範本、啟動 沙箱 、連接網路以及執行主機端執行階段服務的實際工作。每個節點運行一小組守護行程,管理在其上放置的每個 沙箱 ,且該節點是這些 沙箱 即時狀態的真實來源。
沙箱 管理器知道哪些 沙箱 正在運行、已暫停、已掛起或已停止,以及它們的實際資源。它以非特權方式運行,並將所有特權工作委派給節點管理器(負責代理底層基礎物件的單一根行程)。儲存是在本地且持久地處理的:目前 沙箱 狀態的快照會儲存在節點上,並且 儲存體區段 管理器會根據需要將快照和範本移入和移出物件儲存,以啟用跨節點操作。安全閘門保護 沙箱 可以觸及的範圍:憑證管理器在各服務授權下管理憑證注入,而網路閘門強制執行每個 沙箱 的外寄流量政策。
沙箱
沙箱 本身是一個虛擬機器 (VM),擁有自己的訪客核心,在硬體隔離邊界後面運行使用者的工作負載。由於每個 沙箱 都有自己的核心,因此遭到入侵的工作負載無法退而求其次地將共用的主機核心作為單一故障點;即使它成功利用了其訪客核心,該入侵也會被限制在 沙箱 的 VM 邊界內,而不會擴散到其他工作負載。
一個 space 守護行程在每個虛擬機器內部運行,作為一個輕量級代理,調節平台在訪客內部執行的每個動作或修改。它處理檔案系統存取和行程管理。它還回報訪客就緒狀態並追蹤活動,以便平台知道 沙箱 何時進入閒置狀態並可以暫停或回收。至關重要的是,space 守護行程不直接與客戶端對話,而是透過私有的 VM 內通道與主機通訊。這將所有訪客互動保持在受控路徑上,並將 沙箱 自身的網路保留給工作負載的外寄流量使用。
三大支柱:安全性、功能性和效率
接下來,我們將深入探討 SPACE 必須在三個支柱(安全性、功能性和效率)中實現的關鍵屬性。如前所述,這三者互相牽制。然而,如果我們希望支援能夠應對當今模型能力的強大代理,我們就不能在其中任何一項上妥協。安全性可防止不受信任、可能具敵意的工作負載危害主機、其他租戶或使用者的機密。功能性為代理提供所需的豐富生命週期。效率使所有這些在有限的記憶體、磁碟和運算資源下變得經濟實惠。
安全性:保護資料與系統
沙箱 平台需要強大的安全性,以確保在 沙箱 內部運行的錯誤甚至惡意程式碼不會在其他地方造成有害影響。如果不強制執行嚴格的外寄流量控制並將機密排除在 沙箱 之外,代理的一個錯誤步驟就可能洩漏使用者的金鑰或外洩工作。

SPACE 採用分層方法來確保 沙箱 的安全性。沙箱 隔離包含兩個元件:VM 隔離和主機 OS 行程隔離。必須同時突破這兩者才能進行跨 沙箱 存取。與 沙箱 的通訊受到嚴格控制;行程只能透過專用通道進行通訊。網路閘門強迫所有外寄流量透過它進行。 space 守護行程是(不受信任的)沙箱與(受信任的)平台之間唯一獲准的通道。
憑證絕不會存放在代理可以竊取它們的地方。憑證存放區位於 沙箱 邊界之外,負責憑證的生命週期。它透過可外掛的保險庫後端儲存和檢索機密、使用階層式範圍解析憑證、管理諸如注入方法和到期時間等後設資料,並對所有存取強制執行速率限制和稽核記錄。必要時,憑證會在網路層注入或由瀏覽器代理自動填入,而不是直接進入 沙箱 。
資料在靜止時受到保護。SPACE 支援 BYOK(自帶金鑰,Bring Your Own Key)以保護外部儲存的資料。加密金鑰來自客戶的金鑰管理服務,且絕不會進入 沙箱 。如果企業撤銷金鑰,其資料將變得無法讀取。
功能性:賦能代理 工作流程
為了支援 代理 工作流程,沙箱 需要豐富的生命週期支援。它們必須快速且大規模地建立,因為代理可能會同時啟動許多個,並且不應該等待其中任何一個開機。它們必須無限期地持續存在,因為工作階段可能會持續幾分鐘或運行數月。它們必須乾淨俐落地暫停,有時甚至持續很長時間,例如當任務因等待人類輸入而受阻時。而且它們必須支援分叉、回滾和當機復原,以便工作階段可以分支、復原錯誤步驟或在故障後恢復,而不是重新開始。
SPACE 支援上述所有功能。它將完整的 沙箱 生命週期建模為一個明確的狀態機,這正是使建立、暫停、恢復、掛起和還原等操作成為可能的原因。

快照是大多數這些功能背後的機制。排程器以固定的間隔執行,並擷取兩種類型的快照:磁碟快照(檔案系統的時間點複本)和完整快照(整個暫停的 VM 的檢查點)。磁碟快照擷取頻率較高,而完整檢查點頻率較低。所有東西都保留在節點上,且保留期限會依層級遞減。這些快照可用於工作階段內復原;例如,磁碟快照可用於將檔案系統滾回以復原破壞性命令,而完整檢查點則可讓當機的 沙箱 從最近的運行點恢復,而不是從冷磁碟恢復。
當 沙箱 被掛起時,VM 會被暫停,系統會拍攝完整快照,並將來自完整快照的 成品 上傳到物件儲存。資料庫列會追蹤該快照,並且只有在每個 成品 都順利傳送後才會變為可還原狀態,因此部分上傳的快照永遠不會被恢復為損毀狀態。還原是掛起的相反操作。由於快照存在於物件儲存中而不是原始節點上,因此任何節點都可以將 沙箱 帶回。排程器挑選一個節點,該節點下載 成品 ,在範本之上重新套用檔案系統差異,並從其擷取的狀態恢復 VM。
效率:最佳化時間與 空間
在孤立環境中實作上述功能是不夠的;它們還必須在嚴格的資源限制下切實可行。節點上的記憶體和磁碟是有限的,使用者希望代理盡可能快地運行,因此生命週期操作在時間和 空間 上都必須是低成本的。每當建立、暫停或分支 沙箱 時,我們都無法負擔複製完整機器映像的成本。
一項關鍵的設計選擇使這一切成為可能:檔案系統。SPACE 使用 btrfs 作為 沙箱 儲存的節點本地檔案系統。Btrfs(B-tree 檔案系統)將寫時複製 (copy-on-write) 檔案系統與整合式邏輯卷軸管理結合在一起。這具有幾個好處:
重新連結 (Reflink) 複本速度很快,因為您可以共用底層範圍,所以只需要複製後設資料。
快照是不可分割且快速的,因為您只需建立一個新的根目錄。
只需要極少的儲存 空間,因為您只儲存變更的部分。
因此,可以快速建立和還原 沙箱 。我們不每次都從頭建立 沙箱 ,而是保留一個溫暖的 Pod 池,其磁碟上已經具備常用的通用範本,並透過將請求繫結至範本已相符的 Pod 來滿足請求。然後,賦予該 沙箱 其專屬的可寫入根檔案系統就是寫時複製 (copy-on-write) 複製,而不是完整複製。當沒有合適的溫暖 Pod 時,我們會按需實作範本;我們將對同一映像的並行請求合併為單一下載,因此一波相同的請求不會變成一波相同的工作。
結果是一個同時具備強大功能、輕量化且極速的 沙箱 執行階段。當我們推出 SPACE 時,我們將其與先前的 沙箱 提供者在相同的生產流量上並行運行。在發表的第一週期間,SPACE 在整個分佈範圍內建立 沙箱 的速度快了三到五倍。具體而言,中位數建立延遲從 185 毫秒下降到 60 毫秒(提升 3.1 倍),而第 90 百分位延遲從 447 毫秒下降到 89 毫秒(提升 5.0 倍)。我們在其他效能和資源使用指標上也觀察到了類似的數量級提升。

它還便於拍攝滾動磁碟快照,因為它們速度快、 空間 效率高,且不需要暫停 沙箱 。此外,高效的差異儲存減少了儲存這些快照所需的 空間 。
結論
在設計複雜系統時,人們很容易選擇單一目標進行孤立的最佳化。但前沿代理的開發人員要求安全性、功能性和效率三者兼具。透過 SPACE,我們著手在所有三個支柱上實現 Pareto 改善。
每個獨立的設計選擇都可以同時達成多個目標,從而使這種微妙的平衡成為可能。每個 沙箱 的 VM 為每個工作負載提供自己的核心,透過強隔離加強安全性,同時也提供了快照依賴的乾淨檢查點邊界。Btrfs 實現了對代理執行階段至關重要的快照、分叉和其他操作的高效實作。 space 守護行程將所有訪客互動保持在受控的主機端路徑上,在封閉訪客-主機邊界的同時保留了代理的機動自由。中央網路閘門協調外寄流量和憑證注入,而不會向訪客暴露任何機密。
這些和其他設計決策的結果是一個能夠大規模實現真實世界代理協調的平台。SPACE 提供了基質,長期運行的具狀態代理可以在其上安全地應對任意複雜度或持續時間的工作,而不會犧牲效能或安全性。
今天,SPACE 已經為數百万個 Perplexity Computer 工作階段 提供支援。我們的目標是讓 SPACE 作為任何環境中佈建和控制 沙箱 的統一層:從 Linux 微型虛擬機器到 Windows 訪客,再到使用者自己的本地機器。我們正努力將 SPACE 推向這些新環境,以便開發人員能夠交付在使用者工作的所有地方都能運作的 AI 產品。
如果您渴望塑造驅動未來前沿代理的運算層,我們誠摯邀請您加入我們的團隊。