使用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美元免費信用額度。