AI News HubLIVE
站内改写2 分钟阅读

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