Cloudflare Computer | AI Agent 持久工作空间源码 – 三种执行后端 – Preview

Cloudflare Computer 是面向 AI Agent 的开源 TypeScript 工作空间,主包为 @cloudflare/computer,采用 MIT 许可。它把 Durable Object 的 SQLite 持久文件系统,与 Container、Worker Shell、Worker JavaScript 执行后端组合起来,让 Agent 在同一目录里保存文件并运行不同类型的任务。

Cloudflare Computer 柔光纸艺开源工作空间封面

项目仍明确标注 Preview:接口和设计可能变化,目前不适合生产使用。它更适合已经使用 Workers、Durable Objects 的团队验证 Agent 架构。这里重点是包接口和运行条件,不能把仓库中的前瞻设计当成当前全部实现。

文件可以留下,执行环境可以换

Workspace 的权威文件状态保存在 Durable Object 的 SQLite 中,workspace.fs 提供接近 node:fs/promises 的异步读写、目录与搜索接口。它可以不配置任何执行后端,只作为持久工作目录使用。

Worker 后端通过 RPC 操作同一份权威文件,不需要再维护一份同步副本;Container 则由 computerd 提供 FUSE 挂载和同步。写入文件和运行命令是两个接口,持久工作目录也不等于容器进程会一直运行。

Cloudflare Computer Durable Object、SQLite、FUSE 与 Container 同步架构
仓库中的架构图:SQLite 是 Durable Object 文件系统的权威状态,Container 通过 FUSE 与同步协议处理同一工作空间。

三种执行方式,共用入口但能力不同

执行后端更适合的任务额外条件
Worker Shell常见文本命令、Git 和按需导入的轻量功能Dynamic Worker、Worker Loader 与 experimental 标志;不是完整 Linux
Worker JavaScriptECMAScript 模块和结构化输入输出Dynamic Worker、Worker Loader 与 experimental 标志
Container真实 Linux 二进制、Node.js、npm 等任务运行 computerd 的 Cloudflare Container,以及对应绑定和调度配置

当前还保留 Container legacy 入口:一种由 Durable Object 调度容器,另一种由平台根据 containers 配置安排。它们都属于 Container 路线,但示例和绑定不能混着抄。

一个 Workspace 可注册多个带稳定 ID 的后端,调用 runtime.exec(source, { backend }) 时选择。对 Shell 而言,source 是命令;对 Worker JavaScript 而言,它是模块源码。相同接口便于编排,不代表同一段字符串在所有后端有相同含义。

起步可以只验证持久文件系统

安装主包后,把 withWorkspace 应用于 Durable Object。完整 Worker 和类型生成流程见包 README;下面是它要求的关键 Wrangler 配置片段,不是一份独立可部署项目:

npm install @cloudflare/computer
{
  "compatibility_flags": ["nodejs_compat"],
  "durable_objects": {
    "bindings": [{ "name": "Agent", "class_name": "Agent" }]
  },
  "migrations": [
    { "tag": "v1", "new_sqlite_classes": ["Agent"] }
  ]
}

先写一个文件并在后续请求读回,再增加执行能力。Worker Shell 与 Worker JavaScript 还需 experimental 标志和 Worker Loader;只安装 npm 包,不会自动获得 Container 或完整 Linux 环境。

Worker Shell 的功能按组导入,例如 curl、python、sqlite、jq。没有导入的组不会进入 bundle。这既影响包体积,也决定 Agent 到底能调用什么,配置命令时应按实际任务选择。

接入 Agent 时,分别考虑工具与产物访问范围

  • 文件工具:AI SDK 等入口可提供 read、ls、find、grep、write、edit、delete,exec 与 publish 按配置增加。只读任务可以只暴露读取和搜索。
  • Git:可选客户端直接操作 SQLite 虚拟文件系统,不必先启动 Shell。
  • Assets:把文件上传至 R2,再生成预签名 URL;分享时确认有效期和文件内容。
  • Artifacts:传入 session ID 时按会话限定仓库范围;省略它则可以遍历整个命名空间,不能把省略参数当作会话隔离。

工具范围、用户认证和网络出口需要由应用一起安排。目录持久化让 Agent 有地方存文件,不会自动保证模型生成的命令正确,也不会替应用决定谁可以读取这些文件。

原型里的两个实际卡点

大目录与大量读写

包 README 给出的规模是每个 Workspace 约 10 GB,并与 Durable Object 共用存储配额,定位仍是小型 Agent 工作目录。Container 的 computerd 默认使用内存 SQLite 存储;当前性能文档说明可以通过 COMPUTERD_DB 指定磁盘路径,容器侧并非只能使用内存存储。

FUSE 的表现也不能统一说成比磁盘慢。项目基准显示元数据操作和大块顺序 I/O 有不同结果,且测试环境不能直接代表 Cloudflare 容器硬件。准备处理大型依赖、压缩包或仓库时,应使用自己的任务测量启动、执行和同步,而不是套用一组基准倍数。

长会话里的远程对象释放

getWorkspace() 返回的远程 stub,以及 runtime.exec() 返回的执行 handle,需要释放。官方示例使用 using;长会话反复创建而不释放,会在对端累积。读取字符串等纯值结果没有同样的释放要求,子接口随父 Workspace 管理。

先从 examples/worker-shell、examples/worker-javascript 或匹配调度方式的 Container 示例选一条路径。需要修改时,packages/computer 负责上层接口,packages/dofs 负责文件系统,packages/computerd 负责容器侧守护进程;可据此分清问题出在工具编排、存储还是同步。

  • 仓库与 Preview 声明:https://github.com/cloudflare/computer
  • 主包接口和配置:https://github.com/cloudflare/computer/blob/main/packages/computer/README.md
  • 性能与存储说明:https://github.com/cloudflare/computer/blob/main/docs/19_performance.md
Cloudflare Computer | AI Agent 持久工作空间源码 - 三种执行后端 - Preview - 杂货喵
Cloudflare Computer | AI Agent 持久工作空间源码 – 三种执行后端 – Preview
此内容为免费资源,请登录后查看
M币0
发布平台GitHub
编码语言TypeScript
运行环境Cloudflare Workers
项目版本v0.1.1
开源许可MIT
项目状态Preview
免费资源
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容