"如果要支持消费者级别的 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
速度1x100x
内存效率1x10-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 API81%
OpenAPI → TypeScript70-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 APIHTTP + 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 沙箱⭐⭐⭐完美匹配
用户自定义脚本⭐⭐⭐隔离 + 快速
代码执行环境⭐⭐⭐安全可靠
多租户隔离⭐⭐⭐无限并发
长时间任务考虑容器

十、总结

核心要点

  1. Dynamic Workers = 运行时动态创建的 Isolate 沙箱
  2. 比容器快 100 倍,内存效率高 10-100 倍
  3. 每个请求都可以创建新沙箱,用完即销
  4. Code Mode 比 Tool Call 节省 80% token
  5. TypeScript API 比 OpenAPI 简洁 10 倍
  6. 凭证注入让 Agent 无法泄露密钥
  7. 久经考验的安全架构

一句话总结

Dynamic Workers 为 AI Agent 提供了毫秒级启动、无限扩展、久经考验的代码执行沙箱,是 AI Agent 时代的理想基础设施。


参考资料


本文由 AI 助手基于 Cloudflare 官方博客整理