Cloudflare 推出 @cloudflare/computer 预览版:为智能体提供虚拟文件系统与多执行环境
Your agent needs a computer, not a container — introducing @cloudflare/computer
Cloudflare 发布 @cloudflare/computer 早期预览版,这是一个开源智能体运行时,为每个智能体提供虚拟文件系统,并支持在 isolate、容器沙箱或浏览器中执行代码。

最强大的智能体有一个简单的共同点:它们都拥有属于自己的计算机来工作。
编程智能体就是这样工作的。你给它们文件系统、Shell、工具、软件包,以及运行代码的能力。它们检查环境、做出修改、测试自己的成果,然后继续推进。计算机为模型提供了一种熟悉的方式来作用于世界。在 Cloudflare,我们正在努力提供正确的原语,以便在此基础上构建最强大的智能体。
今天,我们推出 @cloudflare/computer 的早期预览版。@cloudflare/computer 软件包提供了一个智能体运行时,其中哪些代码在隔离环境、容器沙箱或 Web 浏览器中运行的具体细节和机制都由平台处理。每个智能体都会获得一台计算机,运行时则针对效率和可扩展性进行优化。
我们相信,为了满足智能体系统对算力日益增长的需求,我们需要在传统容器化方案之外寻找解决方案。
改变智能体的构建方式
过去六个月里,我们看到了这一趋势的微妙演变。今年年初,启动一个容器并在其中运行智能体是常态。而近几个月,我们看到智能体框架迅速转向通过工具提供沙箱化代码执行。这把手(执行工作的沙箱)与大脑(智能体循环)分离开来。

无论框架运行在哪里,给每个智能体都分配一个容器都面临着挑战——纵览所有云厂商、所有超大规模云平台,全球的计算能力远远不足以让每家公司为每个用户的智能体都提供各自独立的容器化计算环境。这种方式无法扩展到数亿、乃至数十亿个并发智能体。这正是整个行业对 CPU 算力(而不仅仅是 GPU 算力)产生迫切、甚至恐慌性需求的原因。
在 Cloudflare,我们长期致力于解决这个问题,打造了一种更高效的计算原语:isolate(隔离实例)。大约十年前,当我们推出 Cloudflare Workers 时,就做出了这个非共识的押注。将近六年前,当我们推出 Durable Objects 时,我们再次押注于此。我们之所以下这个赌注,是因为 isolate 具有无限的水平扩展能力。它们启动和销毁的速度极快。当智能体空闲时,它们可以休眠,存储智能体自身的状态,甚至可以启动自己的 isolate 来运行不受信任的代码。Isolate 是实现水平扩展的最佳方式,而水平扩展正是智能体所需要的。

去年,我们赋予了 isolate 启动自身容器沙箱的能力。从第一天起,Cloudflare 的架构就设计为在 isolate(位于 Durable Object 中)内运行智能体执行框架(agent harness),并按需调用附加的容器作为工具。这使您能够仅在需要时使用更重的计算原语,从而优化性能和成本。Durable Objects 可以无限水平扩展,而附加的容器则使其能够垂直扩展以执行任何任务。这就是我们自己构建智能体的方式,我们也看到客户正在以这种方式构建令人惊叹的东西。

但是,当我们看到构建智能体需要多种底层计算原语(isolate 和容器),并且我们的客户和开发者需要在用户空间中自行组合它们时,我们认为我们可以做得更好。我们认为我们可以提供一个更简单的抽象。
这就是为什么我们启动这个实验,将 @cloudflare/computer 作为开源库发布,以便与那些正在突破大规模运行智能体边界的客户共同学习。
跨 isolate 和容器的共享文件系统
@cloudflare/computer 包从一个简单的设想开始:如果我们给智能体一个预先准备好的文件系统(以声明式方式定义,包含处理当前任务所需的一切),以及一组用于操作这些文件的执行环境(每个环境在速度、能力和成本方面各有优劣),会怎么样?
事实证明,如今的智能体在针对手头任务选择合适环境方面已经出人意料地能干。只需要操作文件、处理数据或管理 git 仓库的任务,可以在隔离环境(isolate)中运行。需要 Linux、npm 或原生二进制文件的命令,可以在容器(container)中运行。两者都作用于同一套文件,这些文件与源文件系统保持同步。

@cloudflare/computer 包提供了一个持久化文件系统,你可以将其用于 git 仓库、存储桶或任何你选择的文件。它提供了多种工具,让你可以使用 Code Mode 或 bash 命令来读取、写入和编辑文件。所有操作都经过门控、审计和观测,让你能够对智能体被允许执行的更改进行细粒度控制,同时提供清晰的审计轨迹,展示智能体实际做了什么。
如何使用
一个 @cloudflare/computer 工作区实例可以在任何 Durable Object 上实例化,以提供虚拟文件系统和执行运行时。
它通过 npm 安装:
npm install @cloudflare/computer主要用例是为智能体提供该文件系统和工具。例如,下面展示了如何在由 @cloudflare/think 驱动、旨在对 bug 报告进行分类的智能体上实例化工作区。
import { Think } from "@cloudflare/think";
import { Workspace, type DurableObjectStorageLike } from "@cloudflare/computer";
import { createWorkersAI } from "workers-ai-provider";
export class Agent extends Think {
override workspaceBash = false;
override workspace = new Workspace({
storage: this.ctx.storage,
useThink: true, // soon will not be needed
});
override getModel() {
return createWorkersAI({ binding: this.env.AI })("@cf/zai-org/glm-5.2");
}
override getSystemPrompt() {
return `
You are a bug triage agent.
Use the project in /workspace/repo to reproduce the bug, inspect the
code, make a focused fix when it is safe, and run verification. In your
final answer, include what you changed, which commands you ran, and
whether verification passed.`;
}
}@cloudflare/computer 包中提供了多个执行后端,你也可以自行编写。这里我们接入了一个 Cloudflare Container。
import { Think } from "@cloudflare/think";
import { Workspace, WorkspaceProxy } from "@cloudflare/computer";
import {
CloudflareContainerBackend,
withWorkspaceContainer,
} from "@cloudflare/computer/backends/container";
export { WorkspaceProxy };
export class Agent extends withWorkspaceContainer(Think) {
override workspaceBash = false;
override workspace = new Workspace({
storage: this.ctx.storage,
useThink: true, // soon will not be needed
backends: [
new CloudflareContainerBackend({
container: () => this,
workspace: {
binding: "Agent",
id: this.ctx.id.toString(),
},
}),
],
});
/* Example code truncated for readability... */
}将文件、git 和 shell 工具与产品特定工具一起暴露出来,用于回复所报告的问题。
import { createAITools } from "@cloudflare/computer/tools";
import type { ToolSet } from "ai";
import { replyToIssue } from "./tools/github";
export class Agent extends withWorkspaceContainer(Think) {
override workspaceBash = false;
/* Example code truncated for readability... */
override getTools(): ToolSet {
return {
...createAITools({
workspace: this.workspace,
shell: {
defaultBackend: "container",
backends: {
container: {
description:
"Cloudflare Container with a full Linux userland: " +
"npm, node, package managers, test runners, and real " +
"binaries on $PATH. Use it when a task needs more than " +
"file manipulation.",
},
},
},
}),
replyToIssue,
};
}
}模型可以在智能体循环中使用工具,但你也可以直接使用工作区 API,例如在提示智能体之前准备环境。
export class Agent extends withWorkspaceContainer(Think) {
override workspaceBash = false;
/* Example code truncated for readability... */
async startTriage(report: { title: string; body: string; repoUrl: string }) {
await this.workspace.fs.mkdir("/workspace", { recursive: true });
await this.workspace.fs.writeFile(
"/workspace/BUG_REPORT.md",
`# ${report.title}\n\n${report.body}\n`,
);
await this.workspace.git.clone({
url: report.repoUrl,
dir: "/workspace/repo",
});
return this.submitMessages([
{
id: crypto.randomUUID(),
role: "user",
parts: [
{
type: "text",
text: [
`Triage this bug: ${report.title}`,
"The bug report is in /workspace/BUG_REPORT.md.",
"The repository is checked out at /workspace/repo.",
].join("\n"),
},
],
},
]);
}
}请查看工作区仓库,了解更多关于如何使用不同后端和工具的示例,其中包含一个从零开始构建智能体的分步教程。
工作原理
@cloudflare/computer 的核心组件是工作区。这是一个由 SQLite 支撑的虚拟文件系统,可以从包括云存储和源代码管理在内的各种来源填充内容。

工作区支持可选的执行运行时,允许代码针对文件系统运行。所有运行时都支持相同的接口 `exec(string, options)`,目前内置提供了两种(但你也可以编写自己的运行时):
- 一种基于隔离(isolate)的运行时环境,使用 just-bash 将 shell 代码翻译成 JavaScript,并在动态 worker 中运行。在这里,文件系统可通过 worker bindings 直接访问。
- 一种容器运行时,使用 Cloudflare Containers 提供完整的 Linux 环境。在这里,文件系统通过用户空间文件系统(FUSE)挂载提供,确保文件对容器可用,并且更改会同步回来。
Workspace 类提供了一个 API 接口,用于直接操作文件系统,同时也是一个与 `node:fs` 兼容的包装器,方便与第三方 JavaScript 库一起使用。

为了与智能体配合使用,我们提供了一个与 AI SDK 兼容的工具包,其中包含最常见的工具:read、write、edit、ls 和 exec。exec 工具有点特殊,因为它跨运行时工作,接受一个 backend 参数。工具描述会引导智能体为当前任务选择正确的运行时:要么是快速、廉价的 worker 后端,要么是功能完备的容器。在我们的测试中,前沿模型非常擅长做出正确的决策,并且只在需要时才回退到使用容器。
下一步计划
在 Cloudflare,我们已经看到智能体完全使用隔离环境,借助现代工具链来构建、测试和部署 JavaScript 应用,为我们的每位客户生成定制化文档,并使用网络浏览器执行复杂任务。
我们推出 @cloudflare/computer 的目标是,为智能体提供一个运行时,使其工作中需要容器的场景占比低于 10%,而编码任务、音视频处理和文档创建都可以由隔离环境来处理。
今天就试用早期预览版吧——我们期待听到你的想法。
来源:Cloudflare Blog · blog.cloudflare.com