Agent Runtime 與 Code Interpreter:你的 AI 應用需要哪一個?

Agent Runtime 與 Code Interpreter:你的 AI 應用需要哪一個?

Code Interpreter 負責處理隔離且短暫的執行任務 — 執行一段腳本、回傳結果、然後清除一切。Agent Runtime 則負責處理需要持續狀態、工具存取、瀏覽器控制、檔案 I/O 或長時間執行回合的多步驟工作流程。正確的選擇取決於你的工作負載,而不是產品用來描述自己的標籤。

Code Interpreter 實際上是做什麼的

Code Interpreter 為語言模型提供了一種執行程式碼並查看輸出結果的方式。模型撰寫 Python 腳本,直譯器在隔離環境中執行它,然後結果以文字、檔案或渲染圖表的形式回傳。當會話結束時 — 或者在某些實作中,甚至在回合之間 — 環境就會被重置。沒有任何東西會保留。

這種設計是有意為之的。Code Interpreter 優先考慮安全性與簡潔性,而非連續性。隔離邊界非常嚴格,因為唯一需要發生的事情就是:執行這段程式碼,回傳這個結果。

實際的功能範圍很小:一個沙盒化的 Python(或類似)執行環境、一個限定於該會話的檔案系統、足夠的網路存取權限以在需要時獲取函式庫或外部資料,以及一個回傳成果的機制。會話可能持續 30 秒或 10 分鐘,但應用程式將其視為根本上短暫的。

這能很好地對應到幾個高價值的工作負載:

  • 單一腳本執行:使用者要求模型計算某個東西,結果以數字、表格或檔案的形式回傳。
  • 資料分析:上傳 CSV 檔案,產生摘要,生成圖表。工作在單次互動中開始並完成。
  • 快速計算:數學運算、資料轉換、格式轉換,以及類似適合單一程式碼區塊的任務。
  • 教育環境:每個練習都是獨立的,且不預期有會話連續性。

Code Interpreter 不擅長處理的是任何需要環境記住某些東西、在沙盒之外採取行動,或在使用者停止觀看後繼續運作的事情。

Agent Runtime 增加了什麼

Agent Runtime 是一種執行環境,專為橫跨多個步驟、涉及外部工具,且可能需要數分鐘或數小時而非數秒鐘的工作而設計。會話不會在步驟之間被丟棄 — 它是一個代理用來朝向目標構建的 workspace。

相較於簡單的直譯器,實際的增加內容相當可觀:

持久化的 workspace:在一個步驟中寫入的檔案,在下一個步驟中仍然存在。一個程式碼代理可以建立分支、編輯檔案、執行測試、修復失敗並推送提交 — 全部在同一個會話中完成,無需重新開始。

已安裝的套件與系統工具:Agent Runtime 通常支援安裝依賴項、執行 shell 命令、呼叫 CLI、啟動背景進程,以及使用真實的開發環境,而非鎖定的 Python 沙盒。

瀏覽器與網頁存取:需要閱讀文件、與網頁應用互動、填寫表單或自動化網頁工作流程的代理,需要在執行環境中有一個瀏覽器。Code Interpreter 沒有持久化瀏覽器會話的概念。

檔案儲存與成果持久化:需要比單次執行存活更久的輸出 — 生成的程式碼、中間資料、下載的檔案、螢幕截圖 — 需要一個在步驟之間以及某些情況下跨會話持久化的檔案系統。

長時間執行的會話:有些代理任務需要 20 分鐘。有些則需要更長時間。Agent Runtime 的設計是為了在整個工作流程期間保持存活,而不是為每次函式呼叫啟動和銷毀。

多工具協調:真正的代理工作流程涉及按順序呼叫多個工具 — 網頁搜尋,接著是檔案編輯,接著是測試執行,接著是 git push。Agent Runtime 被設計用來可靠地協調這個鏈條。

其取捨是真實的:Agent Runtime 操作起來更複雜,每次會話的成本比重量的直譯器更高,並且暴露了更大的攻擊面,需要謹慎的策略配置。對於適合直譯器模型的工作負載,增加所有這些複雜性只是一種浪費。

關鍵決策維度

下表對應了實際的決策標準。大多數應用程式會明確地落在某一側;對於橫跨兩者的情況,混合模式將在下一節中介紹。

維度 Code Interpreter Agent Runtime
會話生命週期 秒到分鐘,短暫的 分鐘到小時,持久化的
步驟之間的狀態 丟棄或有限 保留
工具存取 僅限程式碼執行 CLI、瀏覽器、檔案 I/O、API、子進程
套件安裝 固定映像或受限 動態,具策略控制
瀏覽器/網頁互動 不可用 支援
檔案儲存 僅限會話範圍 跨步驟持久化
每次會話成本 較高
基礎設施複雜度 較高
人機協作檢查點 不常見 常見 — 在部署、合併或外部操作前需批准
並行模型 大量並行的短會話 較少但更長的會話

會話生命週期與狀態需求是最快的篩選條件。如果你的工作負載在回合之間會重置,請使用直譯器。如果你的工作負載是跨多個回合朝向目標構建,請使用 Runtime。

工具廣度是第二個篩選條件。瀏覽器控制、git 操作、CLI 工具和外部 API 呼叫都需要 Runtime。如果你唯一的工具是程式碼執行,那麼直譯器就足夠了。

人機協作檢查點幾乎總是表示需要 Runtime。暫停會話等待批准然後繼續,需要持久化的狀態和可以恢復的會話。直譯器並非為此設計。

Code Interpreter 最適合的場景

當執行是有限且自包含的時候,Code Interpreter 是正確的選擇。最強的使用案例:

資料分析助手:使用者上傳檔案,提出問題,獲取圖表和摘要。當模型回傳輸出時,工作就完成了。沒有依賴先前記憶的下一個步驟。

數學與計算工具:計算器、單位轉換器、統計分析、數值模擬。這些是單次傳遞:輸入進,輸出出。

自動化報表:排程任務從資料來源生成報表,然後透過電子郵件發送或儲存。任務執行,產生成果,然後退出。

圖表與視覺化生成:模型撰寫 matplotlib 或類似的程式碼,直譯器執行它,使用者獲得一張圖片。無需持久化環境。

沙盒化的 LLM 工具使用:當模型需要一個 code_interpreter 工具來推理資料、驗證計算或格式化輸出 — 且僅此而已 — 時,Code Interpreter 正是 API 設計的用途。

在這些場景中,直譯器的吸引力在於其實際性:每次會話更便宜,更容易操作,也更簡單到確保安全。沒有需要管理的持久化狀態,沒有需要追蹤的會話生命週期,而且攻擊面很小,因為程式碼只執行一次,然後環境就消失了。

Agent Runtime 最適合的場景

當任務無法在不隨著時間協調多個工具、跨步驟維護狀態,或在程式碼執行沙盒之外採取行動的情況下完成時,Agent Runtime 是正確的選擇。

程式碼代理:一個讀取程式碼庫、撰寫變更、執行測試套件、修復失敗並開啟拉取請求的代理,需要一個具有 git、終端機和檔案系統的持久化 workspace。這在架構上與短暫的直譯器不相容。

瀏覽器與網頁自動化代理:抓取動態內容、填寫表單、導航多步驟網頁流程、從視覺介面提取結構化資料 — 所有這些都需要一個真實的瀏覽器會話,並持續足夠時間以完成工作流程。

研究與資料收集管道:從多個來源擷取文件、交叉引用資訊、將中間結果寫入磁碟,並產生最終合成輸出的代理,需要一個跨所有這些步驟持久化的 workspace。

評估與 RL 工作負載:並行執行多個代理 episode,每個都維護自己的狀態、追蹤分數並寫入檢查點,這需要一個為並行和會話隔離而設計的 Runtime。

長時間執行的基礎設施代理:配置資源、執行部署、監控輸出,並在數分鐘或數小時的時間視窗內對變化做出反應的代理,需要一個能夠暫停、恢復和設置檢查點的會話模型。

代理式程式碼工具,如 Codex 風格的代理或 IDE 連接的代理,它們對真實專案採取行動,需要開發環境的完整表面 — 而不是沙盒化的直譯器。

Runtime 的成本在當替代方案是手動將狀態管理、工具協調和會話持久化組合在一起時是合理的。Runtime 提供了該基礎設施;你只需配置策略。

混合模式:在同一個應用程式中使用兩者

許多真實應用程式同時嵌入了這兩種模式。一個程式碼助手可能使用 Agent Runtime 來處理整個會話 — 維護儲存庫上下文、追蹤哪些檔案已被修改、管理分支 — 同時專門呼叫 Code Interpreter 來執行測試或執行沙盒化的使用者提供的腳本,作為較大代理工作流程中的一個子操作。

一個資料分析產品可能使用 Agent Runtime 來協調整個工作流程 — 下載資料、清理資料、合併多個來源 — 同時對需要嚴格沙盒化且狀態不需要持久化的個別計算步驟使用隔離的直譯器呼叫。

這個模式在實踐中看起來像這樣:

  1. 外層是 Agent Runtime:它持有會話,協調工具,並管理狀態。
  2. 需要嚴格隔離的內部操作使用短暫的 Code Interpreter 呼叫,作為眾多工具之一。
  3. Agent Runtime 決定何時呼叫直譯器、傳遞什麼輸入,以及如何處理輸出。

這不是一個複雜的架構模式;它只是為每個層級使用其設計用途。Agent Runtime 管理工作流程;直譯器在需要時處理沙盒化執行。

為每種模式評估沙盒基礎設施

無論你是在評估受管理的沙盒提供者,還是在設計自己的沙盒,你需要回答的問題會根據你正在構建的模型而有顯著不同。

對於 Code Interpreter 工作負載,評估標準相對狹窄:

  • 啟動延遲是多少?亞秒級啟動對互動式使用很重要。
  • 預設映像中提供了哪些語言和套件?
  • 使用者可以安裝額外套件嗎?你的安全模型是否允許?
  • 資源限制是什麼(CPU、記憶體、執行時間)?
  • 會話成果如何回傳 — 同步響應、檔案下載或預簽名 URL?
  • 是否有持久化檔案系統選項,還是所有東西在退出時都被丟棄?

對於 Agent Runtime 工作負載,評估標準會顯著擴展:

  • 環境是否支援在會話的步驟之間持續存在的持久化檔案系統?
  • 會話是否可以暫停和恢復 — 用於人機協作工作流程或成本管理?
  • 是否有瀏覽器支援,以及如何配置?
  • 有哪些 shell 工具和 CLI 可用?
  • 網路存取如何控制 — 出口策略、DNS 過濾、出口允許清單?
  • 會話並行模型是什麼,以及它如何擴展?
  • 秘密如何注入和範圍限定?
  • 存在哪些可觀測性 — 命令日誌、檔案變更追蹤、資源指標?
  • 平台如何處理比典型請求-響應週期更長的長時間運行的會話?

Novita Agent Sandbox 專為 Agent Runtime 工作負載設計 — 需要持久化狀態、工具存取和會話控制的程式碼代理、瀏覽器自動化、資料分析管道,以及評估/RL 工作負載。它使用 microVM 隔離,支援 Pause/Resume,並與 Novita 的模型 API 平台整合,因此使用 Novita 進行 LLM 推理的團隊可以在同一個平台上運行沙盒工作負載。對於正在評估代理工作流程沙盒基礎設施的團隊,Novita Agent Sandbox 文件 涵蓋了隔離模型、生命週期 API 和資源配置。

對於真正僅限直譯器的工作負載 — 單一腳本、短暫、無狀態 — 完整的 Agent Runtime 是你不需要的開銷。使用更簡單的工具。

實際的測試:如果你的執行環境在每次模型回合之間被銷毀並重建,你的工作流程能否正確完成?如果可以,直譯器可能就足夠了。如果不行 — 因為狀態、工具存取或會話連續性很重要 — 你需要一個 Runtime。

常見問題

Code Interpreter 和 Agent Runtime 之間的主要區別是什麼?

Code Interpreter 在沙盒化環境中執行程式碼,並在會話結束時丟棄環境。Agent Runtime 則在工作流程的多個步驟中維護一個持久化的 workspace — 包含檔案、已安裝的工具、瀏覽器存取和會話狀態。直譯器回答「執行這段程式碼並回傳結果」;Runtime 回答「根據需要跨越多個步驟朝向這個目標努力」。

Code Interpreter 可以使用像網頁搜尋或檔案存取這樣的工具嗎?

某些 Code Interpreter 實作支援有限的工具使用 — 檔案上傳、沙盒內的網路呼叫,或回傳成果。它們不支援的是跨回合攜帶狀態的持久化 workspace,或比單次函式呼叫存活更久的瀏覽器會話。如果你的應用程式需要讀取網頁、寫入檔案,然後在後續步驟中參考該檔案,你需要一個 Runtime。

Agent Runtime 總是比 Code Interpreter 更昂貴嗎?

每次會話而言,是的。Agent Runtime 涉及更多基礎設施 — 持久化檔案系統、更長壽命的進程、瀏覽器或 CLI 存取 — 而且這些元件的成本比短暫的直譯器沙盒更高。對於真正需要多步驟協調的工作負載,Runtime 的成本是合理的。對於單次傳遞的任務,這是一種開銷。

我何時應該在同一個應用程式中使用兩者?

當外部工作流程需要持久化狀態,但個別子操作受益於嚴格隔離時。一個在沙盒化直譯器中執行測試套件的程式碼代理,或者一個將計算步驟委派給短暫直譯器而協調層持有整體狀態的資料管道,都是常見的混合模式。

Novita Agent Sandbox 是否支援兩種模式?

Novita Agent Sandbox 專為 Agent Runtime 工作負載設計 — 持久化 workspace、Pause/Resume、瀏覽器存取和多步驟會話控制。對於隔離的、短暫的直譯器呼叫,根據你的使用案例,更輕量級的執行可能更合適。請參閱 Novita Agent Sandbox 文件 了解當前功能詳情。

我如何知道我的工作負載是否需要 Runtime?

實際的測試:如果你的執行環境在每次模型回合之間被銷毀並重建,你的工作流程能否正確完成?如果可以,直譯器就足夠了。如果答案是否定的 — 因為狀態、工具存取、瀏覽器控制或會話連續性很重要 — 你需要一個 Runtime。

推薦文章