在 AI Agent 时代,特别是 Coding Agents 和 GUI Agents 的快速发展中,安全执行用户或 AI 生成代码成为核心痛点。OpenSandbox 作为一个通用沙箱平台,通过多语言 SDK 和 Docker/Kubernetes 运行时,提供标准化隔离环境,支持命令执行、文件操作和代码解释器,实现代理的安全评估与执行。

OpenSandbox 核心架构观点

OpenSandbox 的设计遵循协议优先原则,将沙箱分为四层:SDK 层(客户端库)、Specs 层(OpenAPI 协议)、Runtime 层(生命周期管理)和 Sandbox Instances 层(容器实例)。这种分层确保了多语言一致性和可扩展性。

关键优势在于 execd 执行守护进程的注入机制:无需修改用户镜像,通过卷挂载注入 Go 实现的 execd 二进制和启动脚本。启动序列为:execd 先启动 Jupyter Server(端口 54321),再暴露 Execution API(默认端口 44772),最后 exec 用户入口点。这种透明注入支持任意基础镜像,如 ubuntu:22.04 或 python:3.11。

对于多语言代理沙箱,Sandbox Lifecycle API 处理创建 / 销毁 / 续期,Execution API 则统一文件 / 命令 / 代码执行。网络策略通过 Ingress Gateway(动态路由 {domain}/sandboxes/{id}/port/{port})和 Egress 控制实现隔离。

证据:关键组件参数与实现细节

从架构文档中,Docker Runtime 支持两种网络模式:

  • Host Mode:容器共享宿主机网络,适合单实例开发,端口直接暴露。
  • Bridge Mode:隔离网络,通过 HTTP 路由代理,支持多租户。

资源配额强制执行:创建 Sandbox 时指定 CPU(e.g., 2 cores)、内存(e.g., 4Gi)、GPU(NVIDIA runtime)。示例代码显示超时参数如 timeout=timedelta(minutes=10),TTL 自动过期,支持 renew-expiration API 续期。

CodeInterpreter 支持 Python/Java/JS/TS/Go/Bash,通过 Jupyter kernel 协议保持会话状态。文件操作支持批量上传(multipart POST /files/upload)、glob 搜索(GET /files/search)和权限管理(POST /files/permissions, mode=644)。

实际场景证据:在 claude-code 示例中,代理调用 Anthropic API 生成代码后,通过 sandbox.commands.run 执行构建命令,并用 CodeInterpreter 验证结果,支持迭代反馈。

落地部署清单:快速搭建多语言沙箱平台

以下是基于 GitHub README 和 server 文档的完整部署参数清单,确保 Coding Agents 安全执行。

1. 环境准备(本地 Docker 模式)

# 安装依赖
uv pip install opensandbox-server
opensandbox-server init-config ~/.sandbox.toml --example docker

# 配置示例(~/.sandbox.toml)
[server]
host = "0.0.0.0"
port = 8000
api_key = "your-secret-api-key"  # 必填,认证用

[runtime.docker]
network_mode = "bridge"  # 或 "host"
max_containers = 50      # 并发上限
default_ttl = "10m"      # 默认 TTL
image_pull_policy = "IfNotPresent"
private_registry_auth = { username = "user", password = "pass" }  # 可选

启动服务器:

opensandbox-server

2. Python SDK 集成 Coding Agent 示例

安装 SDK:

uv pip install opensandbox-code-interpreter

核心代码参数:

import asyncio
from datetime import timedelta
from opensandbox import Sandbox
from code_interpreter import CodeInterpreter, SupportedLanguage

async def agent_sandbox():
    # 创建沙箱:镜像、入口点、资源、超时
    sandbox = await Sandbox.create(
        "opensandbox/code-interpreter:v1.0.1",
        entrypoint=["/opt/opensandbox/code-interpreter.sh"],
        env={"PYTHON_VERSION": "3.11"},
        cpu="1",
        memory="2Gi",
        timeout=timedelta(minutes=15),  # 单次操作超时
        ttl=timedelta(hours=1)         # 沙箱存活 TTL
    )
    
    async with sandbox:
        # 文件上传:AI 生成代码
        await sandbox.files.write_files([
            {"path": "/workspace/main.py", "data": "print(2+2)", "mode": 644}
        ])
        
        # 命令执行:安装依赖
        exec_result = await sandbox.commands.run("pip install numpy", cwd="/workspace")
        print(exec_result.logs.stdout[0].text)  # 实时 SSE 流
        
        # 代码解释器:多语言执行
        interpreter = await CodeInterpreter.create(sandbox)
        result = await interpreter.codes.run(
            "import numpy as np; np.sum([1,2,3])",
            language=SupportedLanguage.PYTHON
        )
        print(result.result[0].text)  # 输出 6
    
    await sandbox.kill()  # 清理

asyncio.run(agent_sandbox())

3. Kubernetes 运行时参数(大规模部署)

克隆 kubernetes 子模块,部署清单(kubernetes/):

# Helm 值覆盖示例
replicaCount: 3
resources:
  limits:
    cpu: 2
    memory: 4Gi
ingress:
  enabled: true
  host: sandbox.yourdomain.com
egress:
  allow_domains: ["api.anthropic.com", "*.openai.com"]  # 代理出站白名单
metrics:
  scrape_interval: 30s

监控点:

  • Prometheus Metrics:GET /metrics (CPU/Mem/Exec 时间),SSE 流 /metrics/watch。
  • 状态转换日志:Sandbox 状态机(Pending -> Running -> Expired)。
  • 阈值告警:容器数 >80%、单沙箱 Exec >5min、错误率 >10%。

4. GUI Agents 扩展:浏览器沙箱

使用 chrome 示例:

sandbox = await Sandbox.create("opensandbox/chrome:v1", expose_ports=[9222])
endpoint = await sandbox.endpoints.get(9222)  # 获取 DevTools URL
# Playwright 连接:浏览器自动化测试

回滚策略:设置 max_retries=3,失败降级到轻量镜像;生产环境启用 PersistentVolume(OSEP-0003)。

5. 风险限制与优化

  • 安全:API Key + Token 认证,Egress 白名单防数据泄露,资源 quota 防 DoS。
  • 性能:Bridge 模式下 Ingress 路由延迟 <50ms,execd Go 实现低开销。
  • 扩展:Roadmap 支持 Go SDK、本地轻量沙箱、Helm Chart。

通过以上参数,开发者可在 10 分钟内搭建支持多语言代理的沙箱平台,适用于 Agent 评估、代码执行和 RL 训练。

资料来源

(正文约 1250 字)" posts/2026/03/05/open-sandbox-multi-language-agent-sandboxing.md