你的代理需要电脑,而不是容器——介绍 @cloudflare/computer
最强大的代理有一个简单的共同点:他们被赋予了自己的电脑来工作。
编码代理就是这样工作的。你给他们一个文件系统、一个命令行界面、工具、软件包,以及运行代码的能力。他们检查环境、修改设置、测试工作,然后继续进行。电脑为模型提供了一种熟悉的方式去操作现实世界。在 Cloudflare,我们努力提供构建最强大代理所需的基础设施。
**今天,我们推出了 @cloudflare/computer 的早期预览版本。** 这个 @cloudflare/computer 包提供了一个代理运行时,平台处理在 isolate、容器沙箱或网络浏览器中运行的代码的细节和机制。每个代理都得到一台电脑,运行时优化了效率和可扩展性。
我们相信,为了满足代理系统日益增长的计算需求,我们需要寻找超越传统容器化的解决方案。
## 改变代理的构建方式
在过去六个月中,我们看到这个故事发生了微妙的演变。今年年初,启动一个容器并在其中运行代理是常态。近年来,我们看到代理架构迅速转向通过工具提供沙箱化代码执行。这将手(工作进行的沙箱)与大脑(代理循环)分开。
无论架构在哪里运行,为每个代理提供一个容器都带来了挑战——在所有云服务和超大规模云服务商中,根本无法为每家公司为每个用户的代理提供自己的容器化计算环境。这无法扩展到数亿、甚至数十亿的并发代理。这就是为什么业界迫切需要 CPU 计算,而不仅仅是 GPU 计算。
在 Cloudflare,我们对此问题已经工作很长时间,创造了一个更高效的计算原语:isolates。我们几乎在十年前就做出这个不共识的决定,当时我们[推出 Cloudflare Workers](https://blog.cloudflare.com/introducing-cloudflare-workers/)。我们在将近六年前再次做出这个决定,当时我们[推出 Durable Objects](https://blog.cloudflare.com/introducing-workers-durable-objects/)。我们之所以这样做,是因为 isolates 具有无限的水平可扩展性。它们启动和拆卸得非常快速。它们能够在代理空闲时[休眠](https://developers.cloudflare.com/durable-objects/examples/websocket-hibernation-server/),[存储代理的状态](https://blog.cloudflare.com/sqlite-in-durable-objects/),甚至[自主生成自己的 isolates](https://blog.cloudflare.com/dynamic-workers/) 以运行不受信任的代码。Isolates 是实现水平扩展的最佳方式,而水平扩展正是代理所需要的。
去年,我们[给了 isolates 自主启动自己的容器沙箱的能力](https://blog.cloudflare.com/containers-are-available-in-public-beta-for-simple-global-and-programmable/)。从第一天起,Cloudflare 的架构就设计为在 isolate(Durable Object 中)运行代理架构,并根据需要调用附加的容器作为工具。这使得你能够仅在需要时使用更重的计算原语,从而优化性能和成本。Durable Objects 可以无限水平扩展,而附加容器则能够垂直扩展以执行任何任务。这就是我们自己构建代理的方式,我们也看到客户通过这种方式构建出令人惊叹的产品。
然而,当我们回顾需要多种底层计算原语(isolates 和容器)来构建代理,以及客户和开发者需要在用户空间中自行组合时,我们认为我们可以做得更好。我们希望能提供一个更简单的抽象。
这就是我们开始通过发布 @cloudflare/computer 作为一个开源库进行实验的原因,以便与推动大规模运行代理边界的客户一起学习。
## 跨 isolates 和容器的共享文件系统
@cloudflare/computer 包的起点是一个简单的假设:如果我们为代理提供一个经过预处理的文件系统,声明性地定义,包含完成手头任务所需的一切,以及选择的一系列执行环境来在这些文件上运行,每个环境在速度、能力和成本方面都有自己的优缺点,会怎样呢?
事实证明,今天的代理在选择处理任务所需的正确环境方面出奇地能干。一个只需要操作文件、处理数据或管理 git 仓库的任务可以在 isolate 中运行。一个需要 Linux、`npm` 或本机二进制的命令可以在容器中运行。这两者都可以针对与源文件系统保持同步的相同文件进行工作。
@cloudflare/computer 包提供了一个持久文件系统,你可以与 git 仓库、存储桶或任何你选择的文件一起使用。它提供了可以使用 [Code Mode](https://blog.cloudflare.com/code-mode/) 或 bash 命令读取、写入和编辑文件的工具。所有操作都经过授权、审核和观察,给你对代理允许执行的更改进行细致控制,并清晰记录代理的操作历史。
## 如何使用它
可以在任何 Durable Object 上实例化 @cloudflare/computer 工作区,以提供虚拟文件系统和执行运行时。
通过 npm 安装:
主要用例是为代理提供文件系统和工具。例如,以下是如何在 @cloudflare/think 驱动的代理上实例化工作区以处理错误报告。
@cloudflare/computer 包作为其一部分提供了几个执行后端,或者你也可以自己编写。在这里,我们将一个 Cloudflare 容器连接起来。
此外,暴露文件、git 和 shell 工具,以及特定产品的工具,以回复报告的问题。
模型可以在代理循环期间使用工具,但你也可以直接使用工作区 API,例如,在提示代理之前准备环境。
查看 [workspace repository](https://github.com/cloudflare/computer) 以获取有关如何使用不同后端和工具的更多示例,包括一个 [逐步教程](https://github.com/cloudflare/computer/tree/main/examples/tutorial),该教程详细介绍了如何从头开始构建代理。
## 它是如何工作的
@cloudflare/computer 的核心是工作区。一个由 SQLite 支持的虚拟文件系统,可以从各种来源填充,包括云存储和源控制。
工作区支持可选的执行运行时,允许代码在文件系统上运行。所有运行时支持相同的接口 `exec(string, options)`,并且目前提供两个开箱即用的后端(但你可以自己编写):
- 一种基于 isolate 的运行时环境,使用 [just-bash](https://justbash.dev/) 将 shell 代码转换为 JavaScript,同时在 [动态工作人员](https://developers.cloudflare.com/dynamic-workers/) 中运行。在这里,文件系统可以通过工作人员绑定直接访问。
- 一种容器运行时,使用 [Cloudflare Containers](https://developers.cloudflare.com/containers/) 提供完整的 Linux 环境。在这里,文件系统通过用户空间文件系统(FUSE)挂载提供,确保文件对容器可用并且更改可以同步回来。
`Workspace` 类提供了一个 API 接口,用于直接操作文件系统,以及一个与 `node:fs` 兼容的封装,以便可以与第三方 JavaScript 库轻松配合使用。
为了与代理一起使用,我们提供了一个与 AI SDK 兼容的工具包,提供最常用的工具:读取、写入、编辑、ls 和 exec。exec 工具有点特别,因为它支持跨运行时操作,采用 `backend` 参数。工具描述引导代理选择任务所需的正确运行时:快速、便宜的工作人员后端或功能齐全的容器。在我们的测试中,前沿模型在做出正确决定和仅在需要时回退使用容器方面表现非常好。
## 接下来会发生什么
在 Cloudflare,我们已经看到代理专门使用 isolates 来构建、测试和部署 JavaScript 应用程序,使用现代工具来生成为每个客户量身定制的文档,并利用网络浏览器执行复杂任务。
我们与 @cloudflare/computer 的目标是为代理提供一个运行时,使得容器的工作量少于 10% ,并且编码任务、音频/视频处理和文档创建都可以通过 isolates 处理。
今天就来试试 [早期预览](https://github.com/cloudflare/computer) ——我们期待听到你的想法。
---
原文链接:[点击查看](https://blog.cloudflare.com/cloudflare-computer/)
编码代理就是这样工作的。你给他们一个文件系统、一个命令行界面、工具、软件包,以及运行代码的能力。他们检查环境、修改设置、测试工作,然后继续进行。电脑为模型提供了一种熟悉的方式去操作现实世界。在 Cloudflare,我们努力提供构建最强大代理所需的基础设施。
**今天,我们推出了 @cloudflare/computer 的早期预览版本。** 这个 @cloudflare/computer 包提供了一个代理运行时,平台处理在 isolate、容器沙箱或网络浏览器中运行的代码的细节和机制。每个代理都得到一台电脑,运行时优化了效率和可扩展性。
我们相信,为了满足代理系统日益增长的计算需求,我们需要寻找超越传统容器化的解决方案。
## 改变代理的构建方式
在过去六个月中,我们看到这个故事发生了微妙的演变。今年年初,启动一个容器并在其中运行代理是常态。近年来,我们看到代理架构迅速转向通过工具提供沙箱化代码执行。这将手(工作进行的沙箱)与大脑(代理循环)分开。
无论架构在哪里运行,为每个代理提供一个容器都带来了挑战——在所有云服务和超大规模云服务商中,根本无法为每家公司为每个用户的代理提供自己的容器化计算环境。这无法扩展到数亿、甚至数十亿的并发代理。这就是为什么业界迫切需要 CPU 计算,而不仅仅是 GPU 计算。
在 Cloudflare,我们对此问题已经工作很长时间,创造了一个更高效的计算原语:isolates。我们几乎在十年前就做出这个不共识的决定,当时我们[推出 Cloudflare Workers](https://blog.cloudflare.com/introducing-cloudflare-workers/)。我们在将近六年前再次做出这个决定,当时我们[推出 Durable Objects](https://blog.cloudflare.com/introducing-workers-durable-objects/)。我们之所以这样做,是因为 isolates 具有无限的水平可扩展性。它们启动和拆卸得非常快速。它们能够在代理空闲时[休眠](https://developers.cloudflare.com/durable-objects/examples/websocket-hibernation-server/),[存储代理的状态](https://blog.cloudflare.com/sqlite-in-durable-objects/),甚至[自主生成自己的 isolates](https://blog.cloudflare.com/dynamic-workers/) 以运行不受信任的代码。Isolates 是实现水平扩展的最佳方式,而水平扩展正是代理所需要的。
去年,我们[给了 isolates 自主启动自己的容器沙箱的能力](https://blog.cloudflare.com/containers-are-available-in-public-beta-for-simple-global-and-programmable/)。从第一天起,Cloudflare 的架构就设计为在 isolate(Durable Object 中)运行代理架构,并根据需要调用附加的容器作为工具。这使得你能够仅在需要时使用更重的计算原语,从而优化性能和成本。Durable Objects 可以无限水平扩展,而附加容器则能够垂直扩展以执行任何任务。这就是我们自己构建代理的方式,我们也看到客户通过这种方式构建出令人惊叹的产品。
然而,当我们回顾需要多种底层计算原语(isolates 和容器)来构建代理,以及客户和开发者需要在用户空间中自行组合时,我们认为我们可以做得更好。我们希望能提供一个更简单的抽象。
这就是我们开始通过发布 @cloudflare/computer 作为一个开源库进行实验的原因,以便与推动大规模运行代理边界的客户一起学习。
## 跨 isolates 和容器的共享文件系统
@cloudflare/computer 包的起点是一个简单的假设:如果我们为代理提供一个经过预处理的文件系统,声明性地定义,包含完成手头任务所需的一切,以及选择的一系列执行环境来在这些文件上运行,每个环境在速度、能力和成本方面都有自己的优缺点,会怎样呢?
事实证明,今天的代理在选择处理任务所需的正确环境方面出奇地能干。一个只需要操作文件、处理数据或管理 git 仓库的任务可以在 isolate 中运行。一个需要 Linux、`npm` 或本机二进制的命令可以在容器中运行。这两者都可以针对与源文件系统保持同步的相同文件进行工作。
@cloudflare/computer 包提供了一个持久文件系统,你可以与 git 仓库、存储桶或任何你选择的文件一起使用。它提供了可以使用 [Code Mode](https://blog.cloudflare.com/code-mode/) 或 bash 命令读取、写入和编辑文件的工具。所有操作都经过授权、审核和观察,给你对代理允许执行的更改进行细致控制,并清晰记录代理的操作历史。
## 如何使用它
可以在任何 Durable Object 上实例化 @cloudflare/computer 工作区,以提供虚拟文件系统和执行运行时。
通过 npm 安装:
主要用例是为代理提供文件系统和工具。例如,以下是如何在 @cloudflare/think 驱动的代理上实例化工作区以处理错误报告。
@cloudflare/computer 包作为其一部分提供了几个执行后端,或者你也可以自己编写。在这里,我们将一个 Cloudflare 容器连接起来。
此外,暴露文件、git 和 shell 工具,以及特定产品的工具,以回复报告的问题。
模型可以在代理循环期间使用工具,但你也可以直接使用工作区 API,例如,在提示代理之前准备环境。
查看 [workspace repository](https://github.com/cloudflare/computer) 以获取有关如何使用不同后端和工具的更多示例,包括一个 [逐步教程](https://github.com/cloudflare/computer/tree/main/examples/tutorial),该教程详细介绍了如何从头开始构建代理。
## 它是如何工作的
@cloudflare/computer 的核心是工作区。一个由 SQLite 支持的虚拟文件系统,可以从各种来源填充,包括云存储和源控制。
工作区支持可选的执行运行时,允许代码在文件系统上运行。所有运行时支持相同的接口 `exec(string, options)`,并且目前提供两个开箱即用的后端(但你可以自己编写):
- 一种基于 isolate 的运行时环境,使用 [just-bash](https://justbash.dev/) 将 shell 代码转换为 JavaScript,同时在 [动态工作人员](https://developers.cloudflare.com/dynamic-workers/) 中运行。在这里,文件系统可以通过工作人员绑定直接访问。
- 一种容器运行时,使用 [Cloudflare Containers](https://developers.cloudflare.com/containers/) 提供完整的 Linux 环境。在这里,文件系统通过用户空间文件系统(FUSE)挂载提供,确保文件对容器可用并且更改可以同步回来。
`Workspace` 类提供了一个 API 接口,用于直接操作文件系统,以及一个与 `node:fs` 兼容的封装,以便可以与第三方 JavaScript 库轻松配合使用。
为了与代理一起使用,我们提供了一个与 AI SDK 兼容的工具包,提供最常用的工具:读取、写入、编辑、ls 和 exec。exec 工具有点特别,因为它支持跨运行时操作,采用 `backend` 参数。工具描述引导代理选择任务所需的正确运行时:快速、便宜的工作人员后端或功能齐全的容器。在我们的测试中,前沿模型在做出正确决定和仅在需要时回退使用容器方面表现非常好。
## 接下来会发生什么
在 Cloudflare,我们已经看到代理专门使用 isolates 来构建、测试和部署 JavaScript 应用程序,使用现代工具来生成为每个客户量身定制的文档,并利用网络浏览器执行复杂任务。
我们与 @cloudflare/computer 的目标是为代理提供一个运行时,使得容器的工作量少于 10% ,并且编码任务、音频/视频处理和文档创建都可以通过 isolates 处理。
今天就来试试 [早期预览](https://github.com/cloudflare/computer) ——我们期待听到你的想法。
---
原文链接:[点击查看](https://blog.cloudflare.com/cloudflare-computer/)
评论
暂无评论。