ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

openai-agents-python 沙箱客户端选型指南:从 Unix 本地、Docker 到托管平台的切换与挂载策略

openai-agents-python 沙箱客户端选型指南:从 Unix 本地、Docker 到托管平台的切换与挂载策略 openai-agents-python 沙箱客户端选型指南从 Unix 本地、Docker 到托管平台的切换与挂载策略【免费下载链接】openai-agents-pythonA lightweight, powerful framework for multi-agent workflows项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-python本文是一份以docs/sandbox/clients.md为核心骨架展开的沙箱客户端Sandbox client实战指南。在 openai-agents-python 框架中SandboxAgent负责定义在沙箱里做什么而沙箱客户端决定了代码在哪里运行——是直接跑在本地文件系统、隔离的 Docker 容器还是由 E2B、Modal、Cloudflare 等托管平台托管的远程环境。读完本文你将掌握如何根据隔离强度与迭代速度诉求选择正确的客户端、在保持 Agent 定义不变的前提下通过SandboxRunConfig无缝切换后端以及如何为 Docker 与各类托管平台配置云存储挂载并正确评估其中的凭据暴露边界。Beta 提示沙箱 Agent 目前处于 beta 阶段见 docs/sandbox/clients.mdAPI、默认值与支持能力在正式发布前可能继续变化且会持续加入更多高级特性。先理解核心抽象Agent 定义不变客户端可替换沙箱架构的关键设计是关注点分离沙箱工作在哪里运行与做什么彼此解耦。文档明确指出在大多数情况下SandboxAgent的定义保持不变变化的只是SandboxRunConfig中的沙箱客户端和客户端专属选项。对应的源码证据在 src/agents/run_config.pydataclass class SandboxRunConfig: Grouped sandbox runtime configuration for Runner. client: BaseSandboxClient[Any] | None None Sandbox client used to create or resume sandbox sessions. options: Any | None None Sandbox-client-specific options used when creating a fresh session.也就是说你只需要在Runner的RunConfig中提供一个SandboxRunConfig指定client哪个沙箱后端和options该后端专属参数例如 Docker 的镜像Agent 本身无需感知底层的运行环境。这一抽象让本地开发 → 容器隔离 → 托管生产环境的演进路径变得非常平滑。决策速查表目标推荐起点理由macOS / Linux 上最快的本地迭代UnixLocalSandboxClient无需额外安装直接基于本地文件系统开发最简单基础的容器隔离DockerSandboxClient在指定镜像的 Docker 容器内运行工作负载托管执行或生产级隔离托管沙箱客户端hosted sandbox client把工作区边界移动到由云厂商托管的远端环境本地客户端UnixLocal 与 Docker对大多数用户而言从下面两个客户端之一起步即可客户端安装方式何时选择它示例UnixLocalSandboxClient无额外依赖macOS / Linux 上最快的本地迭代本地开发的好默认值Unix 本地起步示例DockerSandboxClientopenai-agents[docker]需要容器隔离或需要指定镜像在本地复现目标环境Docker 起步示例Unix-local 是面向本地文件系统开始开发的最省事路径当需要更强的环境隔离或生产级一致性时再迁移到 Docker 或托管平台。UnixLocalSandboxClient零依赖的本地开发从源码看src/agents/sandbox/sandboxes/unix_local.pyUnixLocalSandboxClientOptions非常简单默认只暴露一个exposed_ports元组class UnixLocalSandboxClientOptions(BaseSandboxClientOptions): type: Literal[unix_local] unix_local exposed_ports: tuple[int, ...] ()客户端类UnixLocalSandboxClient(BaseSandboxClient[UnixLocalSandboxClientOptions | None])见 unix_local.py的backend_id为unix_local并声明supports_default_options True即不传选项也能工作。参考 examples/sandbox/unix_local_runner.py 的用法通过Manifest描述文件树、由text_manifest(...)在内存中构建工作区再用UnixLocalSandboxClient()即可在临时本地目录中运行沙箱。适用前提Unix-local 面向 macOS / LinuxWindows 不在其目标平台上。它直接把宿主文件系统当作工作区隔离强度最低适合日常快速迭代。DockerSandboxClient一行切换获得容器隔离从 Unix-local 切到 Docker只需保持 Agent 定义不变、仅修改运行配置原文档给出的完整示例from docker import from_env as docker_from_env from agents.run import RunConfig from agents.sandbox import SandboxRunConfig from agents.sandbox.sandboxes.docker import DockerSandboxClient, DockerSandboxClientOptions run_config RunConfig( sandboxSandboxRunConfig( clientDockerSandboxClient(docker_from_env()), optionsDockerSandboxClientOptions(imagepython:3.14-slim), ), )DockerSandboxClientOptions的完整字段定义在 src/agents/sandbox/sandboxes/docker.py参数类型默认值说明imagestr必填容器运行所用镜像exposed_portstuple[int, ...]()需要在容器中暴露的端口network_modeLiteral[none] \| NoneNone目前仅支持显式none省略则保持 Docker 默认网络行为labelsdict[str, str]{}附加到容器的标签典型应用场景是希望沙箱镜像与另一个环境使用的镜像保持一致以复现目标运行环境。更完整的可运行示例见 examples/sandbox/docker/docker_runner.py。禁用 Docker 网络当 Docker 沙箱必须完全没有网络访问时设置network_modenoneoptions DockerSandboxClientOptions( imagepython:3.14-slim, network_modenone, )这里有几个来自文档与源码的硬性约束务必注意唯一支持的显式网络模式是none省略network_mode则保留 Docker 默认行为。禁用网络后不能暴露端口network_modenone与非空的exposed_ports元组组合会在选项校验阶段直接失败。源码中的校验函数见 docker.pydef _validate_docker_network_configuration( *, network_mode: Literal[none] | None, exposed_ports: tuple[int, ...], ) - None: if network_mode none and exposed_ports: raise ValueError(exposed_ports cannot be used when network_modenone)状态持久化network_mode会被写入沙箱会话状态DockerSandboxSessionState.network_mode见 docker.py当 SDK 在恢复该状态时需要重建替换容器时该设置会被重新应用。路径授权差异host_path 仅 Docker 支持SandboxPathGrant.host_path是Docker 专属能力用于把宿主机路径映射为容器内的另一个 POSIX 路径Unix-local 只支持相同路径的授权。详细规则见 Manifest 路径授权guide.md。挂载与远程存储把云存储接进沙箱基本概念挂载条目mount entries描述要向沙箱暴露什么存储挂载策略mount strategies描述沙箱后端如何把该存储挂载上去。内置的挂载条目与通用策略从agents.sandbox.entries导入托管平台专属策略则从agents.extensions.sandbox或各 provider 的扩展包导入源码目录对应 src/agents/sandbox/entries/ 与 src/agents/sandbox/entries/mounts/。通用挂载选项选项说明mount_path存储出现在沙箱中的位置。相对路径基于 manifest 根目录解析绝对路径按原样使用read_only默认True。只有沙箱需要把数据写回挂载存储时才设为Falsemount_strategy必填。必须选用与挂载条目和沙箱后端都匹配的策略重要行为挂载被视为临时工作区条目ephemeral workspace entries。快照与持久化流程会脱离或跳过已挂载的路径而不会把挂载的远程存储复制进保存的工作区。通用本地 / 容器挂载策略策略或模式何时使用说明InContainerMountStrategy(patternRcloneMountPattern(...))沙箱镜像可以运行rclone支持 S3、GCS、R2、Azure Blob 和 BoxRcloneMountPattern可运行于fuse或nfs模式InContainerMountStrategy(patternMountpointMountPattern(...))镜像含mount-s3需要 Mountpoint 风格的 S3 / S3 兼容访问支持S3Mount和GCSMountInContainerMountStrategy(patternFuseMountPattern(...))镜像含blobfuse2且支持 FUSE支持AzureBlobMountInContainerMountStrategy(patternS3FilesMountPattern(...))镜像含mount.s3files且可达现有 S3 Files 挂载目标支持S3FilesMountDockerVolumeMountStrategy(driver...)希望在容器启动前由 Docker 挂载一个基于 volume driver 的存储Docker 专属。S3、GCS、R2、Azure Blob、Box 可通过rclone挂载S3、GCS 也可通过mountpoint挂载托管沙箱平台同一套 Agent换成托管客户端需要托管环境时同样的SandboxAgent定义通常可以直接沿用只需在SandboxRunConfig中替换沙箱客户端。依赖安装提示如果使用的是发布版 SDK而非本仓库的 checkout需要通过对应的 package extra 安装沙箱客户端依赖即openai-agents[provider]形式。各 provider 的配置说明与随仓库检入的扩展示例见 examples/sandbox/extensions/README.md。支持的托管平台一览客户端安装 extra示例BlaxelSandboxClientopenai-agents[blaxel]Blaxel runnerCloudflareSandboxClientopenai-agents[cloudflare]Cloudflare runnerDaytonaSandboxClientopenai-agents[daytona]Daytona runnerE2BSandboxClientopenai-agents[e2b]E2B runnerModalSandboxClientopenai-agents[modal]Modal runnerRunloopSandboxClientopenai-agents[runloop]Runloop runnerVercelSandboxClientopenai-agents[vercel]Vercel runner这些示例的运行方式以 E2B 为例安装 extra 后导出OPENAI_API_KEY与对应平台的 API Key如E2B_API_KEY再执行uv run python examples/sandbox/extensions/e2b_runner.py --stream即可具体说明见 examples/sandbox/extensions/README.md。托管平台的专属挂载策略后端挂载说明Docker配合InContainerMountStrategy、DockerVolumeMountStrategy等本地策略支持S3Mount、GCSMount、R2Mount、AzureBlobMount、BoxMount与S3FilesMountModalSandboxClient用ModalCloudBucketMountStrategy配合S3Mount、R2Mount与 HMAC 认证的GCSMount凭据可用内联方式或命名的 Modal SecretCloudflareSandboxClient用CloudflareBucketMountStrategy配合S3Mount、R2Mount与 HMAC 认证的GCSMountBlaxelSandboxClient用BlaxelCloudBucketMountStrategy配合S3Mount、R2Mount或GCSMount还支持通过BlaxelDriveMountBlaxelDriveMountStrategy使用持久的 Blaxel Drives两者均从agents.extensions.sandbox.blaxel导入DaytonaSandboxClient通过rclone用DaytonaCloudBucketMountStrategy挂载云存储可配合S3Mount、GCSMount、R2Mount、AzureBlobMount、BoxMountE2BSandboxClient通过rclone用E2BCloudBucketMountStrategy挂载云存储可配合S3Mount、GCSMount、R2Mount、AzureBlobMount、BoxMountRunloopSandboxClient通过rclone用RunloopCloudBucketMountStrategy挂载云存储可配合S3Mount、GCSMount、R2Mount、AzureBlobMount、BoxMountVercelSandboxClient仅支持创建时刻的 S3 / S3 兼容桶挂载用VercelCloudBucketMountStrategy配合S3Mount已挂载的会话无法恢复内联凭据要求allow_s3_credential_exposureTrue各后端可直接挂载的远程存储矩阵后端AWS S3Cloudflare R2GCSAzure Blob StorageBoxS3 FilesDocker✓✓✓✓✓✓ModalSandboxClient✓✓✓---CloudflareSandboxClient✓✓✓---BlaxelSandboxClient✓✓✓---DaytonaSandboxClient✓✓✓✓✓-E2BSandboxClient✓✓✓✓✓-RunloopSandboxClient✓✓✓✓✓-VercelSandboxClient✓-----定制 Modal 沙箱规格CPU 与内存使用ModalSandboxClientOptions.cpu和ModalSandboxClientOptions.memory为新建的 Modal 沙箱申请资源单值申请该数量二元组(request, limit)第一项为请求值request第二项为上限值limit内存单位是 MiB。原文档给出的示例from agents.extensions.sandbox import ModalSandboxClientOptions options ModalSandboxClientOptions( app_nameagents-sandbox, cpu(1.0, 4.0), memory(2048, 8192), )把cpu、memory或两者留为None则使用 Modal 对每个省略资源的默认值。所选数值会保存在沙箱会话状态中替换沙箱时沿用相同的资源配置。凭据边界与暴露确认重要安全机制挂载矩阵中的 ✓ 只表示该后端能够执行这类挂载并不代表绕过凭据边界如果挂载辅助进程mount helper运行在模型可控的沙箱内勾选 ≠ 免凭据。关键规则来自 docs/sandbox/clients.md 与 src/agents/sandbox/_mount_security.py 相关的实现SDK 仅在所选辅助进程无需受保护权限即可运行时才接受无确认acknowledgement的容器内挂载若挂载需要受保护权限SDK 会在启动沙箱或挂载辅助进程之前拒绝该挂载——除非受信任的应用程序代码对该精确挂载路径显式确认了该暴露。对名为data的挂载条目保留确认后返回的Manifest副本# 挂载级值例如内联 access key。 manifest manifest.with_in_container_mount_credential_exposure_acknowledged(data) # 更广泛的权限例如托管身份 / 工作负载身份与外部凭据文件。 manifest manifest.with_in_container_mount_broad_credential_exposure_acknowledged(data)要点需要确认的每个精确挂载路径都要单独传入同时使用两类权限的挂载需要两种确认都调用确认是运行时行为不会被序列化且允许辅助进程接收凭据——但不限制凭据只用于挂载路径优先使用外部或 provider 原生策略否则使用沙箱范围、短期、最小权限的凭据。各类挂载的凭据约束差异免凭据的rclone挂载仅限 S3、GCS、R2 与 Azure Blob容器内 Box 挂载需要非交互认证源及与之匹配的确认FuseMountPatternblobfuse2即使未配置内联凭据也会探测环境中的 Azure 权限因此需要广泛确认S3FilesMountPatternmount.s3files使用环境 IAM 权限同样需要广泛确认上述要求在后端为 Docker 时同样适用——矩阵中的 ✓ 仅表示在满足相应权限边界后 Docker 能够执行该挂载。VercelSandboxClientOptions(allow_s3_credential_exposureTrue)是为创建时刻的 Vercel S3 挂载内联挂载级凭据保留的兼容性选项它并不授权广泛的凭据权限。继续深入可运行的示例资源除了本文已引用的示例外还可浏览examples/sandbox/本地、编码、内存、交接handoff与 Agent 组合等模式examples/sandbox/extensions/各托管沙箱客户端的可运行示例docs/sandbox/guide.mdManifest、路径授权等沙箱核心概念的完整指南。【免费下载链接】openai-agents-pythonA lightweight, powerful framework for multi-agent workflows项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-python创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表