"如果要支持消费者级别的 Agent,容器是不够的。" — Cloudflare
引言
AI Agent 需要执行代码,但 AI 生成的代码不能直接 eval()——恶意用户可以诱导 AI 注入漏洞。我们需要沙箱:一个隔离的代码执行环境。
传统方案是容器,但容器启动慢、内存大、需要预热。Cloudflare 给出了新的答案:Dynamic Workers,基于 Isolate 的轻量级沙箱,比容器快 100 倍。
本文深入解析 Dynamic Workers 的技术原理、核心优势,以及它如何改变 AI Agent 的代码执行方式。
一、问题:为什么容器不够用?
1.1 传统容器方案
| 问题 | 具体表现 |
|---|---|
| 启动慢 | 数百毫秒启动时间 |
| 内存大 | 数百 MB 内存占用 |
| 需要预热 | 必须保持"热"容器避免延迟 |
| 安全妥协 | 可能复用容器,危及隔离性 |
1.2 规模化困境
如果每个用户都有多个 Agent,每个 Agent 都要写代码执行,容器方案无法支撑。
消费者级别的 AI Agent 需要:
- 每个请求都创建新沙箱
- 用完即销毁
- 不预热、不复用
- 无限并发
二、Dynamic Workers:Isolate 沙箱
2.1 什么是 Dynamic Workers?
运行时动态创建 Worker,执行指定代码,完全隔离。
// AI 生成的代码
let agentCode = `
export default {
async myAgent(param, env, ctx) {
let history = await env.CHAT_ROOM.getHistory(100);
return history.filter(msg => msg.author === "alice");
}
}
`;
// 动态加载 Worker
let worker = env.LOADER.load({
compatibilityDate: "2026-03-01",
mainModule: "agent.js",
modules: { "agent.js": agentCode },
// 注入 API 访问权限
env: { CHAT_ROOM: chatRoomRpcStub },
// 阻止互联网访问
globalOutbound: null,
});
// 执行
await worker.getEntrypoint().myAgent(param);
2.2 Isolate 技术
Isolate = V8 JavaScript 引擎实例(与 Chrome 浏览器相同)
| 指标 | 容器 | Isolate |
|---|---|---|
| 启动时间 | 数百毫秒 | 几毫秒 |
| 内存占用 | 数百 MB | 几 MB |
| 速度 | 1x | 100x |
| 内存效率 | 1x | 10-100x |
每个请求都可以启动新 Isolate,运行完即销毁。
三、核心优势
3.1 快 100 倍
容器启动: ████████████████████████████████████████ 500ms
Isolate: █ 5ms
3.2 无限扩展
| 传统沙箱 | Dynamic Workers |
|---|---|
| 限制并发沙箱数量 | 无限制 |
| 限制创建速率 | 无限制 |
| 复用容器危及安全 | 每次新建,用完即销 |
每秒百万请求,每个请求都加载独立的沙箱?没问题!
3.3 零延迟
- Dynamic Workers 运行在同一台机器(甚至同一线程)
- 无需在全球寻找"热"沙箱
- Isolate 足够轻量,请求落哪就跑哪
- 支持 Cloudflare 全球数百个节点
3.4 凭证注入
// Agent 发起 HTTP 请求时,自动注入凭证
// Agent 永远不知道密钥,无法泄露
安全优势:
- 密钥不在代码中
- Agent 无法泄露它不知道的东西
- 拦截、检查、修改所有出站请求
四、Code Mode:为什么更省 Token?
4.1 两种模式对比
Tool Call 模式:
用户 → Agent → Tool Call → API → 返回结果 → Agent
↓
结果进入对话上下文
消耗 token
Code Mode 模式:
用户 → Agent → 生成代码 → 沙箱执行 → 最终结果 → Agent
↓
中间数据在沙箱内流转
不消耗 token
4.2 具体例子
Tool Call 模式:
Agent: 调用 getHistory(100)
工具返回: [100条消息] ← 约 5000 tokens 进入上下文
Agent: 调用 filter({author: "alice"})
工具返回: [过滤后消息] ← 约 2000 tokens 进入上下文
总计: 约 7000+ tokens
Code Mode 模式:
// Agent 生成代码
let history = await env.CHAT.getHistory(100);
return history.filter(m => m.author === "alice");
代码: 约 30 tokens
最终返回: 约 200 tokens
总计: 约 230 tokens
4.3 节省比例
| 场景 | Token 节省 |
|---|---|
| MCP → TypeScript API | 81% |
| OpenAPI → TypeScript | 70-80% |
| 多次 Tool Call → 单次代码 | 50-70% |
五、TypeScript API vs OpenAPI
5.1 TypeScript 接口(简洁)
interface ChatRoom {
getHistory(limit: number): Promise<Message[]>;
subscribe(callback: (msg: Message) => void): Promise<Disposable>;
post(text: string): Promise<void>;
}
type Message = { author: string; time: Date; text: string; }
Token 消耗:几十个
5.2 OpenAPI 规范(冗长)
openapi: 3.1.0
info:
title: ChatRoom API
version: 1.0.0
paths:
/messages:
get:
operationId: getHistory
parameters:
- name: limit
in: query
schema:
type: integer
responses:
"200":
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/Message"
# ... 还有很多行
Token 消耗:数百个
5.3 选择建议
| 场景 | 推荐 |
|---|---|
| 新项目 | TypeScript API |
| 已有 REST API | HTTP + globalOutbound 拦截 |
| 复杂权限控制 | TypeScript 包装层 |
六、安全架构
6.1 挑战
Isolate 沙箱比硬件虚拟机攻击面更复杂:
- V8 安全漏洞比 hypervisor 更常见
- 需要额外的防御层
6.2 Cloudflare 的防御措施
| 措施 | 说明 |
|---|---|
| 快速补丁 | V8 安全补丁数小时内部署,比 Chrome 更快 |
| 双层沙箱 | 自定义第二层沙箱,动态隔离租户 |
| 硬件特性 | 扩展 V8 沙箱,利用 MPK 等 |
| Spectre 防御 | 与顶尖研究人员合作开发 |
| 代码扫描 | 自动扫描恶意模式 |
使用 Dynamic Workers,自动获得接近十年的安全积累。
七、支持的语言与能力
7.1 语言支持
| 语言 | 支持程度 | 推荐 |
|---|---|---|
| JavaScript | ✅ 主要支持 | ⭐ 小段代码首选 |
| TypeScript | ✅ 支持 | ⭐ 需要 bundler |
| Python | ✅ 支持 | 小代码不如 JS 快 |
| WebAssembly | ✅ 支持 | 高性能计算 |
7.2 代码能力
// API 调用
let data = await env.API.getData();
// 文件操作(@cloudflare/shell)
await state.write("output.txt", content);
// 数据库
let users = await env.DB.query("SELECT * FROM users");
// HTTP 请求(如果允许)
let response = await fetch(url);
// 组合操作
let result = await Promise.all(tasks.map(t => process(t)));
八、辅助库
8.1 Code Mode SDK
const executor = new DynamicWorkerExecutor({
loader: env.LOADER,
globalOutbound: null, // 完全隔离
});
const codemode = createCodeTool({
tools: myTools,
executor,
});
8.2 Worker Bundler
const { mainModule, modules } = await createWorker({
files: {
"src/index.ts": code,
"package.json": `{"dependencies": {...}}`
}
});
8.3 Shell(文件操作)
- 虚拟文件系统
- 读写、搜索、替换、diff、glob
- 持久化存储(SQLite + R2)
九、适用场景
| 场景 | 适用性 | 说明 |
|---|---|---|
| AI Agent 沙箱 | ⭐⭐⭐ | 完美匹配 |
| 用户自定义脚本 | ⭐⭐⭐ | 隔离 + 快速 |
| 代码执行环境 | ⭐⭐⭐ | 安全可靠 |
| 多租户隔离 | ⭐⭐⭐ | 无限并发 |
| 长时间任务 | ⭐ | 考虑容器 |
十、总结
核心要点
- Dynamic Workers = 运行时动态创建的 Isolate 沙箱
- 比容器快 100 倍,内存效率高 10-100 倍
- 每个请求都可以创建新沙箱,用完即销
- Code Mode 比 Tool Call 节省 80% token
- TypeScript API 比 OpenAPI 简洁 10 倍
- 凭证注入让 Agent 无法泄露密钥
- 久经考验的安全架构
一句话总结
Dynamic Workers 为 AI Agent 提供了毫秒级启动、无限扩展、久经考验的代码执行沙箱,是 AI Agent 时代的理想基础设施。
参考资料
本文由 AI 助手基于 Cloudflare 官方博客整理