Inngest Sandboxes 開放受限測試:代理程式如何接上可追蹤的執行步驟?
Inngest Sandboxes 將微型虛擬機接進持久工作流程,TypeScript API 目前為受限測試。解析預熱、可重播步驟、暫停與快照的差別,以及清理、秘密與網路限制。
AI 代理寫好程式後,還需要一個地方真正跑起來。若執行環境和工作流程分屬兩套服務,出錯時就得把啟動、測試、等待與重試紀錄重新拼在一起。
Inngest 在 2026 年 10 月 21 日介紹 Sandboxes,把隔離的程式執行環境接進原有持久工作流程,讓沙箱操作與其他步驟出現在同一份追蹤紀錄。
依 10 月 27 日查閱的官方文件,目前開放的是需要取得存取資格的 TypeScript 測試版,供程式呼叫的 API 介面仍可能改變,也不適合正式工作負載或無法重建的資料。
它的重點不只是啟動快。建立沙箱、下指令與銷毀環境都能接成有紀錄的步驟,但已完成步驟的結果可重播,不代表虛擬機裡的程序與檔案永遠不會遺失。
我會先看一個測試任務能否留下結果、在失敗後找到環境並完成清理,再比較啟動延遲。否則代理跑得更快,也可能只是更快留下無人管理的執行環境。
要把這些操作放進同一條可接續流程,先得區分持久函式負責協調什麼,以及微型虛擬機實際負責執行什麼。
Inngest Sandboxes 把哪一段工作隔離?
持久函式協調任務,沙箱則用獨立 Linux 微型虛擬機執行生成程式或專案測試。前者記住流程走到哪裡,後者提供真正能跑程式的作業系統。
例如代理準備測試一個專案,流程要先取得原始碼、建立環境、執行測試,再把結果交回。這些操作有先後關係,也可能在等待外部服務時中斷。
官方介紹要處理的,是讓沙箱操作和其他步驟出現在同一條追蹤紀錄,而不是讓開發者再去另一套平台找執行紀錄。
微型虛擬機有自己的檔案系統、程序、環境變數與資源限制。把代理產生的程式放進這裡,能與負責協調的工作程序分開,兩邊不必使用同一個系統環境。
能用的版本,仍受測試資格限制
依當日產品文件,目前支援的是 TypeScript v4 的實驗性介面,需要取得存取資格。Python 與 Go 支援仍在規畫中。
這會影響團隊怎麼安排測試。已有其他語言流程的人,不能因為服務名稱相同,就假設能直接套用範例。測試版介面也可能改動,必須保留調整空間。
我會把可重新取得的原始碼與可重跑的測試放進第一批評估,而不把唯一一份重要資料留在沙箱。這與官方不建議用於正式負載及無法重建資料的限制一致。
兩種角色分開之後,啟動環境的等待時間就成為下一個需要處理的成本。

先預熱再分配,如何縮短啟動等待?
Inngest 先準備尚未綁定客戶工作的虛擬機,再在分配時接上所需的資源與檔案。這和接到要求後才從頭準備整套環境的順序不同。
Inngest 把它稱為通用預熱池。池裡的環境還不知道下一項工作屬於誰,分配時再接上該工作需要的處理器、網路與檔案,減少使用者眼前的等待。
但預先啟動不是唯一條件。若每次分配仍要逐一建立耗時的主機網路元件,瓶頸就會從開機移到網路設定,表面上準備好了,程式仍不能開始。
因此,團隊選擇支援所需資源動態接入的虛擬化工具,並調整主機與虛擬機之間的網路路徑。這些選擇服務於「把已準備環境快速交出去」的同一個目的。
啟動數字要和量測範圍一起讀
文章談到毫秒級等待與低於 250 毫秒的設計需求,產品文件則使用不到一秒的啟動描述。兩種說法都來自官方,本文未在不同負載下獨立實測。
對專案測試而言,啟動後還可能需要安裝相依套件、取回資料及跑測試。即使環境很快交付,整項工作仍會被後續的下載、運算與外部服務影響。
所以比較時應把環境交付與工作完成分開記錄。前者改善代理等待的第一段,後者才對應使用者拿到可用結果的時間,不能只用最短的一個數字代表整條流程。
環境準備好只是開始,命令如何記錄與重試,才決定任務中斷後能否繼續。
持久步驟如何處理重試與不確定結果?
每個沙箱操作用穩定步驟識別碼保存結果,讓函式恢復時不必把已完成操作再做一次。識別碼的用途,是讓系統辨認這次遇到的是哪一個步驟。
例如建立沙箱已成功,後面的模型呼叫卻暫時失敗,恢復時可以取回建立步驟的既有結果,避免為同一工作又開一個環境。這是編排紀錄帶來的價值。
但紀錄仍指向外部的執行環境。它不等於替虛擬機裡每個程序都提供永久保存,也不保證底層環境遺失後,檔案與執行中的程式仍然存在。
沒收到結果,不一定代表沒執行
生命週期文件另區分可安全重試的失敗,以及結果不確定的操作。後者會出現 operation_ambiguous,也就是操作可能已發生,系統卻沒能確認回應。
假設命令會把資料寫到外部服務,連線中斷後立刻重送,就可能寫入兩次。此時要先查外部狀態或工作識別紀錄,不能只看到錯誤就當作什麼都沒做。
這也說明持久步驟不等於任何命令都「恰好一次」。它能保存已確認的結果、安排安全重試,但外部副作用仍需要任務自己設計辨識與查證方式。
另外,直接使用沙箱用戶端會立即呼叫服務,並不自動取得相同的步驟重播語意。若選這條路,就要自行負責重試、生命週期與清理,不能把兩種介面混著理解。
即使編排層記得做過什麼,執行環境本身如何保存狀態,仍是另一件事。
延伸閱讀:Vercel durable-harness 是什麼?程式代理雲端當機後如何接著做
暫停、恢復、快照與複製差在哪?
暫停與恢復接續同一個沙箱,快照與複製則保存一份狀態,再建立另一個環境。兩組操作都和保存有關,處理的工作卻不同。
暫停會保留記憶體與檔案系統,恢復時沿用相同識別碼。若工作正在等待下一項輸入,這比丟棄環境後重新安裝工具更能接續原有進度。
Inngest 測試版目前以一小時的實際運作時間為限,暫停期間不計入這段時間。這不是無限執行額度,而是把等待和真正運作的時間分開處理。
快照則是另一份可供重建的狀態,涵蓋記憶體、磁碟、環境設定與資源配置。建立快照時,來源沙箱可以繼續運作。之後複製出的環境有新的識別碼。
保存完成,也有自己的等待狀態
提出快照要求後,還要等它準備完成才能使用。等待逾時不代表服務已取消建立,應查狀態再決定後續動作,否則可能誤把尚在處理當成完全失敗。
快照也要和測試成果分開。保存環境可以重建運作起點,卻不等於已替報告安排長期儲存與閱讀權限。若同事只需要查看失敗原因,交付必要的紀錄通常比分享整個環境更直接,也能減少不必要的資料副本。
這適合把準備好的測試環境作為另一項工作的起點,但不等於每個命令都自動留存可倒帶的版本。官方文章把逐命令復原與分支列為後續發展方向。
因此,選擇時可以從工作目的出發:等待後繼續原任務,用暫停與恢復。想從保存狀態建立另一個實驗環境,才考慮快照與複製。
因為狀態會連同環境與記憶體被保存,秘密與資料的存放方式也必須一起檢查。
隔離環境裡,秘密與網路仍有哪些界線?
虛擬機隔開程序,卻不會讓放進環境變數的秘密對沙箱內程式隱形。若程式需要讀取某個服務金鑰,執行它的環境也就接觸得到該金鑰。
隔離與安全文件說明,開發者可以依名稱選擇工作區秘密,注入沙箱的環境變數。沙箱裡的程式可以讀取這些值,包含代理產生的程式。
所以要給的是完成這項任務所需的權限,而不是整個團隊所有服務的通用金鑰。隔離限制了程式所在的位置,不會替一組高權限憑證縮小可操作的資料範圍。
輸出、檔案與快照也不會自動把秘密遮蔽。若測試把金鑰印到紀錄,或程式將它寫進檔案,後續保存與分享結果時就得處理這些副本。
換了金鑰,舊環境不會自動忘記
快照與複製可能帶著原來的環境值。即使外部秘密已輪替,運作中或暫停中的沙箱也可能保有先前拿到的內容,不能只改設定就假設舊副本消失。
網路同樣有目前版本的邊界。測試版使用預設的對外連線網路,沒有公開的進入連線。自訂私有網路、SSH 連線等能力不能從規畫直接寫成已提供。
例如等待外部服務回呼的測試,連線方向會直接決定流程能否成立。工作能主動呼叫網站,不代表網站也能主動找到這個環境。這兩種路徑需要分開確認。
這會影響需要外部系統主動連進來的測試,以及必須放在企業特定網路裡的負載。團隊應按當前可用的連線方向設計,不把未來功能當成今天的相依條件。
知道哪些資料會跟著環境走之後,任務結束或永久失敗時的清理就不能留給運氣。
測試版任務完成後,如何留下結果並清理?
低階 API 要由函式安排銷毀與永久失敗後的清理,重要產物應在環境消失前存到外部。這裡的完成,不只是測試指令回傳成功。
銷毀會移除沙箱的程序、檔案與輸出,因此測試報告、產生的檔案與需要人工查看的錯誤證據,都要先放到適當的外部儲存位置。
清理還可能進入處理中的狀態,並非提出要求的同一瞬間就全部結束。紀錄應能對回沙箱識別碼,讓後續處理知道要查哪一個環境。
成功路徑之外,也要有失敗接手方式
若流程只在最後一步銷毀,前面永久失敗就可能走不到那裡。Inngest 因此說明,可透過獨立的失敗處理函式,使用已保存的沙箱識別碼完成清理。
這和一般程式的 finally 區段不同。持久函式可能在別的時機恢復,主函式裡的結尾程式碼不能取代永久失敗後獨立執行的清理工作。
直接用戶端則需要自行安排相應的結束處理。兩種方式的責任不同,但都要留下能辨認資源與處理結果的紀錄,而不是假設服務會替每一條應用路徑自動收尾。
Inngest 這次讓隔離執行與工作追蹤更靠近,卻仍把重試、產物與資源生命週期留作明確設計。先把可重建測試接通,才看得出便利是否真的減少了排錯負擔。
當測試、產物與清理都有可核對的終點,把沙箱接進持久流程才有實際的管理價值。
延伸閱讀:Cloudflare 加速 AI 代理沙盒:啟動、快照與恢復,決定任務能否接著做
常見問題
Inngest Sandboxes 現在適合正式服務嗎?
依查閱當日文件,這是需要存取資格的 TypeScript 測試版,不建議用於正式負載或無法重建的資料,介面仍可能改變。
工作流程能恢復,代表沙箱永遠不會消失嗎?
不代表。持久步驟保存操作結果與流程進度,不保證底層虛擬機、程序及檔案在所有失敗情況下都能保留。
快照會自動移除秘密嗎?
不會。環境變數、記憶體與檔案可能包含先前使用的秘密,複製與後續分享都要另外管理。