如果你最近在尝试部署或调用大模型 API,大概率会遇到两个头疼的问题: 延迟太高 成本太贵 。无论是 OpenAI 的 GPT 系列,还是国内主流的 Kimi、GLM,直接调用官方 API 不仅响应速度受网络影响,按 token 计费的模式也让频繁的测试和轻量级应用变得“奢侈”。

有没有一种方案,能让这些强大的模型跑得更快、更便宜,甚至能部署在离用户更近的地方?Cloudflare 给出的答案是 Workers AI 。这不仅仅是又一个“云函数”,而是一个在全球 300 多个城市边缘节点上运行的无服务器 GPU 计算平台。更关键的是,它正在大规模地运行像 Kimi GLM 这样的热门模型。

这篇文章要解决的,正是开发者最关心的三个问题: 第一,Cloudflare Workers AI 到底是如何让模型“变小、变快、变安全”的?第二,作为开发者,我能否以及如何零成本地体验或使用这些能力?第三,这种“边缘 AI”的模式,会如何改变我们构建 AI 应用的成本结构和响应范式?

我们将从技术原理、实操接入、成本对比和未来影响四个维度,为你彻底拆解 Cloudflare 的 AI 边缘计算策略。你会发现,它降低的不仅是几毫秒的延迟和几分钱的成本,更是一种全新的、去中心化的 AI 应用开发思路。

1. 重新理解“边缘AI”:为什么是 Cloudflare Workers AI?

在深入代码之前,我们必须先理解 Cloudflare Workers AI 的定位。它不是一个简单的“模型托管服务”,其核心价值在于 “将计算推向数据产生的地方”

传统的 AI 服务架构通常是“中心化”的:你的应用服务器(可能在东京)向某个区域的 AI 服务 API(比如部署在弗吉尼亚的 AWS 上)发起请求,数据需要横跨大洋。这个过程中,网络延迟(通常 100-300ms)往往比模型推理本身(可能 50ms)还要长。

Cloudflare 的颠覆性在于,它拥有全球最庞大的边缘网络之一。当你使用 Workers AI 时,你的代码和模型(经过优化后)会被部署到离终端用户最近的几十个甚至上百个边缘节点上。这意味着:

  • 延迟极低 :请求无需回源到某个中心机房,在边缘节点就近处理,首次响应时间(TTFB)可降低至 50ms 以内。
  • 成本结构改变 :Cloudflare 采用“请求次数 + 计算时长”的计费模式,并且为免费套餐提供了非常慷慨的额度(每日数万次推理),使得原型验证和小规模应用几乎零成本。
  • 无状态与自动扩展 :作为 Serverless 服务,你无需关心服务器、GPU 驱动、CUDA 版本,也无需为闲置资源付费。流量高峰时,它会自动在全球节点间调度和扩展。

那么,Kimi 和 GLM 是如何“上车”的呢?Cloudflare 并没有直接托管完整的原生模型。其核心动作是 “优化与转换” 。通过与智谱 AI、月之暗面等模型提供方合作,Cloudflare 的工程师团队会使用一系列模型压缩、量化、图优化技术(如 ONNX Runtime, GGUF 格式转换),将原始的大模型“瘦身”,使其能够在边缘 GPU(如 NVIDIA A100/T4 的切片)上高效运行,同时尽可能保持原有能力。

这回答了标题中的“更小、更快”。而“更安全”则体现在:1) 请求数据在边缘处理,无需传输到第三方模型厂商的核心服务器,减少了数据泄露的中转风险;2) Cloudflare 的网络本身具备强大的 DDoS 防护和安全策略。

2. 核心概念拆解:Workers、AI、模型与运行时

开始实操前,我们需要明确几个关键概念,避免混淆:

  • Cloudflare Workers : 一个在全球边缘运行 JavaScript/Wasm 的无服务器计算平台。你可以把它理解为“边缘版的 AWS Lambda”。
  • Workers AI : 是 Workers 平台的一个 绑定功能(Binding) 。它不是一个独立产品,而是让你在 Worker 脚本中能直接调用的 AI 推理运行时。
  • AI 模型 : Workers AI 提供了一个 模型目录 ,包括开源模型(如 Llama、Mistral)和合作商业模型(如本次提到的 Kimi、GLM)。这些模型都经过了 Cloudflare 的优化和封装,以统一的 API 提供。
  • 运行时 : 你的 Worker 脚本(JavaScript)运行在 V8 隔离中,而 AI 模型运行在相邻的、安全的 GPU 运行时内。两者通过高效的内部通道通信,对你而言只是一个简单的函数调用。

一个重要认知: 你无法将自己训练的 PyTorch 模型直接上传到 Workers AI 运行。你必须使用其官方支持的模型目录中的模型。目前,Kimi 和 GLM 系列模型(如 GLM-4、GLM-4V)已在该目录中。

这种设计带来了极简的开发者体验,但也限定了使用边界。它最适合 需要低延迟、高并发、轻量级推理的 AI 应用场景 ,例如:

  • 实时聊天助手
  • 文本内容审核/分类
  • 代码补全与解释
  • 文档摘要与翻译
  • 轻量级图像理解(结合 GLM-4V)

3. 环境准备与前置条件

要开始使用 Workers AI 运行 Kimi 或 GLM,你需要准备以下环境:

  1. 一个 Cloudflare 账户 : 访问 Cloudflare 官网 注册,无需信用卡即可开始使用免费套餐。
  2. Node.js 环境 : 本地需要安装 Node.js (版本 18 或更高) 和 npm,用于使用 Wrangler 命令行工具。
  3. Wrangler CLI : Cloudflare 的官方开发、部署工具。通过 npm 全局安装:
    npm install -g wrangler
    
  4. 登录 Wrangler : 在终端中运行以下命令,按提示完成浏览器授权登录。
    wrangler login
    
  5. (可选) IDE 或代码编辑器 : 如 VS Code。

免费额度说明 : Cloudflare 为 Workers AI 提供了每日免费的推理额度,足够个人开发者进行大量测试和小型应用。具体额度可在 Dashboard 查看,通常包括数万次神经元网络调用。

4. 快速开始:创建你的第一个 AI Worker

我们通过一个最简单的例子,实现在边缘调用 GLM-4 模型进行对话。

4.1 初始化项目

在终端中,创建一个新目录并初始化一个 Worker 项目:

# 创建项目目录并进入
mkdir my-ai-worker && cd my-ai-worker
# 初始化一个基础的 Worker 项目(选择“Hello World”模板即可)
wrangler init

在初始化过程中,Wrangler 会交互式地询问项目配置。对于本示例,你可以全部选择默认选项。

4.2 配置 wrangler.toml

初始化后,项目根目录会生成一个 wrangler.toml 文件。这是 Worker 的配置文件。我们需要在其中绑定 Workers AI。用编辑器打开该文件,确保其内容类似如下:

name = "my-ai-worker"
compatibility_date = "2024-08-01"

# 关键步骤:绑定 AI 服务
ai = { binding = "AI" }

ai = { binding = "AI" } 这行配置是核心,它在你 Worker 的运行时环境中注入了一个名为 AI 的对象,通过它你可以调用模型。

4.3 编写 AI 推理代码

接下来,修改 src/index.js 文件(如果是 TypeScript 项目则是 src/index.ts )。我们将编写一个处理 HTTP 请求并调用 GLM-4 的 Worker。

// src/index.js

export default {
  async fetch(request, env) {
    // 1. 解析请求,获取用户输入的问题
    const url = new URL(request.url);
    const question = url.searchParams.get('question') || '你好,请介绍一下你自己。';

    // 2. 调用 Workers AI 的 GLM-4 模型
    // env.AI 就是我们在 wrangler.toml 中绑定的对象
    const response = await env.AI.run('@cf/glm-4', {
      prompt: question,
      // 其他可选的参数,例如 max_tokens, temperature 等
      max_tokens: 500,
      stream: false // 设为 true 可启用流式响应
    });

    // 3. 将模型的回复返回给客户端
    return new Response(JSON.stringify(response, null, 2), {
      headers: { 'Content-Type': 'application/json' },
    });
  },
};

代码解释

  • env.AI.run 是调用 AI 模型的通用方法。
  • @cf/glm-4 是 Workers AI 模型目录中 GLM-4 模型的标识符。对于 Kimi,标识符可能是 @cf/moonshot/kimi (具体名称需查阅最新文档)。
  • prompt 是必需的参数,即发送给模型的输入文本。
  • max_tokens 控制生成文本的最大长度。
  • stream: false 表示一次性返回完整结果。对于长文本,建议使用流式响应 ( stream: true ) 以获得更好的用户体验。

4.4 本地开发与测试

在部署到云端之前,先在本地运行测试:

wrangler dev

Wrangler 会启动一个本地开发服务器(通常位于 http://localhost:8787 )。打开浏览器或使用 curl 访问:

http://localhost:8787/?question=Cloudflare Workers是什么?

你应该能立即收到一个由 GLM-4 模型生成的、关于 Cloudflare Workers 的 JSON 格式回答。

4.5 部署到全球边缘网络

本地测试无误后,一键部署到 Cloudflare 全球网络:

wrangler deploy

部署成功后,Wrangler 会输出你的 Worker 的线上地址(格式如 https://my-ai-worker.<你的子域>.workers.dev )。现在,你的 AI 应用已经运行在离全球用户最近的边缘节点上了。

5. 进阶应用:构建一个流式对话 API

一次性响应适合简单问答,但真正的对话体验需要流式传输(Streaming)。下面我们改造上面的 Worker,使其支持 Server-Sent Events (SSE) 流式输出,并模拟一个简单的对话历史。

// src/index.js - 进阶版:支持流式对话

export default {
  async fetch(request, env) {
    const url = new URL(request.url);
    const path = url.pathname;

    // 路由处理
    if (path === '/chat' && request.method === 'POST') {
      return handleChat(request, env);
    }
    // 返回一个简单的 HTML 前端页面用于测试
    return new Response(html, { headers: { 'Content-Type': 'text/html' } });
  },
};

// 处理聊天请求
async function handleChat(request, env) {
  const { messages } = await request.json(); // 期望格式: [{role: "user", content: "..."}, ...]
  
  // 将消息历史格式化为 GLM-4 接受的 prompt
  // 注意:不同模型的消息格式可能不同,需参考官方文档
  const formattedPrompt = messages.map(m => `${m.role}: ${m.content}`).join('\n') + '\nassistant:';

  // 调用 AI,启用流式输出
  const stream = await env.AI.run('@cf/glm-4', {
    prompt: formattedPrompt,
    max_tokens: 1024,
    stream: true // 关键:启用流式
  });

  // 创建 SSE 流响应
  const { readable, writable } = new TransformStream();
  const writer = writable.getWriter();
  const encoder = new TextEncoder();

  // 异步处理流式响应
  (async () => {
    try {
      for await (const chunk of stream) {
        // chunk 是 Uint8Array,包含模型输出的 token
        const text = new TextDecoder().decode(chunk);
        // 按照 SSE 格式发送数据
        await writer.write(encoder.write(`data: ${JSON.stringify({ text })}\n\n`));
      }
    } catch (err) {
      console.error('Stream error:', err);
      await writer.write(encoder.write(`data: ${JSON.stringify({ error: err.message })}\n\n`));
    } finally {
      await writer.close();
    }
  })();

  return new Response(readable, {
    headers: {
      'Content-Type': 'text/event-stream',
      'Cache-Control': 'no-cache',
      'Connection': 'keep-alive',
    },
  });
}

// 一个简单的测试前端 HTML
const html = `
<!DOCTYPE html>
<html>
<body>
  <div id="chat"></div>
  <input id="input" type="text"/>
  <button onclick="send()">发送</button>
  <script>
    const chatDiv = document.getElementById('chat');
    const input = document.getElementById('input');
    const messages = [];
    async function send() {
      const userMsg = input.value;
      input.value = '';
      messages.push({role: 'user', content: userMsg});
      chatDiv.innerHTML += '<div>用户: ' + userMsg + '</div>';
      
      const eventSource = new EventSource('/chat');
      eventSource.onmessage = (e) => {
        const data = JSON.parse(e.data);
        if(data.text) {
          chatDiv.innerHTML += '<div>AI: ' + data.text + '</div>';
        }
      };
      eventSource.onerror = () => eventSource.close();
      // 实际应用中,这里应该用 fetch POST 发送消息历史,本例为简化演示
    }
  </script>
</body>
</html>
`;

这个进阶示例展示了:

  1. 路由处理 :区分 API 请求和前端页面。
  2. 消息历史格式化 :如何将对话历史转换为模型接受的输入格式。
  3. 流式响应 :使用 stream: true 参数和 TransformStream 实现 SSE,让用户能实时看到模型生成的内容。
  4. 简单前端集成 :提供了一个最简化的 HTML 页面进行交互测试。

6. 运行效果、监控与成本验证

部署后,如何验证效果和监控使用情况?

6.1 性能验证

使用 curl Postman 测试你的 API 端点,关注两个核心指标:

  • 首字节时间(TTFB) : 从发起请求到收到第一个响应字节的时间。在边缘部署的场景下,这个时间通常非常短(<100ms)。
    curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s\n" "https://your-worker.workers.dev/chat"
    
  • 端到端延迟 : 整个请求完成的时间。对于流式响应,可以感知到输出的实时性。

6.2 监控与日志

Cloudflare Dashboard 提供了强大的监控能力:

  1. 登录 Cloudflare Dashboard
  2. 进入 Workers & Pages -> 选择你的 Worker。
  3. Metrics 标签页,你可以查看:
    • 请求次数、错误率。
    • CPU 时间 AI 推理神经元调用次数 (这是计费的关键指标)。
    • 各边缘节点的请求分布。
  4. Logs 标签页,可以实时查看或搜索详细的请求/响应日志,这对调试至关重要。

6.3 成本估算与免费额度

Workers AI 的计费基于 神经元网络调用次数(Neuron Network Inference Calls) 。免费套餐通常包含:

  • 每日数万次标准推理调用。
  • 对于 Kimi、GLM 这类较大模型,每次调用消耗的神经元数会更多,但免费额度内仍可进行相当可观的测试。

关键建议 : 在 Dashboard 的 Workers AI 部分查看详细的用量和配额。对于生产应用,务必设置用量告警。

7. 常见问题与排查思路

在实际使用中,你可能会遇到以下问题:

问题现象 可能原因 排查方式 解决方案
部署失败 Error: 400 wrangler.toml 配置错误,或账户权限不足。 1. 运行 wrangler whoami 检查登录状态。
2. 检查 wrangler.toml 语法和 name 全局唯一性。
1. 重新 wrangler login
2. 确保项目名未被占用,修正配置文件。
运行时错误 AI is not defined wrangler.toml 中未正确绑定 AI,或绑定名称不匹配。 1. 检查 wrangler.toml 是否有 ai = { binding = "AI" }
2. 检查代码中是否使用 env.AI (绑定名需一致)。
确保配置绑定,且代码中引用的变量名与 binding 值相同。
模型调用返回 Model not found 模型标识符拼写错误,或该模型在你所在区域不可用。 1. 查阅 Cloudflare AI 文档 ,确认正确的模型 ID。
2. 尝试调用一个已知的简单模型(如 @cf/meta/llama-2-7b-chat-int8 )测试。
使用文档中列出的准确模型 ID。注意商业模型(如 Kimi)可能需要等待区域逐步开放。
响应速度慢,TTFB 高 请求可能未命中边缘节点,或模型冷启动。 1. 在 Dashboard 日志中查看请求的 colo (数据中心)代码。
2. 连续发起两次请求,对比首次和后续请求的延迟。
1. 冷启动是 Serverless 常态,预热或保持一定请求频率可缓解。
2. 检查网络,确保测试客户端离 Cloudflare 节点较近。
流式响应不工作或中断 前端 SSE 实现有误,或 Worker 响应头设置不正确。 1. 用 curl Postman 直接测试 /chat 端点,看是否有数据流。
2. 检查 Worker 代码中响应头 Content-Type: text/event-stream 是否正确设置。
1. 确保后端使用 for await...of 正确迭代流。
2. 前端检查 EventSource 是否正确处理 onmessage onerror
达到速率限制或配额不足 免费额度用尽或超出速率限制。 查看 Dashboard 中 Workers AI 的用量图表和配额信息。 升级付费计划,或优化应用逻辑,减少不必要的模型调用。使用缓存机制。

8. 最佳实践与工程化建议

要将 Workers AI 用于实际项目,请遵循以下建议:

  1. 模型选择与测试

    • 不是所有任务都需要大模型 : 对于文本分类、情感分析等简单任务,先尝试 @cf/meta/llama-2-7b-chat-int8 等更小、更快的开源模型,成本更低。
    • 进行 A/B 测试 : 在关键业务上,对比不同模型(如 GLM-4 vs Kimi)在效果、速度、成本上的差异。
    • 关注模型上下文长度 : Kimi 以长上下文见长,GLM-4 在代码和推理上可能更强。根据场景选择。
  2. 应用层优化

    • 实现对话缓存 : 对于相同或相似的查询,可以在 Worker 中使用 Cloudflare KV 存储缓存结果,避免重复调用模型,大幅节省成本和延迟。
    • 设置超时与重试 : 在 Worker 中调用 env.AI.run 时,使用 Promise.race AbortController 设置合理的超时(如 30秒),并实现简单的重试逻辑(注意重试会增加成本)。
    • 输入验证与清理 : 永远不要将未经处理的用户输入直接发送给模型。实施严格的输入长度、内容检查,防止提示词注入攻击和资源滥用。
  3. 安全与合规

    • 权限最小化 : Worker 默认无需数据库等敏感权限。如需访问 KV、D1 等资源,在 wrangler.toml 中按需绑定。
    • 认证与授权 : 公开的 AI API 极易被滥用。务必通过 API 令牌、JWT、或 Cloudflare Access 等机制对请求进行认证。
    • 内容安全审核 : 对于生成式 AI,考虑在输出给用户前,增加一层内容安全过滤(可调用另一个轻量级审核模型),防止生成有害内容。
  4. 成本监控与告警

    • 利用 Cloudflare Dashboard 告警 : 在 Dashboard 中为 “AI 推理神经元调用” 设置用量告警,避免意外费用。
    • 估算成本模型 : 根据你的业务逻辑(平均对话轮次、每次调用的 token 数),估算月度成本。免费额度外的成本是 $0.01 / 1000 次神经元调用 (价格可能变动,请以官网为准),需提前规划。
  5. 备选与降级方案

    • 不要将所有鸡蛋放在一个篮子里 : 对于核心业务,设计降级策略。当 Workers AI 服务不可用或达到限额时,可以优雅地回退到其他备用 AI API 提供商。
    • 本地测试与模拟 : 在开发阶段,可以编写模拟的 env.AI 对象进行单元测试,避免消耗线上配额。

Cloudflare Workers AI 将高性能的 AI 推理能力变成了像调用一个普通函数一样简单的基础设施。通过将 Kimi、GLM 等模型部署到全球边缘,它从根本上解决了延迟和成本的痛点。对于开发者而言,这意味着你可以用极低的门槛和成本,构建出响应迅捷、体验流畅的下一代 AI 应用。

技术的下一步演进,很可能是更细粒度的模型定制和混合推理——在边缘运行优化后的小模型处理常见任务,复杂任务再路由到中心大模型。作为开发者,现在正是熟悉边缘 AI 范式、优化应用架构的好时机。不妨从今天介绍的简单 Worker 开始,亲手部署一个属于你自己的、运行在全球边缘的智能助手,切身感受“更小、更快、更安全”带来的变化。

更多推荐