三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

给 AI Agent 装一台虚拟电脑:Cloudflare Computer 实战解析

给 AI Agent 装一台虚拟电脑:Cloudflare Computer 实战解析

当你的 Agent 不再只是"调用 API",而是能真正跑命令、写文件、编译代码——这就是 Cloudflare Computer 在做的事。
读完本文你将了解:操作步骤 | 技术原理 | 架构设计 | 适用场景

🎯 这个项目解决什么问题?

AI Agent 开发中最痛的瓶颈之一:Agent 缺乏持久化的执行环境。
现有的方案要么用临时 sandbox(每次重新创建,状态全丢),要么用 API 调用(只能调外部服务,无法在环境里操作)。Agent 像一个没有桌子的工程师——脑子里有想法,但连把扳手都摸不到。
Cloudflare Computer 给出的答案是:把文件系统 + 执行环境打包进 Durable Object,天然持久化。Agent 写进去的文件,下次对话还在;执行的脚本结果,跨 session 可查。这不是"给 Agent 加一个 API 调用能力",而是给 Agent 一台真正的电脑

🔧 快速上手

Cloudflare Computer 目前处于 PREVIEW 阶段。要跑通第一个示例,你需要:

  1. Cloudflare 账号 + Workers 配额(免费套餐即可)
  2. Wrangler CLInpm i -g wrangler
  3. 一个空的 Workers 项目作为实验环境

Step 1:安装 Computer 包

npminstall@cloudflare/computer

Step 2:创建带 Workspace 的 Worker

import{Workspace}from"@cloudflare/computer";exportdefault{asyncfetch(request,env){constworkspace=newWorkspace({storage:env.MY_DO,// Durable Object storage handle});// 写文件到持久化 VFSawaitworkspace.fs.writeFile("/workspace/hello.txt","Hello, persistent Agent!");// 读取刚写入的文件constcontent=awaitworkspace.fs.readFile("/workspace/hello.txt","utf8");returnnewResponse(`Read back:${content}`);},};

Step 3:配置 wrangler.toml

name = "computer-demo" main = "src/index.ts" [[durable_objects.bindings]] name = "MY_DO" class_name = "MyDO"

Step 4:用 runtime.exec 执行命令

// 使用 container 后端执行 shell 命令consthandle=awaitworkspace.runtime.exec("npm init -y",{backend:"container-shell",cwd:"/workspace",});constresult=awaithandle.result();console.log(result.stdout);

这一步的关键在于backend参数——它决定了你用的是哪个执行表面:

  • container-shell:完整 Linux 用户空间,跑真实命令
  • worker-shell:轻量 shell(just-bash),在 Dynamic Worker 中运行
  • worker-javascript:纯 JavaScript 模块,无 shell

为什么分三种后端?因为性能差几个数量级。npm test需要完整容器,但ls -la用 Worker 就够了——选错后端,钱就花出去了。

⚙️ 技术原理

Cloudflare Computer 的核心设计可以拆成三层:VFS 层、同步协议层、执行层

第一层:SQLite VFS(虚拟文件系统)

所有文件数据存在Durable Object 的 SQLite 存储中。这是整个架构的权威数据源
每个文件被切分成 512KB 的 chunk,每个 chunk 按内容哈希后存入 blob store。同内容只存一份——三个项目都用同一个lodash.min.js,磁盘上只有一个副本。这就是 content-addressed 存储的威力。
写文件时,只有变更的 chunk 被同步回 DO。这比"整个文件重传"省了几倍的带宽和存储。

第二层:同步协议

Container 和 DO 之间通过capnweb RPC保持同步。同步流程:

push → spawn → events/result → pull
  • push:把 DO 侧的变更推到容器
  • spawn:启动命令执行
  • events/result:收集执行结果
  • pull:把容器的文件变更拉回 DO
    worker-shell后端跳过 push/pull(它直接读共享存储),所以零同步开销。

第三层:三大执行后端

capnweb RPC 同步

Workers RPC

Workers RPC

Durable Object
SQLite VFS(权威状态)

workspace.runtime.exec

Container 后端

Worker Shell 后端

Worker JavaScript 后端

computerd FUSE Mount

真实 Linux 环境
完整 userland

just-bash 在 Dynamic Worker
通过 Workers RPC 访问 VFS

ECMAScript 模块
直接运行在 Worker 中

性能关键数字(来自官方基准测试):

操作类型Container (FUSE)tmpfs 对比ext4 磁盘对比
stat 1000 个文件1972ms1.49x0.91x
rm 1000 个文件828ms2.56x0.66x
mkdir tree (10³)1598ms1.01x0.74x
find tree1814ms1.00x0.72x
npm init + tiny install599ms0.95x0.95x
完整 npm install (854 包)124.7s3.6x1.9x
解读:元数据密集型操作(stat/rm/find/git)FUSE 比真实磁盘还快——这是 DO 内存 inode store 的红利。但大文件顺序 I/O(64MB 读/写/复制)慢 20-40 倍,这是 content-addressed 写路径(每 chunk 都要哈希 + blob store)的代价。
对实际开发的影响npm install整体差 1.9x,但开发时 90% 的操作是"找文件、读配置、跑测试"——这些都落在 FUSE 优势区间。只有"打包 50MB 的 vendor 目录"才会暴露瓶颈。

执行流程序列

Container (computerd)runtime.execSQLite VFSDurable ObjectClientContainer (computerd)runtime.execSQLite VFSDurable ObjectClientworkspace.runtime.exec("npm test", {backend})解析 backend IDcapnweb RPC 推送上下文FUSE 挂载 DO 侧 VFS命令输出(events stream)执行结果拉取变更(pull)

🏗️ 架构分析

Cloudflare Computer 是一个小精悍的 monorepo,四个核心包各司其职:

@cloudflare/dofs
Durable Object VFS

@cloudflare/computer-rpc
capnweb wire types

@cloudflare/computerd
FUSE mount daemon

@cloudflare/computer
顶层 API + 后端管理

Container Backend

Worker Shell Backend

Worker JavaScript Backend

  • dofs:VFS 核心。SQLite schema、inode 管理、同步协议、Node.js @platformatic/vfs provider
  • rpc:capnweb wire 类型和 server/client 辅助函数
  • computerd:在 container 内运行的 daemon,FUSE mount + HTTP/WebSocket RPC server
  • computer:顶层 API,Durable Object 的入口

为什么不用现成的 Sandbox SDK?

Cloudflare 已有cloudflare/sandbox-sdk,为什么还要做 Computer?答案在设计文档里写得很清楚:
Sandbox SDK 的问题是:每次创建都是全新的容器,状态不持久。Computer 把文件系统搬到 DO 层,天然跨 session 持久化。这是架构层面的根本差异,不是优化问题。

✅ 优缺点 & 适用场景

优势

  • 天然持久化:DO 生命周期内的文件系统状态永久保存,跨 session 可用
  • Content-addressed 存储:同内容去重,节省存储和带宽
  • 元数据操作快于磁盘:FUSE 的 inode cache 在 stat/rm/find 场景下碾压 ext4
  • 多后端路由:不同任务选不同执行表面,性能成本可控
  • Cloudflare 生态整合:与 Workers AI、Think、Artifacts 深度集成

劣势

  • PREVIEW 状态:API 不稳定,不适合生产
  • 大文件 I/O 瓶颈:64MB 读写慢 20-40 倍,打包/构建场景不友好
  • 仅 Cloudflare 平台:依赖 Workers + Containers,跨平台迁移成本高
  • 不接受外部 PR:贡献路径受限

适用场景

  • ✅ AI Agent 开发沙箱(持久化状态、跨 session 上下文)
  • ✅ 自动化 Pipeline(跑测试、build、CI 任务)
  • ✅ 文档/代码分析 Agent(读文件、生成报告、持久化结果)
  • ❌ 需要完整 GPU 的 ML 训练任务
  • ❌ 大文件视频/图像处理
  • ❌ 跨云厂商的 Agent 平台

总结

Cloudflare Computer 不是又一个 sandbox——它是把文件系统和执行环境搬进 Durable Object的一次架构实验。它的价值不在"跑得更快",而在"跑完还能留着"。
对于 AI Agent 领域,这个方向的意义可能比技术细节本身更大:当 Agent 拥有了持久的"工作区",它就不再是"一问一答"的对话工具,而是真正能在环境里工作的协作者。这就是从"API 调用者"到"有桌子的工程师"的跨越。
当然,PREVIEW 状态说明它还远不够成熟。但方向对了——让 Agent 拥有真正的计算环境,是这个赛道终局形态的必经之路。

← 返回列表