返回 文章 学习 CMS 文章

Cloudflare 推出 @cloudflare/computer:为智能体提供动态计算环境

了解 Cloudflare 如何通过 @cloudflare/computer 为智能体提供高效、可扩展的计算环境,超越传统容器化方案。

Cloudflare智能体容器隔离环境
成长分 / 100 79 综合收获、行动、留存与影响

Cloudflare 推出 @cloudflare/computer:为智能体提供动态计算环境
为什么值得读了解 Cloudflare 对智能体计算资源扩展问题的独特解决方案,即结合隔离环境和容器的动态编排。

获取 @cloudflare/computer 的实际使用示例,包括如何实例化工作区、配置后端和集成工具。

关键洞察
  1. 智能体需要自己的电脑(文件系统、shell、工具等)来高效工作,而不仅仅是容器。
  2. 传统容器化无法扩展到数十亿并发智能体,隔离环境(isolates)提供更好的水平扩展性。
  3. @cloudflare/computer 提供由 SQLite 支持的虚拟文件系统,并支持多种执行后端(如 isolate 和容器)。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:12258

你的智能体需要一台电脑,而不是一个容器——介绍 @cloudflare/computer

最强大的智能体有一个简单的共同点:它们被赋予自己的电脑来工作。

编码智能体就是这样工作的。你给它们文件系统、shell、工具、包以及运行代码的能力。它们检查环境、进行更改、测试工作,并继续前进。电脑为模型提供了一种熟悉的方式来作用于世界。在 Cloudflare,我们正在努力提供正确的原语,以构建最强大的智能体。

今天我们推出早期预览版 @cloudflare/computer 包提供了一个智能体运行时,其中代码在隔离环境、容器沙箱或 Web 浏览器中运行的细节和机制由平台处理。每个智能体获得一台电脑,运行时优化效率和可扩展性。

@cloudflare/computer

我们相信,为了满足智能体系统对计算资源日益增长的需求,我们需要超越传统容器化的解决方案。

改变智能体的构建方式

在过去的六个月里,我们看到了这个故事的微妙演变。今年年初,启动一个容器并在其中运行智能体是常态。最近几个月,我们看到了智能体框架通过工具提供沙箱代码执行的快速转变。这将手(完成工作的沙箱)与大脑(智能体循环)分开。

BLOG-3464_image6.png

无论框架在哪里运行,给每个智能体一个容器都带来了挑战——在所有云、所有超大规模提供商中,世界上没有足够的计算资源让每个公司为每个用户的智能体提供自己的容器化计算环境。这无法扩展到数亿,然后是数十亿的并发智能体。这就是为什么行业对 CPU 计算(不仅仅是 GPU 计算)有绝望、恐慌的需求。

我们在 Cloudflare 长期致力于解决这个问题,创建了一个更高效的计算原语:隔离环境。我们在近 10 年前做出了这个非共识的赌注,当时我们 引入了 Cloudflare Workers。我们再次做出了这个赌注,当我们

近六年前。我们做出这个赌注是因为隔离环境具有无限的水平可扩展性。它们启动和拆除非常快。它们可以

引入了 Durable Objects当智能体空闲时,

休眠, 甚至

存储智能体自身状态来运行不受信任的代码。隔离环境是水平扩展的最佳方式,而水平扩展正是智能体所需要的。

启动自己的隔离环境BLOG-3464_image3.png

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

BLOG-3464_image8.png

但是,当我们看到构建代理需要多个底层计算原语(isolates 和容器)以及我们的客户和开发人员需要在用户空间中自行组合它们时,我们认为我们可以做得更好。我们认为我们可以提供一个更简单的抽象。

这就是为什么我们通过将 @cloudflare/computer 作为开源库发布来开始这个实验,以便与那些正在突破大规模运行代理界限的客户一起学习。

跨 isolates 和容器的共享文件系统

@cloudflare/computer 包从一个简单的设想开始:如果我们给代理一个预置的文件系统,以声明方式定义,包含手头任务所需的一切,以及一组用于操作这些文件的执行环境,每个环境在速度、能力和成本方面各有优缺点,会怎样?

事实证明,当今的代理在选择适合手头任务的环境方面出奇地有能力。只需要操作文件、处理数据或管理 git 仓库的工作可以在 isolate 内运行。需要 Linux、npm 或原生二进制的命令可以在容器内运行。两者都作用于相同的文件,这些文件与源文件系统保持同步。

BLOG-3464_image2.png

@cloudflare/computer 包提供了一个持久的文件系统,您可以将其用于 git 仓库、存储桶或您选择的任何文件。它提供了允许您使用 Code Mode 或 bash 命令读取、写入和编辑文件的工具。所有操作都经过门控、审计和观察,使您能够对代理允许执行的更改进行细粒度控制,并清晰记录代理所执行操作的痕迹。

如何使用

@cloudflare/computer 工作区的实例可以在任何 Durable Object 上实例化,以提供虚拟文件系统和执行运行时。

它通过 npm 安装:

npm install @cloudflare/computer

主要用例是为代理提供该文件系统和工具。例如,以下是如何在由 @cloudflare/think 驱动的代理上实例化工作区,该代理旨在对错误报告进行分类。

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 容器。

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;
/* 示例代码已截断以保持可读性... */
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;
/* 示例代码已截断以保持可读性... */
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"),
},
],
},
]);
}
}

查看 workspace 仓库 获取更多关于如何使用不同后端和工具的示例,包括一个

从头构建代理的逐步教程。

逐步教程## 工作原理

@cloudflare/computer 的核心部分是工作区。一个由 SQLite 支持的虚拟文件系统,可以从各种来源填充,包括云存储和源代码控制。

BLOG-3464_image7.png

工作区支持可选的执行运行时,允许针对文件系统运行代码。所有运行时都支持相同的接口 exec(string, options)

目前提供了两个开箱即用的运行时(但你可以编写自己的):

  • 一个基于隔离的运行时环境,使用 将 shell 代码转换为 JavaScript,并在__just-bash__中运行。在这里,文件系统通过 worker 绑定直接可用。动态 worker - 一个容器运行时,使用

提供完整的 Linux 环境。在这里,文件系统通过用户空间文件系统(FUSE)挂载提供,确保文件对容器可用,并且更改会同步回来。Cloudflare Containers

Workspace

类提供了直接操作文件系统的 API 接口,以及一个 node:fs

兼容的包装器,以便可以轻松地与第三方 JavaScript 库一起使用。

image4.png

为了与代理一起使用,我们提供了一个与 AI SDK 兼容的工具包,提供了最常见的工具:read、write、edit、ls 和 exec。exec 工具有点特殊,因为它跨运行时工作,接受一个 backend

参数。工具描述引导代理为手头的任务选择正确的运行时:要么是快速、廉价的 worker 后端,要么是功能齐全的容器。在我们的测试中,前沿模型非常擅长做出正确的决定,并且仅在需要时回退到使用容器。

下一步

在 Cloudflare,我们已经看到代理专门使用隔离环境来构建、测试和部署使用现代工具链的 JavaScript 应用程序,为我们的每个客户生成定制的文档,并使用 Web 浏览器执行复杂的任务。

我们使用 @cloudflare/computer 的目标是为代理提供一个运行时,其中容器仅在其不到 10% 的工作中是必需的,而编码任务、音频/视频处理和文档创建都可以由隔离环境处理。

立即尝试 早期预览 - 我们期待听到你的想法。