使用Modal和OpenAI Agents SDK構建
Modal成為OpenAI Agents SDK的官方沙箱提供商。本文展示瞭如何從零開始構建自定義的編碼代理框架,集成Modal沙箱以實現安全、並行和可擴展的自動化任務,以Parameter Golf挑戰為例。
今天,OpenAI正式發佈了其Agents SDK,這是一個用於構建編碼、深度研究等代理系統的強大工具。與此同時,Modal宣佈成為該SDK的官方沙箱提供商,為代理提供安全、隔離的計算環境。
內部代理正成為熱門話題,像Ramp這樣的公司已經在Modal上構建了後台編碼代理艦隊,現在它們負責超過一半的PR創建。許多企業熟悉現成的代理框架如Codex、Claude Code和OpenCode,但如何定製這些代理並將其構建成像Ramp那樣的強大內部工具,仍然是一個挑戰。
OpenAI Agents SDK為此提供了正確的構建模塊,團隊可以基於它構建自己的內部代理系統。該SDK通過沙箱擴展無縫集成到Modal中,為代理提供遠程計算機(甚至GPU),並利用Modal的規模優勢。
本文展示瞭如何從零開始在OpenAI Agents SDK之上構建自定義代理框架,並集成Modal沙箱。最終,我們將擁有一個通用的編碼框架,能夠將任務大規模並行化,並在後台高效運行。
構建基礎編碼代理
首先,我們構建一個最小的編碼代理。一個Agent本質上是一個LLM循環,運行工具(函數)直到任務完成。最簡單的編碼代理具有一個exec(command)函數,可以在主機上運行任意shell命令。但這種方式存在安全風險。
將代理移入沙箱
沙箱是隔離的Linux環境,基於VM或安全加固的容器。通過將命令在沙箱中執行,我們可以提高安全性。OpenAI Agents SDK提供了SandboxAgent類,預裝了連接到遠程沙箱的工具,以及ShellTool類增加額外保護。
通過ModalSandboxClientOptions,我們可以為沙箱請求GPU,這是Modal獨有的能力。
訓練MNIST模型
我們的代理框架現在可以端到端運行編碼任務。例如,讓它訓練一個MNIST圖像模型,它應該能直接工作。
構建終極框架
框架是圍繞代理循環的一切,提供上下文和工具。我們逐步添加新功能,直到框架能可靠地運行Parameter Golf實驗。
添加會話記憶
默認情況下,代理是無狀態的。會話允許跨代理運行累積上下文窗口,解決多輪記憶問題。但這也引入了上下文管理的新挑戰:記憶無限累積,需要智能控制。
添加子代理進行高層規劃和上下文委派
為了應對長週期任務,我們將代理拆分為協調者和子代理。協調者積累整個任務的記憶,它具有invoke_subagent工具,可以生成具有全新上下文的子代理。子代理專注於短期任務,完成時丟棄會話記憶,從而保持協調者上下文精簡。
異步和並行:子代理池
通過實現子代理池,協調者可以管理多個並行子代理,提高實驗吞吐量。我們添加了SubAgentPool類,並使用鈎子和狀態更新工具讓協調者瞭解子代理進展。
限制GPU支出:配額系統
為了控制成本,我們為子代理池添加配額系統,限制昂貴的GPU實例數量。
使用文件系統快照去重工作
子代理從基礎沙箱啓動時,會浪費GPU時間做重複設置工作。文件系統快照允許凍結活躍沙箱狀態為ID,協調者可以從此起點啓動新子代理,避免重複勞動。此外,文件系統也可作為隱式記憶,通過磁盤存儲工件,即使不在會話中也能被未來代理使用。
添加技能系統
最後,我們為框架添加插件技能,使協調者能選擇性加載特定任務(如Parameter Golf)的提示,保持框架通用性。
成果:並行自動研究系統
我們從一個基本的本地執行代理循環開始,通過遠程沙箱保障安全,異步工作器實現擴展,最終構建了一個能夠自主、並行進行Parameter Golf研究的系統。
結語
本博客的核心思想是:可以在基礎代理循環之上構建系統,以適應特定任務。我們構建的框架保持了協調者上下文精簡,並充分利用了Modal沙箱平台的並行性。這一切都得益於OpenAI Agent SDK的簡潔和可組合性。希望這個項目能啓發你構建自己的代理系統!
開始構建時,請參考完整示例倉庫。當需要使用沙箱和GPU時,註冊Modal即可獲得30美元免費信用額度。