Spring AI Alibaba 1.x 系列【78】沙箱(Sandbox)

文章目录

  • [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 框架(如 ManusOpenKruise Agents)均兼容 E2BAPI 协议,允许零代码迁移或集成

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-sandboxSpring AI Alibaba安全沙箱运行时模块 ,为 Agent 提供隔离的执行环境,安全地运行 Python 代码、Shell 命令、浏览器自动化和文件系统操作。

底层基于阿里开源的 AgentScope Runtimeagentscope-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 没有内置 DaytonaE2B 实现。这两个是独立的第三方沙箱服务:

服务 定位 对接方式
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
);

相关推荐
程序员二叉1 小时前
【Java】 异常高频面试题精讲 | 易错点+对比总结
java·开发语言·面试
tq10862 小时前
基于SLIP的防幻觉的指南
人工智能
周航宇JoeZhou2 小时前
JB3-9-SpringAI(二)
java·ai·agent·多智能体·调度·智能体·观察
好家伙VCC2 小时前
Web Components主题热切换方案揭秘
java·前端
慕木沐2 小时前
Google ADK Java 1.0版本 核心机制与实战 Demo
java·开发语言·python
Flying_Fish_roe2 小时前
springcloud-Eureka的原理
spring·spring cloud·eureka
甲维斯2 小时前
Kimi版超级玛丽效果“惊人”,配额不足5厘米!
前端·人工智能
console.log('npc')3 小时前
AI前端工程与生成式UI学习路线
前端·人工智能·ui
焦虑的说说3 小时前
秒杀系统设计方案
java