Sandboxing AI agents, 100x faster
发布于 2026-03-25 00:31:10(微信公众号导出记录)。
本文来自公众号后台的“导出文章内容”功能。博客正文由导出长图进行本地 OCR 转写,并保留原始排版图用于逐段核对。
原文链接:查看原文
OCR 转写有效文字约 7393 字;代码、流程图和版式以文末原始排版图为准。
正文(本地 OCR 转写)
作者: Kenton Varda、 Sunil Pai、Ketan Gupta
去年九月 Cloudflare 推出了https://blog.cloudflare.con/code-mode/,
其核心理念是:代理不愿旅通通调用工具来行任移,而愿该撰客调用API的程式码。
CLoudflare 已经證明,催催将 MCP 伺服器换为 TypeScript API,就能减少 81%
的token使用量。Cloudflare 遗展示了程式碼模式可以在 MCP 何服器後方谨作,而
不是在前方,而創建了全新的CLoudflare MCP伺股器,用雨個工具和不到1,000
個 token 就零露了整個 Cloudflare API.
但是,如果代理(或MCP何服器)要缺行AI即時生成的程式碼来完成任務,道段程式碼需
要一但通行场所,而個场所必须是安全的。你不能直接在惠用程式中eval()AI生成的程
式碼:照意使用者可以醒易地提示AI注入漏润。
你需要一個沙盒:一個與你的鹰用程式和世界其他地方隔魅的地方,只有程式碼预期访同的特定
功能才能被使用。
為什需要新的沙盒方案? 沙盒是AI行案的熟门話题。对於道回任務,大多數人會選择容器。使用基於Linux的容 器,你可以啟勤任何你想的程式砖敦行填境。Ctoudflare甚至為此提供了容器谨行時和沙 盒SDK 但容器昂贵且敏勤慢,需要数百毫秒来敬助,通行时需要数百兆字節的記倦體,你可能需要保 持它們的熟度以澄免延逻,亚且可能盲试圆為多個任猜重用现有容器,这會损害安全性。 如果想要支援消費者级别的代理,旗每因懿端使用者都有一個代理(或多因!),而且每姻代理 都程式码,那度容器是不萄的。需要更量的束西。 而现在Cloudflare摄有了它。 動態Worker载入器:精簡的沙盒 在CLoudflare去年九月的程式码模式文章中,隐藏著一個新的囊性功能的公告:勤 Worker 截入器 API. 运個 API 允許 Cloudflare Worker 即時實例化一新的 Worker,它位於自已的沙盒 中,程式码在運行時指定,全部都是即時完成的。 勤想Worker载入器现在虑於公開测試段,所有付費的Workers使用者都可以使用。 使用方式 阅遍文件以遵取完整详细資讯,但它的使用方式如下: 1//确你的LLM生成像得的程式码 let agentcade: string = cxport default ( async myAgent(param, env, ctx) { //
10/I接取代表代理密鼓能购防周的API的RPC 存根。 11//(道可以是您定兼的任何 Workers RPC API。) 12let chatRoonRpcStub = ...· I 3 14//使用worker戴入器锦定载入一需worker束通行程式碼。 let worker = env.LoADER.load({ //指定程式强 conpatibilityDate: 2826-03-01, mainModule: *agent,js", nodules: {*agent.js": agentcode }, //給予代理纺間那天室API的耀原。 env: { CHAT_RoOM: chatRoomRpcStub }, 1/限止解碍網路防司。(您也可以据账它。 globaloutbound: null, }) ; //钢用代理程式码尊出的RPC方法 aait worker . getEntrypoint() .myAgent(paran) : 就道样。 速度快100倍 勤Workers使用奥整個CloudflareWorkers平台自八年来一直横建的相同底層沙盒 機制:isolates(隔雕執行個體)。Isolate 是V8 JavaScript 行引擎的實例,與 Google Chrome 使用的引肇相同。 般動一1solate只需要毫秒,使用兆字部的配愉體。這比典型的容器:
-
快的100倍
-
記憶效率高10-100倍
無限展性 许多基於容器的沙盒提供商到全域發沙盒和沙盒建立速率施加了限制感Worker载人器 没有這檬的限制。 它不需要,因為它只是一API,用於防周一直為Cloudflare平台提供動力的相同技術, 而旅技術一直允許Workers無缝携展到每秒数百黄個请求, 想要虚理每秒一百萬請求,每請求都鼓入一個單猫的動Worker沙盒,全部發谨 行?没同题!
零延運
一次性勤慧Workers通常與建立它竹的Worker在同一台機器上谨行-—甚至在同一個行
上。無需在世界凰内通信以找到熟沙盒。Isolates 如此轻量,Cloudflare 可以在請求 到達的任何地方通行它們 勤想Workers 在Cloudflare 全球徽百回位置中的每一個都受到支援。 全是JavaScript 與容器相比,唯一的缺贴是你的代理需要换离JavaScript。 技術上,Workers(包括動服的)可以使用 Python 和 WebAssembly,但封於小程序式 但射於小程序式 码片段——比如代理按需撰的程式碍-—JavaScript曾载入和通行得快得多。 人频倾向於对程式語言有強烈的偏好,然許多人喜JavaScript,但其他人可能更喜款 Python、Rust 或無数其他語言。 但這程被的不是人類,而是AI。 AI 會撰离你要的任何語言。LLM是每種主要语言的需家。它們在 JavaScript 方面的訓l 辣數據定照大的。 JavaScript本置上是為沙盒而設計的,因為它在網路上的特性。它是谊项工作的正確語言。 用TypeScript定羲的工具 如果希望代理能做任何有用的事情,它需要舆外部API通信。如何告薪它可以防周哪些 API ?
-
MCP定教了平面工具调用的架标,但没有定教程式設計API
-
OpenAPI提供了一程表篷RESTAPI的方式,但它在架榻本身和调用它所需藻高的程式
碼方面都很長 對於暴露给JavaScript 的API,有一国明题的答案:TypeScript. 代理了解TypeScript。TypeScript 的設计紧。用很少的 token,你就可以绘你的代理 對你的API 的精確理解。 TypeScript vs OpenAPI 11舅聊天室交互的介面。 interface ChatRoon { //殖取哪天记的最後“Tinit账滑息。 getHistory(linit: nunber): PronisccMessage[]>; //辽院新消息。丢案返回的物件以取消打院。 subscribe(callback: (msg: Messagc) => void): Pronisc<disposable>; /1在刷天中發布消息。 post(text: string): Pronisccvoid>; type Messagc = ( author: string; tine: Date; text: string; CLoudflare 為TypeScript API更好。它使用更少的token,蓝且更容易理解(对 於代理和人類来)。 勤器Worker 截入器使得在你自己的Worker 中實現這様的 TypeScript API 得容易, 然後游其作為方法参数或在env物件中傅退给勤题Worker。Cloudflare Workers 通行 時將自勤在沙盒和控制代碼程式码之同建立Cap'nWebRPC标,以便代理可以跨安全遗界 用你的API,而提不意链到它不是在使用本地康。 代理可以這檬寫代碼 1//思考:使用害要求我缘结来白ALice的最近募天消息。 11我在程式碍中通温最近的游息愿史,道裱我只需要情取相的消息。 let history - aMait env.CHAT_RooM-getHistory(100o) ; return history-flter(nsg => msg-author == "alice*);
HTTP過滤和證注入 如果你更喜数绘你的代理HTTP API,那完金支援。使用worker戴入器API的 globaLOutbound選项,你可以册一個在每個 HTTP 部求時調用的回調,在其中你可以橡 查請求、重离它、注入身份验谊密输、直接喜应它、阻止它,或任何你可能想做的事情。 例如,你可以使用它来實现恶證注入(token注入):常代理向需要授權的服務壁出HTTP請 求時,你在错求外出時添加造。这檬,代理本身微不知道秘密源證,因此不可能流露它们 TypeScript vs HTTP 括如此,在疫有相容性要求的情况下,TypeScript RPC介面侵龄HTTP: 侵势 说明 Token更 TypeScript 介面需要比 HTTP 介面少得多的 token 来描述 少 代碼更間 代理可以摘离程式码来調用Type5cript介面,使用的token比等效的H TTP少得多 安全性更 使用Type5cript介面,更客易缩小介面以暴露你想要提供给代理的功能 高 實现更間 只需撰察一個TypeScript包装器,它只實现你想要允許的功能 單 經過實考驗的安全性 强化基於isolate的沙盒是耕手的,因為它比硬虚提概是更覆離的攻擎面。虽然所有沙盒 楼制都有错膜,但V8中的安全错比典型虚凝機管理程式中的安全锚联更常見。当使用 isolates来沙盒可能恶意的程式碼時,携有外的深应防震屑很重要。 cloudflare的安全優 Cloudflare 有近十年的翘睡来保基於1solate 的平台:
- 自勤部警安全捕丁:Cloudflare的系统在数小时内自動將V8安全祎丁部警到生產跟境
—比 Chrome本身退快
-
二沙盒架:Cloudflare的安全架棉具有定制的二屠沙盒,根據围险评信動態隔雕租户
-
硬體增强:CLoudflLare播展了V8沙盒本身以利用像MPK道模的硬疆功能
-
前沿研究:CLoudflare 與(亚用了)领先的研究人員合作,开髮針對Spectre 的新
防紧措施
- 意代码描:Cloudflare有系统播描程式琪中的照盒模式自動阻止它們或应用额外
的沙盒屋 當你在CLoudflare上使用勤Workers 時,你會自勤獲得所有這些功能。 辅助工具库 Cloudflare横建了一些你在使用勤Workers 時可能觉得有用的率:
1.程式碼模式(@cloudflare/codemode)
简化了使用勐慧Workers对AI工具速行模型生成的程式碼。其核心是DynanicwarkerExe cutar{》,它模建了一專用的沙盒,具有程式碼正规化功能来虑理常見的格式錯误,以及直接 防周globalOutbound擅取器来控制沙盒内部的fetch[)行為。 const executor = new DynamicWorkerExecutor(4 Loader: env.LoADER, globaloutbound:null,//完全隔舱 )); }}; const codenode = creetecodeTool({ tools: myTools, executor, )); return generateText({ nodel, nessages, tools: { codenode },
2.打包工具(@cloudflare/worker-bundler)
勤Workers 需要预打包的模组。ecloudflare/worker-bundler為你虚理运個:给它源 文件和package.json,它册表解析npm 依精项,用esbuild 打包所有内容,蓝返回 Worker 酸入器期望的模组映射。
const worker = env.LoADER.get(ny-worker", async () => { cDnst { mainModule, modules } = wwnit createMorker[{ files:{ "src/index.ts": 1,auoy. unuf { auon } iuodaj import { cors } fron “hono/cors':; canst app = new Hono(); app.use(**, cors{)); app.get(/', (c) => c.text(Hette fron Hono!)): app-get(/json', {c) => c.json(f message: It works! )); :dde lineap lodxa "package-json: Json,stringify({ dependencies: {hono: ^4.0.0"} }1 :({ rcturn {mainodule, modules, conpatibilityDate: “2826-91-91 }; amait worker.getEntrypoint() fetch(request);
3.文件操作(@cloudflare/shelL)
read、write、search、replace、diff、glob、JSoN 查物/更新、archive——具有结標 化翰入和输出,而不是字串解析。
inport { DynamicMorkerExecutor, resolveProvider } from "@cloudflare/cα const workspace = new workspace(( sql:this.ctx.storage.sql。 // 用龄任何 Do 的 SqLStorage、D2 或自定薇 St r2:this.env.MY_BUCKET,// 大文件白融溢出到 R2 name:()=>this.name//增情--在需要解析,而不是在桥造时 >) ; 11//程式码在泣有蜗络防向的隔雕Worker沙盒中通行 Const executor = new DynamicWorkerExecutor(< Loader: env.LoADER ): 14//LLM高迹段程式码:state.旗用通返RPC度回主 const result = aMalt executor.execute( )<= (1 su/se, //在所有Type5cript 文件中擅索模式 1/落多次编骄舒副物單四事验 const plan - awalt state.planEdits([ { kind: *replace", path: /src/app.ts, { kind: *writeJson", path: "/src/config-json", value: { version: 2 3 } 11; 11原子原用—失险時回滨 return await state.applyEditPlan(plan): [resolveProvider(stateTools(workspace))]
實際愿用案例 程式碼模式 關者希望他們的代理撰和執行針對工具API的程式碼,而不是一次一個地追行顺序工具调 用。使用勤慧 Workers,LLM 生成一個 TypeScript 函敏,多图 API 用疑接在一 起,在動Worker中谨行它,亚將最结果返回绘代理。 结果:只有输出,而不是每個中耀步骤,显终會出现在上下文窦口中。這流少了延逗和token 使用,亚座生更好的结果,特别是當工具表面很大時。 Cloudflare 自家的CLoudflareMCP同服器正是以道種方式橘建的:它堡通退雨個工具 —search 和 execute—在不到 1,Bo9 token 中暴露了整 Cloudflare API. 建自定羲自動化 間發者正在使用勤感Workers银代理即時概建自定自勤化。 例如,Zite正在橘建一個愿用程式平台,使用者通退聊天介面進行交互-—LLM在幕後撰寡 TypeScript 来机建CRUD 唐用程式,連接到Stripe、Airtable 和Google Calendar等服務,運行後端通辑,所有这些都無需使用者看到一行程式码。 To enable server-side code for Zite's LLM-generated apps, we needed an execution layer that was instant, isolated, and secure. Cloudflare's Dynamic Workers hit the mark on all three, and out- perforned all of the other platforms we benchmarked for speed and library support. The NodeJS compatible runtine supported all of Zite′s workflows, allowing hundreds of third party integrations, without sacrificing on startup time. Zite now services millions of execution requests daily thanks to Dynamic Workers.J Antony Toron,CTo 和聊合創始人,Zite 運行AI生成的應用程式 開發者正在構建AI生成完整應用程式的平台—無是為了他們的客户還是為了構建原型的 内部图除。 内部團隧。 使用動態Workers:
-
每個應用程式都可以按需動
-
然後放回冷存,直到再次被調用
-
快速動時間使得在活動開發期間预更改變得容易
-
平台還可以阻止或截生成的程式碼發出的任何網絡請求,使AI生成的應用程式可以安全
運行 定價 動熊载入的Workers按每天载入的每個唯一Worker$0.002定價(截至本文發布時), 除了常规WorkerS的通常CPU時間和調用定價之外。 對於AI生成的「程式碼模式」用例,其中每個Worker都是唯一的臨時的,這意味著價格為 每個载入的Worker$0.002(加上CPU和調用)。這填成本與生成程式碼的推理成本相比 通常可以忽略不計。 在測試段,$0.002的費用被免除。由於定價可能會燮化,請始終查看Cloudflare 的動態Workers定價以獲取最新資訊。
原始排版图

