跳转到内容
搜索文档

更新日志

Cloudflare 的最新更新与改进。

Agents SDK 包支持 AI SDK v6 和 v7

agents@cloudflare/ai-chat@cloudflare/codemode@cloudflare/think 包现在支持 AI SDK v6 和 v7。现有应用程序在更新这些包时可以保留在 v6 版本。应用程序也可以采用 v7,而无需更改它们使用的 Cloudflare Agents API。

支持的同级依赖范围是 ai@^6 || ^7@ai-sdk/react@^3 || ^4。请使用相匹配的主版本:将 AI SDK v6 与 @ai-sdk/react v3 配对,或将 AI SDK v7 与 @ai-sdk/react v4 配对。

要安装包含 AI SDK v7 的最新包:

npm i agents@latest @cloudflare/ai-chat@latest @cloudflare/codemode@latest @cloudflare/think@latest ai@^7 @ai-sdk/react@^4

Think 会规范化两个 AI SDK 版本的流式传输、工具完成事件和遥测数据。现有的 v6 应用程序在更新 Think 之前无需迁移这些集成。

有关设置和使用的详细信息,请参阅 Think 文档

Agents SDK 减少了 MCP Schema 转换,为 Think 中的 MCP 添加了暴露控制,并且 Code Mode SDK 添加了直接的主机 API

此版本减少了重复的 MCP schema 转换,并为 Think 的自动 MCP 工具暴露添加了选择停用(opt-out)机制。它还允许非 AI-SDK 主机直接调用持久的 Code Mode 运行时。

控制 Think 中直接的 MCP 工具暴露

现在,当实时连接保持相同的工具目录时,Agents SDK MCP 客户端会重用已转换的输入和输出 schema。这避免了在每个模型轮次中再次将每个 MCP JSON Schema 转换为 Zod。

@cloudflare/think 还添加了 includeMcpTools。当您通过 Code Mode 或 Think 自动工具集之外的其他机制暴露 MCP 工具时,可将其设置为 false

import { Think } from "@cloudflare/think";

export class MyAgent extends Think {
	includeMcpTools = false;
	waitForMcpConnections = true;
}
import { Think } from "@cloudflare/think";

export class MyAgent extends Think<Env> {
	includeMcpTools = false;
	waitForMcpConnections = true;
}

此设置将跳过 Think 的自动 getAITools() 调用。MCP 注册、恢复、发现、原始目录访问、直接调用和 Code Mode 连接器仍然正常工作。

当您只需要原始 MCP 目录时,请使用 listTools()。对于连接器设置,请参阅在 Code Mode 中使用 MCP 工具

无需 AI SDK 即可调用 Code Mode 运行时

@cloudflare/codemode@latest 在持久的运行时句柄中添加了 execute()search()describe()。MCP 服务器和其他主机现在可以执行代码并发现连接器方法,而无需将运行时适配到 AI SDK 工具。

const matches = await runtime.search("create issue");
const docs = await runtime.describe(matches.results[0].path);
const outcome = await runtime.execute({
	code: `async () => github.create_issue({ title: "Bug" })`,
});
const matches = await runtime.search("create issue");
const docs = await runtime.describe(matches.results[0].path);
const outcome = await runtime.execute({
	code: `async () => github.create_issue({ title: "Bug" })`,
});

搜索和描述结果为受保护的连接器方法包含 requiresApproval: true。使用现有的 approve()reject() 方法可以恢复处于暂停状态的执行。

有关设置和确切的方法类型,请参阅创建持久 Code Mode 运行时Code Mode API 参考

升级

npm i agents@latest @cloudflare/think@latest @cloudflare/codemode@latest

使用 Devin Outposts 在 Cloudflare 上运行 Devin

Devin Outposts 允许您在 Cloudflare 上运行 Devin Agent。每个 Devin 会话在由 Cloudflare Containers 支持的独立沙箱中运行,因此 Agent 可以在隔离环境中执行代码并使用开发工具。

当您希望 Devin 会话在 Cloudflare 托管的基础设施上运行,且每个会话相互隔离时,请使用 Devin Outposts。

Devin 界面显示已选择 Cloudflare 作为 Outposts 虚拟环境

如需快速入门,请参阅使用 Devin Outposts 在 Cloudflare 上运行 Devin

预算提醒现在默认为按需付费账户开启

我们正在为符合条件的按需付费账户默认开启预算提醒。如果您的账户尚未设置预算提醒,Cloudflare 将为您创建一个账户级别阈值为 $10 的提醒。您的默认提醒将在下一个计费周期开始时启用,因此不会基于您已产生的使用量触发。

我们将在未来几周内分批推出,因此符合条件的账户可能会在不同时间看到其默认提醒出现。

默认提醒的行为与您自行创建的提醒完全相同。当您本计费周期的累计基于使用量的支出达到阈值时,您将收到一封电子邮件通知。该提醒仅供参考,不会限制您的使用量,也不会对您的账户产生任何影响。

使用量每天处理一次,计算前一天的活动,因此预算提醒会在达到阈值后的次日触发,而非实时触发。

预算提醒仅考虑基于使用量的产品支出。定期订阅费用(例如 Workers Paid 计划费用或其他月度计划费用)不包含在阈值计算中。

您可以从 Manage Account(管理账户) > Billing(计费) > **Billable Usage(计费使用量)**或通知设置中更改阈值、添加其他提醒或完全移除默认提醒。如果您已配置自己的预算提醒,则不会有任何变化。

企业合约账户不在此范围内。

如需更多信息,请参阅预算提醒文档

查看 Durable Object 命名空间的总 SQLite 存储指标

现在,您可以在 Cloudflare 仪表板中监控 Durable Object 命名空间随时间变化所使用的 SQLite 总存储量。全新的总存储图表显示了每小时报告的最大存储量。这有助于您识别存储增长、验证数据清理并调查异常使用情况。

总存储图表,显示了一个 Durable Object 命名空间随着时间的推移增长到 260.1 MB 的存储。Go to Durable Objects ↗

该图表仅适用于基于 SQLite 的 Durable Object 命名空间。对于使用旧版键值存储后端的命名空间,它不会显示。不支持按 ID 或名称查看单个 Durable Object 的存储量。

欲了解更多信息,请参阅指标和分析

在 Activity 记录中预览已发送的电子邮件

您现在可以直接从 Email Service Activity 记录中预览已发送电子邮件的内容。展开已发送的电子邮件,然后打开全新的 Preview(预览) 部分,通过呈现的 HTML 正文、Text(文本) 正文、Headers(标头)Attachments(附件) 以及完整的 Raw(原始) RFC 5322 源码标签页,检查发送出去的邮件。

在 Email Service Activity 记录中已发送电子邮件的渲染 HTML 预览

此前,Activity 记录仅显示递送和身份验证的元数据,而不显示邮件内容,这使得渲染和内容问题难以调试。邮件预览功能弥补了这一空白。

要启用邮件预览功能,请在您发送域的设置中开启 Email preview(邮件预览)。预览范围包括在开启此设置期间发送的邮件,预览内容将保留大约七天。在 2026 年 7 月 2 日或之后接入的发送域将自动开启 Email preview(邮件预览)

发送域设置中的 Email preview 设置

有关详细信息,请参阅 电子邮件日志

通过 Wrangler 从命令行管理 Flagship

Wrangler 现在包含 wrangler flagship,这是一套用于在终端中管理 Flagship 应用和功能标志的命令套件。

创建一个应用,如果您在 Worker 中使用它,可将其作为绑定(binding)添加到 wrangler.jsonwrangler.jsonc 文件中:

wrangler flagship apps create "My Worker App" \
  --binding FLAGS \
  --update-config

然后为您要控制的行为创建标志。标志可以是布尔值、字符串、数字或 JSON 值:

wrangler flagship flags create <APP_ID> new-checkout

wrangler flagship flags create <APP_ID> checkout-flow \
  --variation control=old-checkout \
  --variation treatment=new-checkout \
  --default control \
  --type string

标志创建后,可以更改其默认变体,或使用启用和禁用命令作为开关。除非您明确更改或清除,否则现有的定向规则将继续适用:

wrangler flagship flags update <APP_ID> checkout-flow --default treatment
wrangler flagship flags disable <APP_ID> checkout-flow
wrangler flagship flags enable <APP_ID> checkout-flow

对于发布工作流,使用 rolloutsplitrules 在不重新部署 Worker 的情况下更改曝光量:

wrangler flagship flags rollout <APP_ID> new-checkout \
  --to on \
  --percentage 25 \
  --by user_id

wrangler flagship flags split <APP_ID> checkout-flow \
  --weight control=80 \
  --weight treatment=20 \
  --by user_id

wrangler flagship flags rules update <APP_ID> checkout-flow \
  --priority 1 \
  --when "country equals US"

这些命令也可以在 CI/CD 流水线、脚本和 AI Agent 中使用,通过 Wrangler 检查 Flagship 状态、更新标志行为或回滚更改。

请参阅 wrangler flagship 命令参考 获取完整的命令指南。

使用 Queues 订阅 Email Sending 事件

您现在可以通过 Queues 事件订阅 订阅 Email Sending 事件,并在队列中接收出站交易性电子邮件的生命周期事件。每个订阅的作用域仅限于一个发送域——可以是区域顶点(如 example.com),也可以是已验证的发送子域(如 send.example.com)。

发布了六种事件类型:message.deliveredmessage.deferredmessage.bouncedmessage.failedmessage.rejectedmessage.complained。使用它们来跟踪送达率、对退信和投诉做出反应,并驱动抑制或重试逻辑。Email Routing 事件不会发布在此数据源上。

每个事件都包含邮件详细信息、递送状态和 SMTP 响应:

{
	"type": "cf.email.sending.message.delivered",
	"source": {
		"type": "email.sending",
		"zoneId": "023e105f4ecef8ad9ca31a8372d0c353",
		"domain": "example.com"
	},
	"payload": {
		"messageId": "0101018f7d0c4d9a-msg-deadbeef",
		"recipient": "[email protected]",
		"terminal": true,
		"delivery": {
			"status": "delivered",
			"smtpStatusCode": "250"
		}
	}
}

请参阅 事件订阅 以查看所有事件类型和示例有效负载。

已弃用旧版 Workers KV 命名空间 API 路由

截至 2026 年 7 月 15 日,/accounts/{account_id}/workers/namespaces/* 下的旧版 Workers KV API 路由已弃用,并将于 2026 年 10 月 15 日停止工作。请在此日期之前迁移到文档化的 Workers KV API 路由 /accounts/{account_id}/storage/kv/namespaces/*

旧版路由和替换后的路由是可互换的。它们接受相同的请求参数并返回相同的响应负载。要进行迁移,请将 URL 路径从 /workers/namespaces/ 更新为 /storage/kv/namespaces/

您需要做什么

更新任何调用 /accounts/{account_id}/workers/namespaces/ 下路由的集成,以使用 /accounts/{account_id}/storage/kv/namespaces/ 下的等效路由。此迁移是直接的 URL 路径替换 —— 请求参数和响应负载完全相同:

  • GETPOST /accounts/{account_id}/workers/namespacesGETPOST /accounts/{account_id}/storage/kv/namespaces
  • GETPUTDELETE /accounts/{account_id}/workers/namespaces/{namespace_id}GETPUTDELETE /accounts/{account_id}/storage/kv/namespaces/{namespace_id}
  • GET /accounts/{account_id}/workers/namespaces/{namespace_id}/keysGET /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/keys
  • GET /accounts/{account_id}/workers/namespaces/{namespace_id}/metadata/{key_name}GET /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/metadata/{key_name}
  • GETPUTDELETE /accounts/{account_id}/workers/namespaces/{namespace_id}/values/{key_name}GETPUTDELETE /accounts/{account_id}/storage/kv/namespaces/{namespace_id}/values/{key_name}

有关弃用时间线的更多信息,请参阅 API 弃用

针对账户级 Web Analytics 仪表板提高可靠性

Cloudflare Web Analytics (真实用户监控) 已经推出了性能优化,以显著提高账户级仪表板的稳定性和加载速度。

对于较大的账户(拥有超过 100 个 Web Analytics 站点),加载聚合的账户级视图通常会失败,因为大规模的并行查询处理会导致超时或意外的界面错误。此更新优化了如何查询大容量多站点数据,以减少错误并提供更敏捷的仪表板体验。

拥有最多 1,000 个站点的账户现在将能够加载此账户级聚合视图,而不会遇到误导性的错误。

如果您的账户拥有超过 1,000 个站点,由于处理限制,我们目前无法对此数量进行聚合,但您现在将看到清晰的错误提示和说明,引导您过滤到您希望查看其数据的相关站点。

平台现在可以通过 Cloudflare API 创建临时账户

平台现在可以通过 Cloudflare REST API 创建临时预览账户。这允许您的平台在用户登录 Cloudflare 之前部署一个在线的 Worker。

借助临时账户(Temporary Accounts)API,编码智能体、AI 应用构建器和其他平台可以为生成的 Workers 和支持的资源构建类似的流程。

您的平台可以在用户生成、部署和测试应用程序时,让他们保持在平台的引导流程中。用户不需要现有的 Cloudflare 账户,您的平台也不需要该账户的写入权限。

图表显示 AI 智能体在临时账户中部署、验证并重新部署 Worker,然后用户进行身份验证并认领该账户以保留其资源

API 返回一个认领 URL,允许用户将临时账户及其资源转为永久账户和资源。

Cloudflare Drop 展示了这种针对静态网站的“预览并认领”模式。用户可以上传网站,进行一小时的测试和分享,只有在想要保留它时才登录或创建账户。

该 API 扩展了最初通过 wrangler deploy --temporary 引入的流程。您的后端现在可以直接控制配置和部署体验:

  1. 在您的产品中向用户展示 Cloudflare 的服务条款和隐私政策,并要求用户接受它们。
  2. 请求并解决工作量证明(proof-of-work)挑战。
  3. 创建临时预览账户。
  4. 使用返回的临时账户 ID 和 API 令牌进行部署。
  5. 向用户显示已部署的 Worker URL 和认领 URL。
curl "https://api.cloudflare.com/client/v4/provisioning/previews/challenge" \
  -X POST \
  -H "Content-Type: application/json" \
  --data '{}'

curl "https://api.cloudflare.com/client/v4/provisioning/previews" \
  -X POST \
  -H "Content-Type: application/json" \
  --data '{
    "termsOfService": "https://www.cloudflare.com/terms/",
    "privacyPolicy": "https://www.cloudflare.com/privacypolicy/",
    "acceptTermsOfService": "yes",
    "challengeToken": "<CHALLENGE_TOKEN>",
    "solution": {
      "checkpoints": "<BASE64_CHECKPOINTS>"
    }
  }'

有关完整的 API 流程、工作量证明要求、支持的产品和限制,请参阅认领部署(临时账户)。有关此流程背后的背景和设计目标,请参阅 Temporary Cloudflare Accounts for AI agents

Agent 可以响应 MCP 引导式输入(elicitation)请求

现在,使用 addMcpServer 连接到 Model Context Protocol (MCP) 服务器的 Agent 可以处理 引导式输入(elicitation)请求。

引导式输入允许 MCP 服务器在处理工具调用时请求用户输入。表单(Form)模式收集结构化、非敏感的数据。URL 模式在打开带外(out-of-band)流(如第三方授权或支付)之前会征得同意。

sequenceDiagram
    participant 用户
    participant Agent as Agent (MCP 客户端)
    participant 服务器 as MCP 服务器
    participant 浏览器

    服务器->>Agent: elicitation/create
    Agent->>用户: 显示服务器、原因以及输入或 URL
    用户->>Agent: 提交、打开、拒绝或取消
    Agent->>浏览器: 征得同意后打开 URL(URL 模式)
    Agent->>服务器: accept, decline, or cancel
    服务器-->>Agent: 可选的 URL 完成通知

onStart() 中为您 Agent 支持的每种模式注册一个处理器:

import { Agent } from "agents";

export class MyAgent extends Agent {
	onStart() {
		this.mcp.configureElicitationHandlers({
			form: (request, serverId) => this.forwardToUser(request, serverId),
			url: (request, serverId) => this.forwardToUser(request, serverId),
		});
	}

	forwardToUser(request, serverId) {
		// Show the request in your UI and resolve after the user responds.
		throw new Error(
			`Implement elicitation for ${serverId}: ${request.params.message}`,
		);
	}
}
import { Agent } from "agents";
import type { ElicitRequest, ElicitResult } from "agents/mcp";

export class MyAgent extends Agent<Env> {
	onStart() {
		this.mcp.configureElicitationHandlers({
			form: (request, serverId) => this.forwardToUser(request, serverId),
			url: (request, serverId) => this.forwardToUser(request, serverId),
		});
	}

	private forwardToUser(
		request: ElicitRequest,
		serverId: string,
	): Promise<ElicitResult> {
		// Show the request in your UI and resolve after the user responds.
		throw new Error(
			`Implement elicitation for ${serverId}: ${request.params.message}`,
		);
	}
}

连接仅通告配置了处理器的模式。没有处理器的 Agent 不通告任何引导式输入能力,这允许服务器使用其回退方案。SDK 会在每次 MCP 服务器注册时存储通告的模式,以便它们在 Durable Object 休眠后仍能存活。回调函数将保留在内存中,并在 onStart() 运行时重新附着。

有关实现细节和浏览器转发模式,请参阅 MCP 客户端引导式输入mcp-clientmcp-elicitation 示例实现双端对接。

升级

要更新到此版本:

npm i agents@latest

R2 Data Catalog 现在支持只读 API 令牌

R2 Data Catalog 现在接受只读 API 令牌,因此仅读取数据的查询引擎和客户端不再需要读写令牌。此前,每个目录操作都需要管理员读写令牌,这意味着只读客户端被授予了超出实际需要的访问权限。

您现在可以根据工作负载对 Iceberg 引擎进行身份验证:

  • 只读操作(例如列出命名空间、加载表和查询数据)可使用管理员只读令牌(R2 Data Catalog 读取和 R2 存储读取)。
  • 写入操作(例如创建或删除表以及提交事务)继续需要管理员读写令牌。

这让您可以遵循最小权限原则——例如,为向表写入数据的管道使用读写令牌,为 R2 SQLDuckDBPyIceberg 等查询引擎使用只读令牌。

请注意,目录颁发的凭证继承用于身份验证的令牌的 R2 存储权限。为确保对底层数据的只读访问,请将 R2 存储权限也限定为只读。

有关选择和创建正确令牌的详细信息,请参阅对 Iceberg 引擎进行身份验证

R2 Data Catalog 压缩现在优化清单文件

R2 Data Catalog 是直接内置于 R2 的托管 Apache Iceberg 目录,现在作为压缩的一部分自动优化清单文件。

清单文件跟踪组成 Iceberg 表的数据文件。随着表积累了许多小型或碎片化的清单,查询引擎在查询规划期间必须读取更多元数据,这会导致查询变慢,甚至在扫描任何数据之前就已如此。

当压缩运行时,R2 Data Catalog 现在会按分区重写和聚簇清单文件作为尽力而为的预处理步骤。这可以整合碎片化的清单,减少查询引擎必须打开的清单数量,并降低元数据 I/O 开销。已经聚簇良好的表将被跳过,因此该操作仅在能带来收益时才运行。

对于已启用压缩的表,此功能自动生效——无需任何配置更改。

如需更多信息,请参阅表维护

Markdown 转换的纯文本输出

Markdown 转换服务现在支持一个新的 output 转换选项,用于控制转换后内容的格式。

output.format 设置为 text 以接收移除了 Markdown 语法的纯文本。默认值为 markdown,因此现有转换不受影响。

使用 env.AI 绑定(binding):

await env.AI.toMarkdown(
	{ name: "page.html", blob: new Blob([html]) },
	{
		conversionOptions: {
			output: { format: "text" },
		},
	},
);
await env.AI.toMarkdown(
	{ name: "page.html", blob: new Blob([html]) },
	{
		conversionOptions: {
			output: { format: "text" },
		},
	},
);

或者调用 REST API:

curl https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/tomarkdown \
  -H 'Authorization: Bearer {API_TOKEN}' \
  -F '[email protected]' \
  -F 'conversionOptions={"output": {"format": "text"}}'

当您请求文本输出时,每个结果的 format 字段会被设置为 text。有关更多详细信息,请参阅转换选项

Workflows 现在在重试时支持延迟函数

通过 Workflows,您可以为每个步骤配置内置的重试行为。以前,您可以配置具有固定延迟时长(例如秒、分钟或小时)的步骤重试,以及诸如 constantlinearexponential 之类的退避策略。

步骤重试现在支持动态延迟函数。您无需仅选择基本延迟和退避策略,而是可以向 retries.delay 传递一个函数,并根据失败的尝试和抛出的错误计算下一次延迟。

当重试需要取决于故障类型时,这非常有用。您的 Workflow 可能需要在遇到速率限制错误后等待更长时间,但在发生短暂的网络故障后能更快地进行重试。如果下游 API 在其错误消息中返回了 Retry-After 值,延迟函数也可以适应提供商的指导。

await step.do(
	"sync customer",
	{
		retries: {
			limit: 5,
			delay: ({ ctx, error }) => {
				if (error.message.includes("rate limit")) {
					return `${ctx.attempt * 30} seconds`;
				}

				return "10 seconds";
			},
		},
	},
	async () => {
		await syncCustomer();
	},
);
await step.do(
	"sync customer",
	{
		retries: {
			limit: 5,
			delay: ({ ctx, error }) => {
				if (error.message.includes("rate limit")) {
					return `${ctx.attempt * 30} seconds`;
				}

				return "10 seconds";
			},
		},
	},
	async () => {
		await syncCustomer();
	},
);

动态延迟函数可以返回一个持续时间字符串、一个数字或一个解析为持续时间的 Promise。使用它们可以添加自适应重试行为,而无需编写单独的队列或调度逻辑。有关更多信息,请参阅休眠和重试

新的 Durable Object 命名空间必须使用 SQLite 存储后端

如果您的账户中尚无基于键值 (KV) 后端的 Durable Object 命名空间,您将无法再创建新的此类命名空间。新的 Durable Object 命名空间必须使用 SQLite 存储后端。自 2024 年该后端正式商用 (GA) 以来,我们一直推荐所有新的 Durable Objects 使用该后端。

通过 new_sqlite_classes 迁移创建一个新类:

{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "migrations": [
    {
      "tag": "v1",
      "new_sqlite_classes": [
        "MyDurableObject"
      ]
    }
  ]
}
[[migrations]]
tag = "v1"
new_sqlite_classes = ["MyDurableObject"]

基于 SQLite 的 Durable Objects 与键值后端具有同等的功能特性——包括键值存储 API——并且还支持关系型 SQL 查询以及 时间点恢复 (PITR),可将对象存储恢复到过去 30 天内的任意时间点。

如果您尝试在受影响的账户上创建新的基于键值的命名空间(使用 new_classes 迁移),部署将失败并显示以下错误:

Creating new key-value backed Durable Object namespaces is no longer supported on this account. Please create a namespace using a `new_sqlite_classes` migration instead.

此更改仅影响尚未开始使用键值存储后端的账户。拥有至少一个现有基于键值命名空间的账户目前仍可创建新的命名空间,而 Workers 免费计划一直以来仅支持基于 SQLite 的 Durable Objects。这是向将 SQLite 作为 Durable Objects 单一存储后端迈出的更广泛一步,为未来现有基于键值对象的迁移路径做准备。

欲了解更多信息,请参阅 Durable Objects 迁移

Zero Trust Networks 路由终点和 Cloudflare Tunnel 连接字段将于 2026 年 10 月 5 日停用

2026 年 10 月 5 日,两项变更将在 Zero Trust Networks APICloudflare Tunnel API 中生效:移除经过 CIDR 编码的路由终点,且 tunnel list 和 get 响应将不再包含 connections 字段。如果您通过 API、cloudflared、Terraform 或其他集成管理私有网络路由或读取 tunnel 连接详情,请阅读以下部分中的变更说明并在移除日期之前完成迁移。

路由终点

经过 CIDR 编码的路由终点已被弃用,转而使用目前已存在的基于标准 route_id 的终点。这两组终点都是通过 Cloudflare TunnelCloudflare Mesh 路由私有网络(API 仍将 Mesh 节点称为 warp_connector)— 仅请求形状(request shape)发生了变化。

已弃用的终点(将于 2026 年 10 月 5 日移除):

替代终点:

变更内容

已弃用(CIDR 编码路径) 替代方案
路由标识符 路径中经过 URL 编码的 CIDR (/network/{ip_network_encoded}) 路径中的 route_id(创建时 network 移动到请求体中)
创建 POST .../teamnet/routes/network/{ip_network_encoded} 请求体中包含 networktunnel_idPOST .../teamnet/routes
更新 PATCH .../teamnet/routes/network/{ip_network_encoded} PATCH .../teamnet/routes/{route_id}
删除 DELETE .../teamnet/routes/network/{ip_network_encoded} DELETE .../teamnet/routes/{route_id}

需要采取的行动

  1. 通过调用列出 tunnel 路由获取每个路由的 route_id,或者在首次使用替代终点创建路由时从响应中读取它。
  2. 更新任何直接调用经过 CIDR 编码的终点的脚本、后端服务或 CI/CD 流水线。
  3. 如果您使用 cloudflared tunnel route ip add | delete 命令管理路由,请将 cloudflared 升级到最新版本
  4. 如果您使用 Terraform 管理路由,请确保您使用的是最新版本的 cloudflare_zero_trust_tunnel_cloudflared_route 资源以及 Cloudflare Terraform 提供商
# Before: create a route by URL-encoding the CIDR into the path
curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/teamnet/routes/network/172.16.0.0%2F16 \
     -H 'Content-Type: application/json' \
     -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
     -d '{"tunnel_id": "'$TUNNEL_ID'", "comment": "Example comment for this route."}'

# After: create a route with the network in the request body
curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/teamnet/routes \
     -H 'Content-Type: application/json' \
     -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
     -d '{"network": "172.16.0.0/16", "tunnel_id": "'$TUNNEL_ID'", "comment": "Example comment for this route."}'

# After: update or delete a route using its route_id
curl -X PATCH https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/teamnet/routes/$ROUTE_ID \
     -H 'Content-Type: application/json' \
     -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
     -d '{"comment": "Updated comment for this route."}'

curl -X DELETE https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/teamnet/routes/$ROUTE_ID \
     -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

Cloudflare Tunnel 和 Cloudflare Mesh 连接

自同一天起,将从 Cloudflare TunnelCloudflare Mesh 节点(cfd_tunnelwarp_connector API 资源)的 list 和 get 响应中移除 connections 数组。请查询专用的连接终点,而不是从 tunnel 或节点对象中读取该字段。

这会影响:

需要采取的行动

从特定于 tunnel 的连接终点获取连接详情,而不是从 list 或 get 响应中解析。对于 Cloudflare Tunnel,请调用 GET /accounts/{account_id}/cfd_tunnel/{tunnel_id}/connections。对于 Cloudflare Mesh,请调用 GET /accounts/{account_id}/warp_connector/{tunnel_id}/connections

# Before: read connections off the tunnel object
curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/cfd_tunnel/$TUNNEL_ID \
     -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

# After: query connections directly
curl https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/cfd_tunnel/$TUNNEL_ID/connections \
     -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

更新任何从 tunnel list 或 get 响应中解析 connections 的仪表板、监控脚本或自动化。cloudflared 和 Cloudflare Terraform 提供商不读取此字段,因此它们的这一部分更新不需要做任何更改。

做出这些更改的原因

  • 响应更小、速度更快。 具有许多连接的 Cloudflare Tunnel 和 Cloudflare Mesh 节点不再膨胀每次 list 和 get 调用 — 仅在您需要时才获取连接详情。
  • 静态或标识路由的单一方式。 统一使用 route_id 消除了对路径中 CIDR 范围进行 URL 编码的需要,并且与 Zero Trust Networks API 中所有其他资源的寻址方式一致。
  • 跨 API 的一致性。 这两项变更使这些终点与 Cloudflare 针对资源标识符和嵌套详情终点的标准 REST 约定保持一致。

要了解更多信息,请参阅 Zero Trust Networks APICloudflare Tunnel API路由文档。

随 Worker 上传发送 npm 包依赖项元数据

Wrangler 现在在执行 wrangler deploywrangler versions upload 期间,从您项目的 package.json 中收集 npm 包依赖项信息,并将其包含在发送到 Cloudflare API 的上传元数据中。这些数据包括每个依赖项的名称、声明的版本范围以及实际安装的确切版本,有助于实现依赖项分析以及未来的供应链安全功能(如漏洞警报)。

要选择停用,请在您的 Wrangler 配置文件中将 dependencies_instrumentation.enabled 设置为 false

{
	"dependencies_instrumentation": {
		"enabled": false
	}
}
[dependencies_instrumentation]
enabled = false

有关更多详细信息,请参阅 Wrangler 配置

按精确对象键筛选 AI Search 列表项

AI Search 中,您可以将文件上传到实例,或连接诸如 R2 存储桶之类的数据源,从而让您能够使用自然语言搜索您的内容。每个文件都成为由对象 **key(其文件名或路径)**标识的 项(item)列表项端点会返回实例中的项。

该端点现在接受 key 查询参数,因此您可以通过精确的对象键查找单个项,而无需翻页浏览整个列表。这为您知道键但不知道 ID 的情况补充了现有的 item_id 筛选器。

curl "https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/ai-search/instances/<INSTANCE_NAME>/items?key=docs/readme.md" \
  -H "Authorization: Bearer <API_TOKEN>"

键在每个数据源中是唯一的,因此当多个数据源中存在相同的键时,请将 keysource 结合使用(例如 source=builtin)以消除歧义。

有关更多信息,请参阅管理项

Workers AI toMarkdown 和 AI Search 现在支持 GIF 和 BMP 图像转换

除了已支持的 JPEG、PNG、WebP 和 SVG 格式外,Workers AI Markdown 转换 (toMarkdown) 现在还支持 .gif.bmp 图像文件。

GIF 和 BMP 文件与其他格式运行相同的图像流水线。根据需要调整每张图像的大小(对于动态 GIF,仅使用第一帧),然后传递给目标检测模型以识别其包含的内容。这些检测到的目标会提示视觉模型编写图像的自然语言描述,该描述将变成可搜索、机器可读的 Markdown。

AI Search 会自动使用 toMarkdown 来处理它引入的文件,因此下一次您的索引同步时会自动包含任何 .gif.bmp 文件,无需更改任何配置。当您的内容混合了多种格式时,例如充满屏幕截图的支持知识库或 BMP 扫描件的存档,这将非常有用。

详细了解 Markdown 转换 以及 AI Search 支持的文件类型的完整列表。

从仪表板使用 R2 SQL 查询 R2 Data Catalog 表

您现在可以直接从 Cloudflare 仪表板使用 R2 SQL 查询您的 R2 Data Catalog 表,而无需安装 CLI 或接入客户端。这使得在同一个地方探索 Apache Iceberg 数据、验证查询并检查结果变得非常容易。

R2 SQL 查询编辑器

要开始使用,请转到 Cloudflare 仪表板中的 R2 Data Catalog 并选择 **Query data(查询数据)**以启动内置的 SQL 编辑器。从那里您可以:

  • 交互式编写和运行查询 — 直接在浏览器中对 R2 SQL 进行迭代,提供语法高亮和自动完成功能,而无需通过 Wrangler 或 REST API 重新运行命令。
  • 探索您的数据 — 在编辑器旁探索您的命名空间和表,这样您无需离开页面或使用其他工具即可发现哪些内容是可查询的。
  • 了解结果和性能 — 查看包含每个查询统计信息的结果集,导出它们,并获取有用的 EXPLAIN 输出以确切了解查询如何运行。

Moondream 3.1 现已在 Workers AI 上可用

我们与 Moondream 合作,将其最新模型 @cf/moondream/moondream3.1-9B-A2B 引入 Workers AI。Moondream 3.1 是一款基于混合专家(mixture-of-experts)架构构建的快速视觉语言模型,总参数量为 9B,活跃参数量为 2B,可在保持快速、高性价比推理的同时提供前沿级别的视觉推理。

Moondream 3.1 专为实际视觉任务而设计,具备 32K token 上下文窗口,用于处理复杂查询和结构化输出。

关键能力

  • Query(查询) — 针对图像提出开放式问题,带有一个可选的推理参数
  • Caption(描述) — 生成图像的简短、正常或长描述
  • Point(指向) — 返回与目标词组匹配的对象坐标
  • Detect(检测) — 返回与目标词组匹配的对象边界框

边缘实时视觉

像实时摄像头馈送、机器人、内容审核和交互式智能体之类的视觉工作负载,需要毫秒级而不是秒级的响应。Moondream 3.1 较小的活跃占用(2B 活跃参数)与 Workers AI 的无服务器、全球分布式推理完美结合:请求可在靠近您用户的地方运行,且流式响应几乎可以立即开始返回 token。

在我们的测试中,首个 token 在大约 20–30 毫秒内流式返回,并且在每项任务中结果都非常迅速。以下示例端到端时间(客户端观察到的中位数,包括网络往返时间)是针对一张简单的、单一主体的图像。实际延迟很大程度上取决于图像以及您所要求的详细程度。

任务 端到端 (p50)
query ~770 ms
caption ~480 ms
point ~145 ms
detect ~160 ms

在这样的速度下,您可以在处理请求时以内联方式调用模型,而无需将工作推送到后台队列或单独的服务。这开启了那些“如果响应缓慢就会破坏体验”的使用场景:在存储用户上传的图像前对其进行审核、在视频帧中定位对象以驱动实时叠加层、在提交表单时从文档中提取字段,或者让智能体在单轮内检查屏幕截图并决定其下一步操作。

快速入门

通过 Workers AI 绑定(binding) (env.AI.run()) 或 /ai/run 处的 REST API 来使用 Moondream 3.1。您还可以在这些端点中搭配使用 AI Gateway

欲了解更多信息,请参阅 Moondream 3.1 模型页面定价

Cloudflare Drop

Cloudflare Drop 允许您向 Cloudflare 部署静态网站,而无需先拥有 Cloudflare 账户。

Cloudflare 拖放上传界面,用于浏览文件夹或 ZIP 文件

上传包含静态资产(静态 HTML、CSS、JavaScript、图像和字体)的文件夹或 ZIP 文件,即可获得保持在线 1 小时临时的实时预览。在此时间窗内,您可以测试网站、共享预览 URL 或认领该部署以保留它。

Cloudflare 拖放临时实时预览界面,带有认领和复制认领链接操作

当您准备好使部署永久生效时,请点击 Claim(认领) 以登录或创建 Cloudflare 账户。您可以将网站认领到现有的 Cloudflare 账户中,也可以为该部署创建一个新账户。

Cloudflare 拖放认领账户界面,显示认领链接过期前的倒计时

认领网站后,您可以:

  • 添加域名连接现有域名或为您的网站购买新域名。
  • 启用可观测性:监控您网站的性能和使用情况。
  • 启用 Markdown for Agents:允许 AI 智能体以 Markdown 格式访问您网站的内容。
  • 控制访问:将您的网站设为私有并选择谁可以查看它。
已认领的 Cloudflare 拖放网站设置界面,显示添加域名、控制访问、启用可观测性以及为智能体启用 Markdown 的选项

Workflows 定价增加按步骤计费。步骤和存储计费将不早于 2026 年 8 月 10 日开始。

Workflows 定价现在包括按步骤计费。自最初的公开 Beta 版以来已启用请求和 CPU 时间计费,且不会发生变化。

Workflows 增加步骤计费

步骤是 Workflow 执行的每个工作单元,包括诸如休眠等待事件之类的步骤操作。

您可以使用 GraphQL Analytics API 查询 Workflows 分析,包括 Workflow 实例的 stepCount

步骤和存储计费将于 2026 年 8 月 10 日生效

自 2026 年 8 月 10 日起(不早于该日期),Cloudflare 将开始对 Workers Paid 计划的步骤和存储使用进行计费。

存储定价自 Workflows 正式发布以来就已公布,且不会发生变化。存储以 GB-月为单位度量持久化的 Workflow 状态。

维度 Workers Free Workers Paid
步骤 每天包含 3,000 步 每月包含 500,000 步,之后每增加 100,000 步为 0.80 美元
存储 包含 1 GB-月 包含 1 GB-月,之后每增加 1 GB-月为 0.20 美元

Workers Free 计划的开发者无需为超出包含数量的步骤或存储付费。

Cloudflare 在 2026 年 8 月 10 日之前不会对步骤和存储使用量进行计费。

在此更改生效之前,您可以在 Cloudflare 仪表板中查看 Workflows 使用情况。为了降低成本,可以考虑减少每个 Workflow 的步骤数量,或提高存储状态的内存效率。

有关完整详细信息,请参阅 Workflows 定价页面。