随着 AI 智能体(AI Agent)在企业级应用中的广泛部署,如何让 AI 安全地执行代码、访问数据、操作工具成为核心挑战。「E2B(Environment to Build)」 是目前业界最成熟的基于 Firecracker microVM 的 AI 代码执行沙箱平台,被 Perplexity、Manus 等知名 AI 产品采用。
本文将深入剖析 E2B 的 Firecracker 实现架构,并提供完整的业务使用示例。
「Firecracker」 是 AWS 开源的轻量级虚拟机管理器(VMM),专为无服务器计算设计。它基于 「KVM」(Linux 内核虚拟机),使用 「Rust」 语言开发。
特性 | 说明 |
|---|---|
「极速启动」 | < 125ms 启动一个 microVM |
「低内存占用」 | 每个 VM 仅需 ~5MB 内存开销 |
「高密度」 | 单台服务器可运行数千个 microVM |
「强隔离」 | 硬件级隔离(KVM),比容器更安全 |
「精简设计」 | 仅实现必要功能,减少攻击面 |
┌─────────────────────────────────────────────────────────────┐
│ 传统 VM (QEMU/KVM) │
│ 启动时间: 数秒 | 内存开销: 数百MB | 功能: 完整虚拟化 │
├─────────────────────────────────────────────────────────────┤
│ Firecracker microVM │
│ 启动时间: <125ms | 内存开销: ~5MB | 功能: 最小化虚拟化 │
├─────────────────────────────────────────────────────────────┤
│ 容器 (Docker/containerd) │
│ 启动时间: <1s | 内存开销: 最小 | 隔离: 进程级(较弱) │
└─────────────────────────────────────────────────────────────┘
E2B 是一个「企业级 AI 智能体云端环境」,提供开源、安全的隔离沙箱,内置真实世界的工具,让 AI 智能体能够:
维度 | E2B 能力 |
|---|---|
「启动速度」 | < 150ms(无冷启动) |
「会话时长」 | 支持 24 小时长会话 |
「语言支持」 | Python、JavaScript、Bash、Ruby、C++ 等 |
「隔离级别」 | 硬件级(独立内核) |
「部署方式」 | 云托管 / BYOC / 私有化部署 |
┌────────────────────────────────────────────────────────────────────────┐
│ 用户请求层 │
│ Python SDK / JavaScript SDK / REST API │
└────────────────────────────────┬───────────────────────────────────────┘
▼
┌────────────────────────────────────────────────────────────────────────┐
│ API 网关层 (api) │
│ 认证 / 限流 / 路由 / WebSocket 连接管理 │
└────────────────────────────────┬───────────────────────────────────────┘
▼
┌────────────────────────────────────────────────────────────────────────┐
│ 编排器 (orchestrator) │
│ 沙箱生命周期管理 / 资源调度 / 模板管理 / 实例分配 │
└────────────────────────────────┬───────────────────────────────────────┘
▼
┌────────────────────────────────────────────────────────────────────────┐
│ Nomad + Consul 集群调度层 │
│ 工作节点管理 / 服务发现 / 健康检查 │
└────────────────────────────────┬───────────────────────────────────────┘
▼
┌────────────────────────────────────────────────────────────────────────┐
│ Firecracker microVM 层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Sandbox1 │ │ Sandbox2 │ │ Sandbox3 │ │ Sandbox N│ │
│ │ (microVM)│ │ (microVM)│ │ (microVM)│ │ (microVM)│ │
│ │ ┌──────┐ │ │ ┌──────┐ │ │ ┌──────┐ │ │ ┌──────┐ │ │
│ │ │ envd │ │ │ │ envd │ │ │ │ envd │ │ │ │ envd │ │ │
│ │ └──────┘ │ │ └──────┘ │ │ └──────┘ │ │ └──────┘ │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└────────────────────────────────────────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────────────────────┐
│ KVM (Linux 内核) │
│ 硬件虚拟化 / CPU / 内存隔离 │
└────────────────────────────────────────────────────────────────────────┘
E2B 维护了一个 Firecracker 的 Fork 版本:github.com/e2b-dev/firecracker
「修改重点」:
github.com/e2b-dev/infra 包含以下核心模块:
模块 | 功能 |
|---|---|
「orchestrator」 | 沙箱编排器,管理 microVM 生命周期 |
「envd」 | 环境守护进程,运行在每个 microVM 内部 |
「api」 | HTTP/WebSocket API 服务 |
「client-proxy」 | 客户端连接代理 |
「db」 | PostgreSQL 数据持久化 |
「clickhouse」 | 日志和分析数据存储 |
「otel-collector」 | OpenTelemetry 遥测收集 |
┌─────────────────────────────────────────────────────────────────────┐
│ Step 1: SDK 发起请求 │
│ sandbox = Sandbox.create(template="python3") │
└────────────────────────────────┬────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────────┐
│ Step 2: Orchestrator 接收请求 │
│ - 验证 API Key │
│ - 检查资源配额 │
│ - 选择目标工作节点 │
└────────────────────────────────┬────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────────┐
│ Step 3: 加载沙箱模板 │
│ - 从缓存获取 rootfs 快照 │
│ - 配置内核参数 │
│ - 准备 virtio 设备(网络/块设备) │
└────────────────────────────────┬────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────────┐
│ Step 4: Firecracker 启动 microVM (~150ms) │
│ - 创建 KVM 虚拟机实例 │
│ - 加载精简 Linux 内核(fc-kernel) │
│ - 挂载 rootfs(copy-on-write 模式) │
│ - 配置 vsock 通信通道 │
└────────────────────────────────┬────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────────┐
│ Step 5: envd 守护进程启动 │
│ - 初始化沙箱环境 │
│ - 建立与宿主机的 vsock 连接 │
│ - 启动文件系统监控 │
│ - 准备代码执行环境 │
└────────────────────────────────┬────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────────────┐
│ Step 6: 返回沙箱连接信息 │
│ - sandbox_id, url, 认证 token │
│ - 用户可通过 SDK 执行代码 │
└─────────────────────────────────────────────────────────────────────┘
envd 是运行在每个 microVM 内部的核心守护进程:
┌─────────────────────────────────────────────────────────────────────┐
│ microVM 内部 │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ envd │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ 代码执行引擎 │ │ 文件系统管理 │ │ 进程管理器 │ │ │
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ 网络代理 │ │ 环境变量管理 │ │ vsock通信 │ │ │
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │ │
│ │ vsock │
│ ▼ │
└─────────────────────────────────────────────────────────────────────┘
│
▼ 宿主机
「主要职责」:
E2B 使用**模板(Template)**来定义沙箱环境:
# e2b.toml
name = "data-analysis"
dockerfile = "Dockerfile"
[start_cmd]
command = "python -m jupyter notebook"
# Dockerfile
FROM e2b/python:3.11
RUN pip install pandas numpy matplotlib seaborn scikit-learn
# 安装系统依赖
RUN apt-get update && apt-get install -y ffmpeg
e2b.toml + Dockerfilee2b template build维度 | E2B (Firecracker) | Dify-Sandbox (seccomp) | Docker | gVisor |
|---|---|---|---|---|
「隔离级别」 | 硬件级(独立内核) | 进程级(共享内核) | 进程级 | 内核模拟 |
「启动时间」 | ~150ms | ~10ms | ~1s | ~500ms |
「内存开销」 | ~10-50MB/实例 | ~1-5MB/实例 | ~50MB | ~100MB |
「安全性」 | 极高(VM 级隔离) | 高(syscall 过滤) | 中 | 高 |
「功能丰富度」 | 完整 Linux 环境 | 受限环境 | 完整 | 完整 |
「网络隔离」 | 独立网络栈 | 共享网络栈 | 独立 | 独立 |
「持久化」 | 支持 | 不支持 | 支持 | 支持 |
「部署复杂度」 | 需要 KVM | 纯用户态 | 简单 | 中等 |
「适用场景」 | 云平台/多租户 | 单机/轻量部署 | 通用 | 安全敏感 |
# 安装 SDK
pip install e2b-code-interpreter
# 配置 API Key(.env 文件)
E2B_API_KEY=e2b_***
import os
from e2b_code_interpreter import Sandbox
os.environ["E2B_API_KEY"] = "e2b_***"
# 使用上下文管理器自动清理
with Sandbox() as sandbox:
# 执行代码
execution = sandbox.run_code("print('Hello from E2B!')")
print(execution.logs.stdout) # 输出: Hello from E2B!
# 执行计算
sandbox.run_code("x = 1")
result = sandbox.run_code("x += 1; x")
print(result.text) # 输出: 2
# 文件操作
sandbox.files.write("/data/test.txt", "Hello World")
content = sandbox.files.read("/data/test.txt")
print(content)
import os
from e2b_code_interpreter import Sandbox
from openai import OpenAI
os.environ["E2B_API_KEY"] = "e2b_***"
client = OpenAI()
def coding_agent(task: str):
"""AI 编码智能体:生成代码并在沙箱中执行验证"""
# Step 1: 让 GPT-4 生成代码
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": "你是一个专业的 Python 开发者。请根据用户需求生成完整、可运行的代码。"},
{"role": "user", "content": task}
]
)
generated_code = response.choices[0].message.content
generated_code = generated_code.replace("```python", "").replace("```", "").strip()
print(f"生成的代码:\n{generated_code}\n")
# Step 2: 在 E2B 沙箱中执行代码
with Sandbox() as sandbox:
execution = sandbox.run_code(generated_code)
if execution.error:
print(f"执行错误: {execution.error}")
else:
print(f"执行结果:\n{execution.logs.stdout}")
return {"success": execution.error isNone, "output": execution.logs.stdout}
# 使用示例
result = coding_agent("编写一个函数,生成斐波那契数列前20个数并找出其中的素数")
E2B 支持在自己的基础设施上部署:
┌─────────────────────────────────────────────────────────────────────┐
│ GCP / AWS / 本地服务器 │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ Terraform 部署 │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Nomad │ │ Consul │ │ Postgres │ │ ClickHouse│ │ │
│ │ │ Server │ │ Server │ │ │ │ │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────────────────┐ │ │
│ │ │ Worker Nodes │ │ │
│ │ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ │ │
│ │ │ │FC VM 1 │ │FC VM 2 │ │FC VM 3 │ │FC VM N │ │ │ │
│ │ │ └────────┘ └────────┘ └────────┘ └────────┘ │ │ │
│ │ └──────────────────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
import os
from e2b_code_interpreter import Sandbox
# ✅ 正确:使用环境变量
os.environ["E2B_API_KEY"] = os.getenv("E2B_API_KEY")
# ❌ 错误:硬编码密钥
# api_key = "e2b_sk_xxxxx" # 不要这样做!
# 设置合理的超时时间
sandbox = Sandbox(
timeout=300, # 5 分钟后自动销毁
)
# 对于长任务,使用显式超时
execution = sandbox.run_code(
code="long_running_task()",
timeout=60 # 单次执行最多 60 秒
)
# 使用自定义模板限制资源
# 在模板配置中设置 CPU 和内存限制
E2B 基于 Firecracker microVM 构建了一个「企业级的 AI 代码执行沙箱平台」,其核心优势包括:
特性 | 优势 |
|---|---|
「硬件级隔离」 | 每个沙箱运行在独立 VM 中,即使内核漏洞也无法逃逸 |
「极速启动」 | 150ms 启动,适合实时 AI 交互 |
「完整环境」 | 用户可安装任意系统包、使用完整网络栈 |
「长时间运行」 | 支持 24 小时会话,适合深度研究场景 |
「模板系统」 | 预构建环境快照,加速启动 |
「多语言支持」 | Python、JavaScript 等 SDK |
「企业部署」 | 支持 BYOC 和私有化部署 |
通过本文的架构解析和业务示例,开发者可以快速将 E2B 集成到自己的 AI 应用中,为 AI 智能体提供安全、强大的代码执行能力。