您的智能体需要计算机,而不是容器——隆重推出 @cloudflare/computer

Matt CareyAron Carroll

阅读时间:6 分钟

本文另有 EnglishDeutschEspañolEspañol (Latinoamérica)Français日本語한국어繁體中文.

最强大的智能体有一个简单的共同点:获得一台属于自己的计算机。

编码智能体正是以这种方式运作的。您向它们提供一个文件系统、Shell、工具、软件包,以及运行代码的能力。它们会检查环境、做出修改、测试成果,然后持续推进。计算机为模型提供了一种熟悉的方式来作用于外部世界。在 Cloudflare,我们正努力提供正确的原语,用于构建最强大的智能体。

今天我们隆重推出 @cloudflare/computer 的早期预览。@cloudflare/computer 包提供一个智能体运行时,由平台来处理哪些代码在隔离环境中运行、哪些在容器沙箱中运行的细节和机制。每个智能体都能获得一台专属计算机,运行时负责优化效率与可扩展性。

我们认为,要满足智能体系统日益增长的算力需求,我们需要着眼于传统容器化之外的解决方案。 

重塑智能体的构建方式

过去六个月里,我们观察到了这一趋势的微妙演变。今年年初,启动一个容器并在其中运行智能体仍是普遍做法。近几个月来,我们看到智能体运行框架迅速转向通过工具提供沙箱化代码执行。这种做法将”双手“(执行工作的沙箱)与”大脑“(智能体循环)分离开来。

BLOG-3464_image6.png

无论运行框架部署在何处,为每个智能体分配容器都面临巨大挑战——纵览所有云服务商和超大规模云厂商(hyperscaler),全球的算力远不足以让每家公司都为其用户的每个智能体提供专属的容器化计算环境。这种模式无法扩展到数亿乃至数十亿个并发智能体的规模。正因如此,全行业对 CPU 算力——而不仅仅是 GPU 算力——产生了极度迫切甚至恐慌性的需求。

Cloudflare 团队一直致力于解决此问题,打造了一种更高效的计算原语:隔离环境(Isolates)。近 10 年前,我们就做出了不同于市场共识的押注,推出 Cloudflare Workers。近六年前,我们推出 Durable Objects,再次做出了同样的押注。我们之所以做出这一押注,是因为隔离环境可以无限横向扩展。它们的启动和销毁都极其迅速。它们可以在智能体空闲时休眠存储智能体自身的状态,甚至启动自身的隔离环境来运行不受信任的代码。隔离环境是横向扩展的最佳方案,而横向扩展恰恰是智能体所需的能力。

BLOG-3464_image3.png

去年,我们向隔离环境提供了启动自身容器沙箱的能力。从第一天开始,Cloudflare 的架构就被设计为在隔离环境(在耐久对象中)运行智能体框架,并按需调用附加容器作为工具。这样一来,您只需在必要时调用更重量级的计算原语,从而优化性能与成本。Durable Objects 可以无限横向扩展,附加的容器让其能够垂直扩展以执行任何任务。这就是我们自己构建智能体的方式,我们也看到客户正以同样的方式打造出令人惊叹的成果。

BLOG-3464_image8.png

然而,当我们看到构建智能体需要多种底层计算原语 (隔离环境和容器),而客户和开发者又需要在用户空间中自行组合它们时,我们认为可以找到更好的解决方案。我们认为可以提供更简单的抽象。

这就是为什么我们将这项实验的第一步定为以开源库的形式发布 @cloudflare/computer——我们希望与那些正在探索大规模运行智能体极限的客户共同探索学习。

跨隔离环境和容器的共享文件系统

@cloudflare/computer 包基于一个简单的前提:如果我们为智能体提供一个预配置的文件系统,以声明式方式定义,包含当前任务所需的一切,以及一组可用于操作这些文件的执行环境,每种环境在速度、能力和成本方面各有优劣,会怎样?

事实证明,如今的智能体在选择合适的环境以完成手头任务的能力令人惊讶。如果一项任务仅涉及文件操作、数据处理或 git 仓库管理,那么完全可以在隔离环境中运行。需要 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;

  /* 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 的虚拟文件系统,可以从包括云存储和源代码管理在内的各种来源获取数据。

BLOG-3464_image7.png

工作区还支持可选的执行运行时,使您能够在文件系统上运行代码。所有运行时都支持相同的接口 exec(string, options),目前提供了两种默认选项(但您可以自行编写):

  • 一个基于隔离环境的运行环境,使用 just-bash 将 shell 代码转换为 JavaScript,并在一个动态 Worker中运行。此处,文件系统可以通过 Worker 绑定直接访问。
  • 一个容器运行时,使用Cloudflare Containers提供完整的 Linux 环境。在此处,文件系统通过用户空间文件系统(FUSE)挂载提供,确保文件对容器可用,并将更改同步回去。

Workspace 类提供了一个 API 接口,可以直接操作文件系统,并提供了与 node:fs 兼容封装,以便轻松与第三方 JavaScript 库配合使用。

image4.png

为了与智能体配合使用,我们提供了一个与 AI SDK 兼容的工具包,内置了最常用的工具:read、write、edit、ls 和 exec。exec 工具有点特殊,因为它可以跨运行时工作并接收 backend 参数。工具描述会引导智能体为当前任务选择正确的运行时:快速、低成本的 Worker 后端,或功能完备的容器运行时。在我们的测试中,前沿模型能够很好地做出正确决策,仅在必要时才回退到使用容器运行时。

下一步

在 Cloudflare,我们已经观察到智能体完全基于隔离环境完成各类工作——使用现代工具构建、测试和部署 JavaScript 应用,为我们的每位客户生成定制化文档,以及利用浏览器执行复杂任务。

我们为 @cloudflare/computer 设定的目标是:为智能体提供一个运行时,仅不到 10% 的工作需要容器,而编程任务、音视频处理和文档创建均可由隔离环境完成。 

欢迎体验早期预览版,我们期待收到您的反馈。