文章目录
- [1. 概述](#1. 概述)
- [2. 沙箱产品](#2. 沙箱产品)
-
- [2.1 开源可私有化部署沙箱](#2.1 开源可私有化部署沙箱)
- [2.2 云端 SaaS 托管沙箱](#2.2 云端 SaaS 托管沙箱)
- [2.3 特殊轻量化沙箱](#2.3 特殊轻量化沙箱)
- [3. 重点介绍](#3. 重点介绍)
-
- [3.1 E2B](#3.1 E2B)
- [3.2 OpenSandbox](#3.2 OpenSandbox)
- [4. Spring AI Alibaba Sandbox](#4. Spring AI Alibaba Sandbox)
-
- [4.1 模块结构](#4.1 模块结构)
- [4.2 沙箱类型](#4.2 沙箱类型)
- [4.3 运行时后端](#4.3 运行时后端)
-
- [4.3.1 四种容器后端](#4.3.1 四种容器后端)
- [4.3.2 文件系统](#4.3.2 文件系统)
- [4.3.3 关于 Daytona / E2B](#4.3.3 关于 Daytona / E2B)
- [5. 使用方式](#5. 使用方式)
-
- [5.1 依赖](#5.1 依赖)
- [5.2 基础用法](#5.2 基础用法)
- [5.3 浏览器沙箱](#5.3 浏览器沙箱)
- [5.4 文件系统沙箱](#5.4 文件系统沙箱)
- [5.5 MCP 桥接](#5.5 MCP 桥接)
1. 概述
Agent 会生成并执行动态代码/命令,直接跑在宿主机风险极高:
- 误删数据 :
rm -rf /或删关键配置 - 数据泄露:偷密钥、密码、敏感文档
- 权限越权:提权、内网横向移动
- 资源耗尽 :死循环、挖矿、占满
CPU/内存 - 提示词注入:被诱导执行恶意指令
沙箱 (Sandbox)是为自主 AI Agent 提供强隔离、可管控、可销毁的受控执行底座,专门承载 LLM 自主生成的代码、Shell 命令、文件读写、浏览器操作、工具调用等高风险行为,所有操作闭环在隔离空间,无法污染宿主机、泄露密钥、跨租户破坏环境。
2. 沙箱产品
2.1 开源可私有化部署沙箱
| 名称 | 底层隔离 | 部署形式 | 适用场景 |
|---|---|---|---|
| OpenSandbox | Docker/gVisor/Kata/Firecracker | 单机Docker、K8s集群 | 全场景AI智能体 |
| Cube Sandbox | Firecracker MicroVM | 私有化部署 | 代码、数据分析Agent |
| Allox | 标准Linux容器 | 本地/内网私有化 | 轻量内网安全任务 |
| OpenHands Runtime | 容器 | 私有化 | 编程调试SWE智能体 |
| AgentRun Sandbox | Serverless容器 | 阿里云私有/托管 | 云原生AI任务 |
| Judge0 | 隔离容器 | 自托管/托管 | 代码在线判题、编译执行 |
2.2 云端 SaaS 托管沙箱
| 名称 | 底层隔离 | 部署形式 | 适用场景 |
|---|---|---|---|
| E2B | Firecracker MicroVM | 纯云端SaaS | 通用Agent快速开发 |
| Daytona | MicroVM | 云端SaaS | 大型工程长周期任务 |
| Modal | 容器+VM混合 | 云端SaaS | 带GPU训练、重计算 |
| Runloop | Firecracker | 云端SaaS | Agent批量评测基准测试 |
| Browserbase | 容器/VM | 云端SaaS | 网页自动化Computer Use |
2.3 特殊轻量化沙箱
| 名称 | 底层隔离 | 部署形式 | 适用场景 |
|---|---|---|---|
| WebContainer | Wasm | 浏览器前端内运行 | 前端在线Node环境、轻量代码运行 |
3. 重点介绍
3.1 E2B
E2B 是一个为人工智能智能体(AI Agents)提供安全、隔离的代码执行环境的开源平台/基础设施 。虽然它本身是一个产品/平台名称,但其内部定义了一套用于管理沙箱、进程和文件系统的通信协议规范 ,并提供了多种工具包(SDK)可轻松启动和管理这些环境。
技术优势:
- 极速启动 :基于
Firecracker微虚拟机技术,冷启动时间约 150毫秒,远快于传统Docker容器 。 - 强隔离性 :每个沙箱拥有独立的
Guest OS内核,防止恶意代码逃逸 。 - 生态兼容 :许多主流
AI Agent框架(如Manus、OpenKruise Agents)均兼容E2B的API协议,允许零代码迁移或集成

3.2 OpenSandbox
OpenSandbox 是阿里巴巴 2025 年底开源、面向 AI 智能体专属的通用自托管沙箱平台,已纳入 CNCF Landscape,采用 Apache 2.0 开源协议,主打私有化部署、标准化协议、可插拔多隔离底层,专门承载 LLM 生成代码、Shell、浏览器、桌面自动化等高风险执行行为。
核心能力:
- 多隔离底座可切换:
Docker/gVisor/Firecracker - 内置代码、
Shell、浏览器、桌面运行环境 - 预热池、快照、批量启停,启动速度快
- 多层安全限制:权限、资源、网络、系统调用拦截
K8s云原生集群调度,单机容器快速部署- 全操作审计日志,多租户隔离
- 多语言
SDK,原生支持MCP智能体协议
架构设计:

4. Spring AI Alibaba Sandbox
spring-ai-alibaba-sandbox 是 Spring AI Alibaba 的安全沙箱运行时模块 ,为 Agent 提供隔离的执行环境,安全地运行 Python 代码、Shell 命令、浏览器自动化和文件系统操作。
底层基于阿里开源的 AgentScope Runtime(agentscope-runtime-sandbox-core:1.0.2),通过 Docker 容器实现资源隔离。
AgentScope目前已经迭代到2.0版本,提供了更高级别的沙箱支持,Spring AI Alibaba中的沙箱支持能力有限
4.1 模块结构
spring-ai-alibaba-sandbox/
├── pom.xml # agentscope-runtime-sandbox-core:1.0.2
└── src/main/java/com/alibaba/cloud/ai/sandbox/
├── SandboxAwareTool.java # 接口:Sandbox 感知的 Tool
├── BaseSandboxAwareTool.java # 抽象类:持有 agentscope SandboxTool
├── RuntimeFunctionToolCallback.java # 自定义 ToolCallback 实现
├── ToolkitInit.java # 工厂类:创建所有 36+ 工具
└── tools/
├── base/
│ ├── SaaBasePythonRunner.java # Python 执行器
│ └── SaaBaseShellRunner.java # Shell 执行器
├── fs/ # 11 个文件系统工具
│ ├── SaaFsFileReader.java
│ ├── SaaFsFileWriter.java
│ ├── SaaFsFileEditor.java
│ ├── SaaFsFileMover.java
│ ├── SaaFsFileSearcher.java
│ ├── SaaFsFileInfoRetriever.java
│ ├── SaaFsMultiFileReader.java
│ ├── SaaFsDirectoryLister.java
│ ├── SaaFsDirectoryCreator.java
│ ├── SaaFsTreeBuilder.java
│ └── SaaFsAllowedDirectoriesLister.java
├── browser/ # 23 个浏览器工具
│ ├── SaaBrowserNavigator.java # 导航
│ ├── SaaBrowserClicker.java # 点击
│ ├── SaaBrowserTyper.java # 输入
│ ├── SaaBrowserScreenshotTaker.java # 截图
│ ├── SaaBrowserSnapshotTaker.java # 快照(DOM)
│ ├── SaaBrowserTabCreator.java # 新建标签页
│ ├── SaaBrowserTabSelector.java # 选择标签页
│ ├── SaaBrowserTabCloser.java # 关闭标签页
│ ├── SaaBrowserTabLister.java # 标签页列表
│ ├── SaaBrowserWaiter.java # 等待条件
│ ├── SaaBrowserCloser.java # 关闭浏览器
│ ├── SaaBrowserConsoleMessagesRetriever.java # 控制台消息
│ ├── SaaBrowserDialogHandler.java # 对话框处理
│ ├── SaaBrowserFileUploader.java # 文件上传
│ ├── SaaBrowserKeyPresser.java # 按键
│ ├── SaaBrowserBackNavigator.java # 后退
│ ├── SaaBrowserForwardNavigator.java # 前进
│ ├── SaaBrowserNetworkRequestsRetriever.java # 网络请求
│ ├── SaaBrowserPdfSaver.java # 保存 PDF
│ ├── SaaBrowserDragger.java # 拖拽
│ ├── SaaBrowserHoverer.java # 悬停
│ ├── SaaBrowserOptionSelector.java # 选项选择
│ └── SaaBrowserWindowResizer.java # 窗口缩放
└── mcp/
└── SaaMCPTool.java # MCP 外部工具桥接
4.2 沙箱类型
Sandbox 基类构造函数签名(来自 agentscope-runtime):
java
public Sandbox(
SandboxService managerApi,
String userId,
String sessionId,
String sandboxType, // 沙箱类型标识
FileSystemConfig fsConfig, // 文件系统配置(可选)
Map<String, String> env, // 环境变量(可选)
boolean autoClose // 是否自动关闭
)
Spring AI Alibaba 目前暴露了 3 种:
| 沙箱类型 | 类 | 提供工具 |
|---|---|---|
| BaseSandbox | agentscope |
Python 执行、Shell 命令 |
| FilesystemSandbox | agentscope |
文件读写、目录操作 |
| BrowserSandbox | agentscope |
浏览器自动化(Playwright) |
AgentScope Runtime 1.x 实际还内置了更多:
| 沙箱类型 | 用途 |
|---|---|
GuiSandbox |
GUI 桌面操作 |
MobileSandbox |
移动端模拟 |
CloudSandbox |
云端 API 调用 |
TrainingSandbox |
模型训练 |
BFCLSandbox |
函数调用 benchmark |
WebShopSandbox |
电商购物场景 |
APPWorldSandbox |
应用场景 |
AgentBaySandbox |
AgentBay 平台集成 |
4.3 运行时后端
4.3.1 四种容器后端
AgentScope Runtime 定义了 4 种容器运行时(ContainerClientType 枚举):
| 后端 | 枚举值 | 适用场景 |
|---|---|---|
| Docker | DOCKER |
本地开发、单机部署 |
| Kubernetes | KUBERNETES |
生产环境、多租户、弹性伸缩 |
| AgentRun | AGENTRUN |
阿里云 AgentRun 托管服务 |
| FC | FC |
阿里云函数计算(Serverless) |
通过 ManagerConfig 配置:
java
// Docker(默认)
ManagerConfig config = ManagerConfig.builder()
.portRange(new PortRange(10000, 20000))
.build();
// Kubernetes
ManagerConfig config = ManagerConfig.builder()
.clientStarter(new DockerClientStarter.Builder()
.containerType(ContainerClientType.KUBERNETES)
.build())
.build();
4.3.2 文件系统
FileSystemConfig 抽象类,目前只有一个实现 LocalFileSystemConfig:
java
FileSystemConfig fsConfig = LocalFileSystemConfig.builder()
.storageFolderPath("/data/sandbox") // 存储路径
.mountDir("/mnt/workspace") // 容器内挂载点
.readonlyMounts(Map.of("/data/models", "/models")) // 只读挂载
.nonCopyMount(Map.of("/cache", "/cache")) // 直接挂载不复制
.build();
// 传入 Sandbox
BaseSandbox sandbox = new BaseSandbox(
service, "user1", "session1", fsConfig);
4.3.3 关于 Daytona / E2B
当前 agentscope-runtime-sandbox-core:1.0.2 没有内置 Daytona 和 E2B 实现。这两个是独立的第三方沙箱服务:
| 服务 | 定位 | 对接方式 |
|---|---|---|
| Daytona | 开源开发环境管理(Docker/K8s) | 扩展 BaseClientStarter 或直接调用 API |
| E2B | 云端代码沙箱(Code Interpreter) | 直接调用 E2B SDK,不经过 agentscope |
5. 使用方式
5.1 依赖
xml
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-sandbox</artifactId>
<version>${spring-ai-alibaba.version}</version>
</dependency>
5.2 基础用法
java
// 1. 启动沙箱服务(需 Docker 环境)
ManagerConfig config = ManagerConfig.builder().build();
SandboxService sandboxService = new SandboxService(config);
sandboxService.start();
// 2. 创建沙箱实例
BaseSandbox sandbox = new BaseSandbox(sandboxService, "user1", "session1");
// 3. 获取工具
List<ToolCallback> tools = ToolkitInit.getAllTools(sandbox);
// 或单独获取
ToolCallback pythonTool = ToolkitInit.RunPythonCodeTool(sandbox);
// 4. 创建 Agent
ReactAgent agent = ReactAgent.builder()
.name("sandbox-agent")
.model(chatModel)
.instruction("你可以使用 Python 和 Shell 工具来完成任务。")
.tools(tools)
.build();
// 5. 执行
agent.invoke(new UserMessage("用 Python 计算 1 到 100 的和"));
// 6. 清理
sandboxService.cleanupAllSandboxes();
5.3 浏览器沙箱
java
BrowserSandbox sandbox = new BrowserSandbox(sandboxService, "user1", "session1");
ReactAgent agent = ReactAgent.builder()
.name("browser-agent")
.model(chatModel)
.instruction("你可以使用浏览器工具来访问网页。")
.tools(List.of(
ToolkitInit.BrowserNavigateTool(sandbox),
ToolkitInit.BrowserTakeScreenshotTool(sandbox),
ToolkitInit.BrowserSnapshotTool(sandbox)))
.build();
agent.invoke(new UserMessage("打开百度首页并截图"));
5.4 文件系统沙箱
java
FilesystemSandbox sandbox = new FilesystemSandbox(sandboxService, "user1", "session1");
ReactAgent agent = ReactAgent.builder()
.name("fs-agent")
.model(chatModel)
.instruction("你可以使用文件系统工具来读写文件。")
.tools(List.of(
ToolkitInit.WriteFileTool(sandbox),
ToolkitInit.ReadFileTool(sandbox),
ToolkitInit.ListDirectoryTool(sandbox)))
.build();
agent.invoke(new UserMessage("创建一个 README.md 文件"));
5.5 MCP 桥接
java
// 将外部 MCP Server 的工具引入沙箱
List<ToolCallback> mcpTools = ToolkitInit.getMcpTools(
Map.of("server1", Map.of("url", "https://mcp.example.com")),
sandboxService
);