项目地址: https://github.com/deep-agent/sandbox/

背景

什么是 Sandbox

在计算机安全领域,沙箱(Sandbox) 是一种为运行中的程序提供隔离环境的安全机制。它就像一个"安全的游乐场"——程序可以在其中自由运行,但无法影响外部系统。

对于 AI Agent 而言,Sandbox 可以理解为一台分配给每个任务的 “云端虚拟电脑”。它具备完整的操作系统能力:网络访问、文件系统、浏览器、各种软件工具,让 AI 能够像人类一样操作计算机来完成任务。AI 代码沙箱正在成为 AI Agent 平台的底层标准基础设施

Sandbox 典型应用场景有:

  • AI Coding Agent:Manus、Replit、Lovable 等 web vibe coding 产品,实现代码生成 → 执行 → 验证 → 迭代的完整闭环。
  • Deep Research Agent:大规模数据集研究,自动化信息收集与分析。
  • 数据分析与可视化:安全连接数据源,自动生成图表和报告。
  • 浏览器自动化 (Computer Use):Web 爬取与测试、RPA 自动化任务。
  • 强化学习训练:并行运行数千个沙箱,评估奖励函数。

一个 AI Agent Sandbox 通常包含以下核心能力:

能力 说明
🖥️ 终端/命令执行 执行 Shell 命令,安装依赖,运行脚本
📁 文件系统操作 读写文件,目录管理,文件搜索
💻 代码解释器 支持 Python/JS 等多语言代码执行
🌐 浏览器自动化 Web 页面操作,截图,数据抓取
🔧 开发工具集成 模型常用的一些工具集成比如 pdf2txt

为什么需要 Sandbox

随着 LLM 能力的持续演进,AI 正在从"能思考"走向"能行动"。Cursor 等 AI 编程工具每天生成的新代码已近 10 亿行。这带来了一个核心问题:这些由 AI 动态生成的、不可信的代码,应该在哪里运行?

Sandbox 正是为解决这一困境而生。 它必须同时满足三个核心需求:

  1. ⚡ 极致的速度 — 亚秒级启动,匹配 AI Agent 的实时交互节奏
  2. 🔐 堡垒级的安全 — 完全隔离的执行环境,防止恶意代码逃逸
  3. 📈 Serverless 的弹性 — 按需伸缩,按秒计费,空闲时自动暂停

常用沙箱隔离技术

Sandbox 的核心在于隔离:在安全性、性能、兼容性之间做权衡。常用的技术方式有:

  1. Docker/runc(进程级隔离):Namespace + Cgroups,共享宿主机内核;优点是启动快、生态成熟、成本低;缺点是存在容器逃逸与内核级风险;适合可信代码、内部开发与微服务;典型产品:Docker、Podman、大部分 CI/CD 系统。
  2. gVisor(用户态内核拦截):用 Sentry 在用户态拦截/模拟系统调用;优点是攻击面更小、容器兼容性好;缺点是性能损耗、syscall 覆盖不全;适合多租户 Web 与中等风险代码执行;典型产品:Google Cloud Run、GKE Sandbox。
  3. Kata Containers(轻量级虚拟机):容器运行在独立 VM(Guest Kernel)内;优点是隔离更强、兼容性高;缺点是内存与启动开销更大;适合合规场景、遗留应用与机密计算;典型产品:OpenStack Kata、Azure Confidential Containers。
  4. Firecracker MicroVM(极简微虚拟机):基于 KVM 的极简 VMM,只保留必要虚拟设备;优点是隔离强、启动快、密度高;缺点是设备/生态能力受限;适合 Serverless 与高并发不可信代码执行;典型产品:AWS Lambda、E2B、PPIO Agent Sandbox、CodeSandbox Cloud。
  5. WebAssembly/WASM(字节码级沙箱):运行在 WASM Runtime,通过 WASI 与系统交互;优点是启动极快、跨平台、体积小;缺点是系统能力与生态受限;适合边缘计算、轻量函数与浏览器侧沙箱;典型产品:Cloudflare Workers、Fastly Compute@Edge、Fermyon Spin。
  6. Seatbelt(macOS/iOS 原生沙箱):Apple 内核级强制访问控制(SBPL);优点是系统级强制执行、性能开销极低;缺点是平台专有、可定制空间有限;适合 Apple 生态应用隔离(非云端 AI Sandbox 的主流选择);典型应用:iOS App Sandbox、macOS App Sandbox、Safari 浏览器沙箱。

🛡️ 常见威胁模型

无论选择哪种隔离技术,Sandbox 都需要防范以下安全威胁:

威胁类型 说明 防护手段
容器/VM 逃逸 恶意代码突破隔离边界,获取宿主机权限 硬件级隔离、最小化攻击面
越权访问 访问不该访问的文件、网络、资源 Seccomp、AppArmor、网络策略
数据外泄 敏感数据通过网络或文件泄露 网络白名单、出口流量监控
资源耗尽(DoS) 恶意代码消耗过多 CPU/内存/磁盘 Cgroups 资源限额、超时机制
供应链攻击 通过恶意依赖包注入代码 依赖扫描、镜像签名验证

最终方案

最终选择 Docker 作为 AI Agent Sandbox 的核心隔离方案。主要是 Docker 有较好的生态完善、高度可定制、资源隔离、快速启动、跨平台等优势,在本地测试也方便。定制好的镜像也能够直接上传到云厂商,提供 Agent 服务使用。

系统架构设计

一个完整的 AI Agent Sandbox 通常采用分层架构,将复杂的功能解耦为多个独立的服务模块。以 AIO Sandbox 为例,其架构设计如下:

cover

架构分层说明

层级 组件 职责
Client SDK 和 MCP client 对外暴露 Sandbox 所有能力
接入层 Nginx Gateway 统一入口、反向代理、路由分发、静态资源服务
协议层 Sandbox API Server / MCP Hub 提供 HTTP API、WebSocket、MCP 协议接口
服务层 Browser/Bash/File/Terminal 具体功能实现(命令执行、文件操作、浏览器控制)
基础设施层 Debian 操作系统

两种接入方式

  • MCP Hub:内置 MCP 协议服务,提供标准化的 Tool 接口(bash、file、browser 等),结合 Eino 框架,几行代码即可实现完整的 ReAct Agent。

  • Sandbox SDK:提供 Go SDK,通过编程方式调用 Bash、FileSystem、Browser 等服务。既可封装为 Tool 供 AI Agent 调用,也可直接用于产品功能开发(如文件浏览器、Git 管理、LSP 服务等)。

核心模块

命令执行服务 (Bash Service)

负责在沙箱内执行 Shell 命令,是 AI Agent 最核心的能力之一。

主要功能

  • 同步执行:执行命令并等待结果返回
  • 流式执行:实时流式输出 stdout/stderr
  • 后台执行:启动长时间运行的进程(如 Web 服务器)
  • 超时控制:防止命令无限期阻塞
  • 输出截断:对过长输出进行智能截断

安全考量

  • 设置工作目录限制
  • 进程组隔离(Setpgid),便于统一终止
  • 超时自动 kill

文件系统服务 (File Service)

提供对沙箱内文件系统的完整操作能力。

主要功能

  • 基础操作:读取、写入、删除、移动、复制、创建目录
  • 高级搜索:Glob 模式匹配、Grep 内容搜索
  • 增量读取:支持 offset/limit 分页读取大文件
  • 智能编辑:基于搜索替换的文件编辑(Search & Replace)

设计要点

  • 所有路径操作基于 workspace 根目录
  • 支持相对路径和绝对路径
  • 文件内容支持 Base64 编码(用于二进制文件)

浏览器控制服务 (Browser Service)

通过 Chrome DevTools Protocol (CDP) 控制 Chromium 浏览器,实现 Browser Use 能力。

主要功能

  • 页面导航:打开 URL、获取当前 URL 和标题
  • 元素交互:点击、输入文本、滚动
  • 内容获取:截图、获取 HTML、导出 PDF
  • JavaScript 执行:在页面上下文中执行 JS 代码
  • 等待机制:等待元素可见

底层实现

  • 使用 chromedp 库连接 CDP WebSocket
  • Chromium 以 headless 模式运行,监听 9222 端口
  • 配合 Xvfb 虚拟显示器实现无头渲染

远程桌面服务 (VNC Service)

提供可视化的远程桌面访问,让用户可以"看到" AI 在做什么。

技术栈

Xvfb (虚拟帧缓冲) → Fluxbox (窗口管理器) → x11vnc (VNC服务) → noVNC (Web客户端)

工作流程

  1. Xvfb 创建虚拟显示器 :99
  2. Fluxbox 提供轻量级窗口管理
  3. x11vnc 将虚拟显示器共享到 5900 端口
  4. noVNC + websockify 将 VNC 协议转换为 WebSocket,支持浏览器访问

网页终端服务 (Terminal Service)

基于 WebSocket + PTY 实现的交互式 Web 终端。

技术方案

  • 后端:Go PTY (伪终端) + WebSocket
  • 前端:xterm.js 终端模拟器
  • 支持完整的终端功能(颜色、光标、Tab 补全等)

进程管理

容器内通过 Supervisord 统一管理多个进程,按依赖顺序启动:

优先级 进程 作用
100 Xvfb 虚拟帧缓冲 X 服务器
200 Fluxbox 轻量级窗口管理器
300 x11vnc VNC 服务器
400 websockify WebSocket 代理 (noVNC)
500 Chromium 浏览器 (CDP 调试端口)
600 sandbox-server 沙箱主服务
700 mcp-hub MCP 协议服务
800 Nginx 反向代理网关

启动依赖链

Xvfb → Fluxbox → x11vnc → websockify → Chromium → sandbox-server → mcp-hub → Nginx

扩展机制

Sandbox 设计了灵活的扩展能力,支持用户注入自定义程序,而无需修改基础镜像:

扩展方式 目录 说明
初始化脚本 /docker-entrypoint.d/ 容器启动时按字母顺序执行
自定义服务 /home/sandbox/app.supervisor.d/ Supervisord 配置,注册后台服务
用户数据 /home/sandbox/userdata/ 用户脚本、二进制文件
工作空间 /home/sandbox/workspace/ AI Agent 的工作目录
  • 初始化脚本 (/docker-entrypoint.d/):容器启动时按文件名顺序执行,适合安装依赖、设置环境变量、下载配置等一次性初始化操作。
  • 自定义服务 (/home/sandbox/app.supervisor.d/):放置 Supervisord 配置文件,注册需要持续运行的后台服务,如自定义 API、数据库、消息队列等。
  • 环境变量控制:通过 ENABLE_MCPENABLE_BROWSERENABLE_VNC 等环境变量动态开启/关闭功能模块,按需裁剪为轻量级执行器。
  • 挂载目录/home/sandbox/workspace/ 为 AI Agent 工作目录(建议持久化),/home/sandbox/userdata/ 存放用户脚本和二进制文件。

这种约定优于配置的设计,使 Sandbox 既可开箱即用,也可针对特定场景深度定制

总结

Sandbox 是 AI Agent 从“会写”走向“会做”的关键基础设施:它把不可信代码、浏览器操作与工具调用装进一个可控的隔离环境里,让“生成 → 执行 → 验证 → 迭代”形成闭环。

对多数需要快速落地的场景,选择 Docker 作为底座往往是性价比最高的路径;在多租户或高风险执行场景,再逐步引入更强隔离(如 MicroVM)与更严格的网络/权限策略,形成可演进的安全与性能曲线。