MicroVM × AI Sandbox
容器太松、VM 太胖 —— microVM 把两端的好处凑齐
01Agent 为什么需要 sandbox
LLM agent 的能力来自它能"调工具"——读写文件、执行 shell、跑 Python、装包、curl 网页。这些命令是模型动态生成的,谁也不知道下一条会是什么。让 agent 直接跑在主机上,等于把 root 交给一个会幻觉的程序员。
所以 agent 必须有自己的隔离环境:
- 文件系统隔离。写坏一个文件不能波及别人。
- 网络隔离。不能横向移动到内网服务。
- 资源限制。一个死循环不该吃光宿主 CPU。
- 时间隔离。一次会话一个环境,跑完就销毁。
这套东西过去三十年的名字叫 sandbox。区别只是 —— agent 时代,sandbox 要快得多、便宜得多、隔得严得多。
02容器 vs 传统 VM 的取舍
最直觉的方案是 Docker 容器:启动百毫秒级、镜像生态成熟、CI 里早就用滥了。但容器是共享内核的。Linux namespace + cgroup 只挡得住合规程序,挡不住 kernel-level 的逃逸 —— 历年 runc / containerd 都出过 CVE 能让容器内进程拿到宿主机 root。给一个会任意执行代码的 agent 用容器,安全模型上立不住。
另一头是完整 VM(QEMU + KVM 全设备模型)。VM 是 hardware-level 隔离,每个 guest 有独立内核,逃逸面小得多。代价是又胖又慢 —— 一个干净的 Ubuntu VM 启动要好几秒、占好几百 MB 内存、设备初始化拖一长串。给 agent 一会话拉一个完整 VM,成本和延迟都打不住。
03MicroVM 把两端凑齐
AWS 在 2018 年开源 Firecracker 解决的就是这个问题。Firecracker 是一个用 Rust 写的极简 VMM、跑在 KVM 之上,只支持 virtio 几种最必要的设备,启动路径被砍到能压在 125ms 量级、单 host 能跑上千个 microVM。它把"VM 级隔离"和"容器级启动"凑成了一对,也成了 Lambda / Fargate 的隐藏底座。
Firecracker 在 sandbox 场景额外有两个关键能力:
- Snapshot / Restore。把已经初始化好的 microVM 内存状态存盘,下次直接 restore,启动延迟能压到 ~25ms。一个"热好的 Python 解释器 + 装好的依赖"可以反复唤醒。
- Jailer。在 VMM 进程外再套一层 seccomp + chroot,万一 Firecracker 自己有洞也兜得住。
同类还有 Intel 的 Cloud Hypervisor、QEMU 的 microvm machine type、Google 的 gVisor(其实是用户态内核而非 microVM,但解决同一问题)。
04落地的产品景观
过去两年涌出来一批 AI sandbox 服务,机制大致分两条路线:
| 产品 | 机制 | 典型启动延迟 | 面向 |
|---|---|---|---|
| E2B | Firecracker microVM | ~150ms | 通用 agent runtime |
| Fly Sprites | Firecracker + NVMe + checkpoint | ~300ms | 带状态的会话 |
| Blaxel | microVM + 内存 snapshot | ~25ms | 极低延迟 resume |
| Modal | 自研 microVM-like runtime | sub-second | task / 函数 |
| Daytona | OCI 容器 + FUSE volume | ~90ms | 开发环境(容器路线) |
注意一个分歧:Daytona 走的是容器路线,赌注是"对 dev sandbox 而言隔离要求没那么强,速度 + 易用更重要"。其他几家都押 microVM——一是面向更敏感的用户输入(金融、医疗),二是 multi-tenant 场景下,隔离强度直接关系到能不能给免费用户开通道。
05未来折叠点
MicroVM × AI sandbox 接下来两年要折叠的几件事:
- Snapshot 格式标准化。现在每家自己实现 restore,复用面窄。Firecracker 社区在推一个跨 VMM 的 snapshot format,目标是让 image 可以像容器镜像一样流转。
- Sandbox 内的 GPU。当 agent 越来越多调本地小模型 / image generation,sandbox 要能开 GPU。GPU passthrough 在 microVM 里仍是个难题。
- MCP × Sandbox 解耦。工具协议(MCP)标准化之后,sandbox 不再绑死在某个 agent runtime 里 —— 任意 agent 都能借用任意 sandbox 提供的工具集。