Cloudflare 将更多智能体框架引入平台,以 Flue 为首
Bringing more agent harnesses and frameworks to Cloudflare, starting with Flue
Cloudflare Agents SDK 现已成为任何智能体框架均可构建的运行时。Cloudflare 开放了 Agents SDK 原语,Flue 成为首个针对该 SDK 的框架,同时仪表盘中已推出智能体功能。
2026年是智能体框架投入生产的一年。控制模型与外部世界交互的软件——诸如Codex、Claude Code、OpenCode、Pi和Project Think等框架——已经成熟到团队能够将智能体作为真正承担负载的基础设施来部署,而不仅仅是原型。
但构建能在生产环境中存活下来的智能体并非易事。
我们在构建Project Think作为自有智能体框架的过程中,对此深有体会。在与客户合作将智能体部署到生产环境时,我们发现了一系列每个智能体在云端运行时都会面临的分布式系统共性问题。当智能体被中断时,如何让它自动且优雅地从断点处恢复,既不丢失上下文,也不浪费模型token?智能体如何安全地运行不受信任的代码?智能体如何使用它们所训练过的工具?
框架本身无法独自解决这些问题。它们与状态、存储和计算紧密相关——这意味着它们依赖于智能体所运行的平台。因此,我们将Project Think为生产环境加固的经验,作为基础层引入Cloudflare Agents SDK。持久化执行、动态代码执行、持久化文件系统和动态工作流,现在可供任何基于Agents SDK构建的框架使用。
与此同时,在框架之上出现了一个新层级。像Flue这样的框架,通过项目结构、约定、集成和开发者体验来封装框架,使得构建智能体更加高效。
为了解决这些规模化挑战,一个用于构建生产级AI的新型三层技术栈正在形成。以下是各层如何协同工作,从面向用户的开发者体验到底层平台原语:
框架层(Flue)——用于构建智能体的项目结构、约定、集成、CLI和开发者体验。
框架层(Pi、Project Think)——调用工具、读取结果、管理上下文并持续执行直到任务完成的智能体循环。
运行时/平台层(Cloudflare Agents SDK)——其上层所有组件所依赖的计算、状态和存储原语。
Agents SDK 就是这一底层:它让持久化执行等基础构件可供任何运行框架和任何上层框架使用。Flue 是我们来自 Astro 团队的新开源框架,也是首个基于该 SDK 构建的框架。具体如下。
Flue
Flue 本周发布了 1.0 Beta 版本,它基于 Pi 运行框架构建,与 OpenClaw 所用的运行框架相同。作为智能体框架,其独特之处在于方法:你不是编写脚本规定智能体做什么,而是描述它知道什么。定义智能体所需的上下文——它的模型、技能、沙箱和指令——它就能自主解决你交给它的任何任务。无需编写编排循环。
正是这种声明式模型让编写智能体变得简单:下面是一个分流智能体,它拦截错误报告,在沙箱中复现问题,并在不到 25 行代码内诊断问题。
Flue 开发者体验
Flue 的强大之处在于,智能体并非孤立存在。它们被设计为存在于用户已有的工作环境中,并与你偏好的工具集成:
随处可用的智能体:将你的智能体放入 Slack、GitHub、Linear 或 Discord,使用预配置的通道(Channels)自动处理事件验证和分发样板代码。
无头但支持 UI:智能体不应存在于黑盒中。Flue 智能体可以完全无头运行以处理后台任务,但 @flue/react 提供了原生前端钩子,可将智能体的状态、工具执行和实时消息直接流式传输到你的前端应用中,无需你从头构建自定义实时通信基础设施。
生态就绪:Flue 让你能轻松添加和升级集成,例如使用 `flue add channel slack` 命令,生成一个 Markdown 蓝图,你的编码智能体可以读取、修改并干净地将其直接集成到你的代码库中。
为生产环境设计,而非仅限原型
将智能体从本地终端迁移到生产生态系统会引入传统的分布式系统故障。主机崩溃、来自大语言模型提供商的 API 超时以及意外重启,都可能抹去正在运行的智能体回合的短期记忆。
Flue 通过 Durable Streams 解决了这一问题。执行历史中的每个事件都会被添加到一个仅追加的日志中。通过将每个提示词、工具响应和模型选择都视为不可更改的账本,智能体的状态永远不会是易失的。如果一个进程崩溃,另一个进程只需拾取该日志,并从它中断的确切步骤继续执行。
可部署到任何地方,包括 Cloudflare
Flue 是一个多云框架。在 Node.js 上,每个智能体都作为一个长期运行的进程运行。你可以将其部署到任何虚拟机或容器中,在 GitHub Actions 中运行,或嵌入到现有服务器上。但当目标平台为 Cloudflare 时,每个智能体都会变成一个 Durable Object。
通过将每个 Flue 智能体运行在其自身的 Durable Object 内,Cloudflare 可以自动扩展到你所需的任意数量的智能体,每个智能体都拥有自己独立的存储和计算资源。你无需配置服务器、管理粘性会话,或担心邻居干扰。当 Flue 智能体部署到 Cloudflare 时,它们会利用 Agents SDK 的 `runFiber()`、`stash()` 和 `onFiberRecovered()` 方法实现持久化执行。Flue 还使用 `@cloudflare/codemode` 和 `@cloudflare/shell` 在持久化工作区中执行沙箱化代码。
智能体平台需要为“控制框架”提供什么
Flue 的 Cloudflare 目标之所以如此高效,是因为它清晰地映射到了我们在 Agents SDK 中构建的核心原语。你甚至可以深入研究 Flue 的源代码,了解底层控制框架 Pi 是如何适配到 Cloudflare Agents SDK 上运行的。
以下是 Flue 如何在底层利用 Agents SDK,以及大规模可靠运行任何现代智能体控制框架所需的条件。
每个智能体控制框架都需要持久化执行
智能体的一次交互轮次并非单个请求。模型会流式输出 token、调用工具、等待结果,可能还会请求人工批准,或将任务委派给子智能体。这个序列可能需要几秒或几分钟,并且在此过程中的任何时刻,进程都可能被中断或崩溃。当这种情况发生时,所有存储在内存中的智能体状态都会丢失:流式连接、待处理的工具调用、以及智能体在其交互轮次中的位置。诚然,对话历史会持久化到磁盘,但用户会看到一个永远无法完成的加载动画。这是一种糟糕的用户体验。
纤程通过在智能体底层 Durable Object 内部直接提供原生检查点机制来解决这个问题。runFiber() 会在智能体轮次开始工作之前,将进度记录到 Durable Object 的 SQLite 存储中,并随着轮次推进,通过 stash() 设置检查点。当新的智能体实例在中断后启动时,onFiberRecovered() 会提供最后一个检查点,这样你的智能体就能知道某个轮次被中断了、中断到了哪里,并可以决定如何继续执行。
import { Agent } from "agents";
import type { FiberRecoveryContext } from "agents";
class MyAgent extends Agent {
async doWork() {
await this.runFiber("my-task", async (ctx) => {
const step1 = await expensiveOperation();
ctx.stash({ step1 });
const step2 = await anotherExpensiveOperation(step1);
this.setState({ ...this.state, result: step2 });
});
}
async onFiberRecovered(ctx: FiberRecoveryContext) {
if (ctx.name !== "my-task") return;
const { step1 } = (ctx.snapshot ?? {}) as { step1?: unknown };
if (step1) {
const step2 = await anotherExpensiveOperation(step1);
this.setState({ ...this.state, result: step2 });
}
}
}Flue 正是为此在其 Cloudflare 目标上使用 runFiber()。借助 onFiberRecovered() 钩子,你的编排层可以决定如何恢复该轮次的执行,无论是像 Project Think 那样尝试采用完整的重建模型来修复轮次状态,还是重放轮次的某些部分。
执行代码比给智能体塞满工具更好
智能体编排层通过工具让模型访问外部世界。但工具接口会迅速膨胀,随着工具列表变长、上下文窗口被工具定义填满,模型选择正确工具的能力会变差。一个更好的模式是:给模型一个能执行代码的工具。模型编写一个 TypeScript 函数来调用它所需的 API,然后编排层运行这个函数。我们在推出 Code Mode 时就写过这一点。
问题在于这段代码在哪里运行。要安全地运行 LLM 生成的代码,你需要一个沙箱。但典型的沙箱对于每次工具调用来说,速度慢、成本高且效率低下。这就是为什么 Agents SDK 提供了 @cloudflare/codemode,它封装了 Dynamic Workers,可以在其独立的 Worker 隔离环境中,仅使用你提供的绑定来执行 LLM 生成的代码。
Code Mode 会为每一段代码片段创建一个全新的 Dynamic Worker,运行它,然后将其丢弃。隔离环境在 10 毫秒内启动,每次加载成本为 $0.002,相比每次智能体需要执行一小段代码时都要启动一个容器,执行速度大幅提升,成本也显著降低。Flue 在其 Cloudflare 目标上使用 @cloudflare/codemode 来驱动其代码工具。智能体针对工作区编写 JavaScript,并通过 Code Mode 运行它。
大多数工作区任务并不需要一个完整的容器
智能体框架通常需要一个文件系统,无论是用于读取文件、写入输出、搜索代码还是理解差异。尤其是编码智能体,它们就生活在文件系统中。但如果该框架在无服务器环境中运行,它如何获得一个能在多次执行之间持久存在的文件系统呢?
通常的答案是使用容器。这可行,但对于智能体的大部分操作来说成本高昂。在智能体的一次轮次中,绝大多数文件系统操作都是文本操作。考虑一个审查智能体,它读取文件、通过 grep 搜索源代码,或者可能编写一个补丁。你不需要为此完整启动一个 Linux 系统。
@cloudflare/shell 为你的智能体在其 Durable Object 内部提供了一个由 SQLite 支持的持久化虚拟文件系统。它提供了类型化的文件操作——读取、写入、编辑、搜索、grep、差异对比——智能体框架可以将其作为工具使用。
在 Cloudflare 目标上运行的 Flue 智能体,不是调用单个工具,而是针对工作区虚拟文件状态 API 编写 JavaScript。通过在 Durable Object 内部运行更多操作,智能体受益于隔离模型更高效的执行过程,完全避免了容器的开销:
async () => {
const files = await state.glob("src/**/*.ts");
const results = [];
for (const file of files) {
const content = await state.readFile(file);
const todos = content.match(/\/\/ TODO:.*/g);
if (todos) results.push({ file, todos });
}
return results;
}这为需要运行 shell 和文件系统操作来完成工作的智能体,转化成了一个更快、更具成本效益的沙箱环境。而对于需要完整操作系统来运行 npm install、git 或编译器的智能体,Cloudflare Containers 提供了这种能力。我们还在构建 @cloudflare/workspace,用于将给定 Durable Object 的虚拟文件系统与容器的文件系统保持同步,从而允许在需要时,从轻量级 Workers 无缝过渡到 Linux 环境。
动态工作流:让智能体编写自己的工作流,以一致地重复执行任务
但是,当智能体需要做的不仅仅是读取文件或执行单个代码片段时,会发生什么?当它需要编排一个庞大的、多步骤的流水线,并且该流水线必须随着时间的推移一致地重复执行时,会发生什么?比如一个成功解决 bug 的代码审查,或一个能产生良好结果的研究工作流。一个框架本身无法提供持久的多步骤执行能力。它需要平台来持久化每一步、重试失败步骤并在中断后恢复执行。
这种模式正日益流行。Claude Code 最近推出了动态工作流功能,Claude 会在运行时编写一个 JavaScript 脚本,将任务分发给数十个子智能体,并由运行时环境持久化执行。@cloudflare/dynamic-workflows 为任何基于 Agents SDK 运行的框架提供了这一能力。你的智能体在运行时生成一个工作流,Workflows 引擎会持久化每个步骤、重试失败的任务,并可休眠数小时或等待外部事件(如人工审批)。
在 Agent 类中,runWorkflow() 方法将你的智能体连接到 Workflows 引擎。智能体启动工作流后即可进入休眠状态。工作流通过 RPC 回调智能体,以报告进度、更新状态或请求审批。当工作流完成时,智能体会被唤醒并获取结果。
直接访问 Cloudflare 生态系统
除了计算和存储,智能体框架还需要访问外部能力:网页浏览、电子邮件、记忆、搜索、推理。一个框架不应需要单独集成每一项能力、为每一项管理 API 密钥,或担心凭据通过智能体生成的代码泄露。
Agent 类通过绑定让你的框架能够访问 Cloudflare 的其他服务:AI Gateway 用于每个智能体的花费追踪和限制、Browser Run 用于网页自动化、Email Service 用于收件箱工作流、Agent Memory 用于持久化记忆、AI Search 用于检索、Containers 用于需要完整操作系统的负载,以及覆盖 14 家以上模型提供商的推理服务。绑定在授予能力的同时不会暴露凭据:你的智能体可以使用这些能力,但密钥永远不会进入智能体生成的代码。
将你的智能体带入智能体云
我们知道这种方法行之有效,因为它正是我们构建第一方智能体框架 Project Think 时所使用的架构基础。虽然 Project Think 仍然是我们为原生 Cloudflare 智能体体验提供的高度优化、开箱即用的解决方案,但 Agents SDK 确保更广泛的开源生态系统能够利用这些经过实战检验的相同原语,包括 Flue。
如果你今天正在使用 Flue 构建 AI 智能体,只需点击几下即可部署到 Cloudflare。如果你正在构建自己的智能体框架或开发智能体框架,请以 Agents SDK 为目标,即可免费获得平台集成。
Agents SDK:developers.cloudflare.com/agents
Flue:flueframework.com,npm install @flue/runtime
思考:文档
Cloudflare 社区:community.cloudflare.com
来源:Cloudflare Blog · blog.cloudflare.com