免费部署AI聚合网关:Cloudflare Workers统一管理多模型API
2026/9/1 9:41:47 网站建设 项目流程

这次我们来看一个很省钱的玩法:在 Cloudflare 的免费额度上部署一个 AI 聚合网关。所谓聚合网关,就是把多家模型服务商的接口收拢到一个统一入口后面,上层客户端只需要按 OpenAI 兼容格式发请求,网关负责选模型、带密钥、转发、限流和记日志。重点是:不用买服务器,不需要本地 GPU,整个项目跑在 Cloudflare 的边缘节点上,日常自用基本不会产生托管费用。

先说结论:这类项目适合想统一管理多个 AI API、又不打算维护 VPS 的开发者。文章会直接从项目能力、部署方式、环境变量配置、接口测试、批量调用、免费额度观察几个维度讲清楚,最后给出一套问题排查清单。如果你准备在 Cloudflare 上搭一个轻量 AI 网关,这篇可以直接收藏照着做。

1. 核心能力速览

AI 聚合网关不是模型本身,而是一个 API 转发层。它把不同服务商之间的协议差异屏蔽掉,对外暴露一套统一的Chat Completions接口。从项目标题看,这个网关的核心价值是“一键部署 + 免费云上运行”,下面把这类项目的能力整理成一张表。

能力项说明
项目类型云上 AI API 聚合网关
部署平台Cloudflare Workers / Pages Functions
免费额度Workers 免费计划有每日请求量、CPU 时间等限制,具体以官方最新额度为准
统一协议OpenAI 兼容的 Chat Completions 接口
主要功能多模型路由、API Key 管理、请求转发、限流、日志
是否需要本地服务器不需要
是否需要本地 GPU不需要,网关只做转发,不跑模型推理
是否支持 API 调用是,暴露 REST/JSON 接口
是否支持批量任务客户端可并发调用,部分网关也会提供批量转发能力
成本网关托管基本免费,模型 API 调用费用按上游服务商计费
适合场景个人自用、团队内部统一 API、开发调试、工具链接入

如果和本地部署的模型做对比,这个方案最大的区别是:模型推理仍然发生在 OpenAI、Anthropic、Gemini 等上游服务商那里,网关只负责把请求转过去。所以它“免费”的部分是 Cloudflare 这个中间托管层,不是模型调用本身。

2. 适用场景与使用边界

2.1 适合谁

先说适合的人。如果你手里同时开了好几家模型服务商的 API,平时在脚本、聊天工具、IDE 插件里来回改 base_url 切换模型,那一个聚合网关会明显省事。它把多个 Key 统一成一套网关 Key,模型切换变成请求参数里的一个字段,路由规则由网关统一处理。

团队内部也适合。不用把每个成员的模型服务商密钥都暴露出去,管理员在网关层给成员分配独立 Key,同时可以限制模型范围、做调用量统计和请求日志。这样即使有人不小心泄露了 Key,吊销和控制范围也更容易。

2.2 不适合谁

如果只是偶尔调一两次 API,直接用官方接口就够了,没必要多套一层网关。如果对延迟极度敏感、需要毫秒级响应,中间多一层转发会带来额外网络开销。如果需要处理私有敏感数据且数据不能出本地,那也不该用云上网关,更应该选择本地部署模型方案。

2.3 合规与安全边界

使用这类项目时,必须遵守各模型服务商的 API 条款,不能把网关用作绕过鉴权、违规转售或批量滥用服务的通道。网关本身是一个技术工具,但部署到公网后如果没有任何鉴权,任何人扫描到你的 workers.dev 域名,都可能直接消耗你的上游 API 额度。这一点后面会在最佳实践里重点强调。

另外,如果网关会记录请求日志,日志内容可能包含用户输入和模型输出。建议启用日志脱敏,不记录完整消息内容,尤其不能记录密钥。涉及个人信息、隐私数据时,要评估云上转发的合规风险。任何公开发布的 API 网关,都应该开启严格鉴权和限流。

3. 部署前置条件与 Cloudflare 账号准备

整个部署不需要高配电脑,也不需要本地 GPU。由于项目是运行在 Cloudflare 边缘节点上的,本地环境只要能跑 Node.js 和 Wrangler CLI 就够了。

3.1 需要准备的东西

前置条件说明
Cloudflare 账号需要注册并完成邮箱验证
Node.js建议使用 18 或更高版本
npmNode.js 自带
Wrangler CLICloudflare 官方命令行工具
Git用于拉取项目仓库
上游模型服务商密钥OpenAI、Anthropic、Gemini 等至少一个 API Key
可选域名如果不使用自定义域名,可以用 workers.dev 免费子域名

检查本地环境可以执行以下命令:

node -v npm -v git --version wrangler --version

如果提示wrangler找不到,先全局安装:

npm install -g wrangler

3.2 Cloudflare Workers 免费额度怎么看

Cloudflare Workers 免费计划包含一定数量的每日请求次数和 CPU 时间,具体数值会随官方政策调整。部署前建议去 Cloudflare 官方文档确认最新免费额度,重点看三个指标:每日请求数上限、单请求 CPU 时间上限、每分钟请求数限制。

另外还要注意,Workers 免费部署在workers.dev子域名上,不需要额外付费。如果后续想绑定自己的域名,才需要拥有一个域名并完成 DNS 配置。如果项目还用到 KV、D1 或 R2 来存储缓存和日志,这些资源各自有独立的免费额度,也需要在后续观察用量时分开看。

4. 一键部署到 Cloudflare Workers

这里以通用 AI 聚合网关项目为例。你可以准备一个自建仓库,也可以使用 GitHub 上现成的模板仓库。下面给出两种常见的部署方式,实际命令需要按你拉取的项目目录和配置调整。

4.1 方式一:Cloudflare Dashboard 模板部署

如果你的项目提供了一键部署按钮,或者配套了 GitHub 模板仓库,可以直接走 Dashboard 部署流程。

操作步骤:

  1. 把模板仓库 Fork 到自己的 GitHub 账号。
  2. 登录 Cloudflare Dashboard。
  3. 进入 Workers & Pages 页面。
  4. 选择 Create Application。
  5. 选择 Pages,并连接你的 GitHub 账号。
  6. 选择 Fork 出来的仓库。
  7. 按项目 README 填写构建命令和输出目录,例如:
npm install npm run build
  1. 点击部署,完成后会得到一个项目名.pages.dev域名。

这种方式适合图形化操作,部署过程中不需要在本地执行命令行。缺点是如果构建脚本有误,需要在 Dashboard 的构建日志里排查。

4.2 方式二:Wrangler 命令行部署

如果你已经在本地拉取了项目,并且项目本身是一个 Worker 应用,更推荐用 Wrangler CLI 部署。

# 拉取项目,注意替换为实际仓库地址 git clone <你的AI聚合网关仓库地址> cd <进入项目目录> # 安装依赖 npm install # 登录 Cloudflare wrangler login # 部署到 Workers wrangler deploy

部署成功后,命令行会输出一个形如https://你的项目.workers.dev的域名。这个域名就是网关入口。

如果项目根目录下存在wrangler.tomlwrangler.jsonc,部署前先检查里面的mainroutevars配置是否与你想要的行为一致。

4.3 配置环境变量与上游厂商密钥

部署完成后,最重要的一步是配置模型服务商密钥。大多数聚合网关项目会通过环境变量获取上游密钥,配置方式有两种。

本地开发时,可以在项目根目录创建.dev.vars文件,Wrangler 默认会加载它:

# .dev.vars 示例,具体变量名按项目 README 调整 OPENAI_API_KEY=sk-你的OpenAI密钥 ANTHROPIC_API_KEY=sk-ant-你的Anthropic密钥 GEMINI_API_KEY=你的Gemini密钥 GATEWAY_ADMIN_KEY=你的网关管理员密钥 DEFAULT_PROVIDER=openai DEFAULT_MODEL=你的默认模型名

注意:.dev.vars不应该提交到 Git 仓库。建议把它加入.gitignore,避免密钥泄露到公开仓库。

云端部署时,用 Wrangler 命令行写入 Secret:

wrangler secret put OPENAI_API_KEY wrangler secret put ANTHROPIC_API_KEY wrangler secret put GATEWAY_ADMIN_KEY

命令执行后会在终端交互式要求输入值。Secret 变量不会直接暴露在 Dashboard 页面上,比明文写在代码里更安全。

部分项目还会通过 JSON 配置或 Dashboard 的 Settings > Variables 页面配置模型路由规则。如果项目带路由配置,常见结构类似这样:

{ "routes": [ { "prefix": "gpt", "provider": "openai", "model": "你的OpenAI模型名" }, { "prefix": "claude", "provider": "anthropic", "model": "你的Anthropic模型名" } ] }

这种路由配置不是所有项目都一样,实际字段名需要以你部署的项目 README 为准。

5. 功能测试与效果验证

部署完成不代表立刻可用,建议按下面顺序逐项测试。

5.1 健康检查

如果项目实现了健康检查接口,先用GET /health确认服务是否正常:

curl -s https://你的项目.workers.dev/health

预期响应是一个 JSON,内容可能包含状态、版本号、运行时间等信息。HTTP 200 表示服务在线。如果响应 404,说明项目没有实现健康检查接口,可以直接跳到下一项。

5.2 模型列表接口

多数 OpenAI 兼容网关会实现/v1/models,用来查询当前可用的模型列表:

curl -s https://你的项目.workers.dev/v1/models \ -H "Authorization: Bearer 你的网关密钥"

如果返回 JSON 里有data数组,数组元素包含id字段,说明模型列表接口正常。

5.3 Chat Completions 调用测试

这是最核心的测试,直接验证网关是否能转发请求到上游模型服务商:

curl -s https://你的项目.workers.dev/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer 你的网关密钥" \ -d '{ "model": "你配置的默认模型名", "messages": [ {"role": "system", "content": "你是一个测试助手"}, {"role": "user", "content": "请用一句话回复:网关转发是否正常"} ] }'

这里model字段要替换成你在环境变量或路由配置里实际使用的模型名,例如某个 OpenAI 模型名。判断成功的标准:

  • HTTP 状态码为 200。
  • 返回 JSON 中包含choices数组。
  • choices[0].message.content有正常文本内容。
  • 返回 JSON 中包含usage字段,记录 token 消耗。

如果 HTTP 401,说明网关鉴权失败,优先检查GATEWAY_ADMIN_KEY或网关子 Key 是否配置正确。如果 HTTP 502 或 504,说明上游模型请求超时或失败,需要查看服务商密钥和上游服务状态。

5.4 OpenAI SDK 接入测试

很多 AI 工具支持自定义接口地址。如果你用的是 Python,可以用 OpenAI SDK 直接指向网关:

from openai import OpenAI client = OpenAI( api_key="你的网关密钥", base_url="https://你的项目.workers.dev/v1" ) resp = client.chat.completions.create( model="你配置的默认模型名", messages=[{"role": "user", "content": "你好,请简单介绍一下你自己"}], temperature=0.7 ) print(resp.choices[0].message.content)

只要这一步跑通,意味着 Cursor、LobeChat、NextChat 等支持自定义 base_url 的工具也可以接入这个网关。

6. 接口 API 与批量任务实践

6.1 网关 API 结构

AI 聚合网关对外主要暴露两类接口:

  • 管理类:创建网关子 Key、查询调用记录、修改路由规则。
  • 转发类:OpenAI 兼容的/v1/chat/completions/v1/embeddings等。

转发类接口通常占日常调用的大部分。管理类接口是否存在、路径如何设计,取决于项目实现,部署后先读 README 确认。

如果你只是做自用,不需要每个成员单独建 Key,用管理员 Key 直接调转发接口即可。如果是团队场景,建议让每个成员使用独立子 Key,方便在异常流量出现时快速定位和吊销。

6.2 Python 并发批量请求

网关本身是一个 HTTP 中间层,没有“本地批量按钮”。批量任务的常见做法是客户端并发调用。下面是一个用aiohttp并发测试网关的示例:

import asyncio import aiohttp GATEWAY_URL = "https://你的项目.workers.dev/v1/chat/completions" GATEWAY_KEY = "你的网关密钥" MODEL_NAME = "你配置的默认模型名" async def call_chat(session, prompt): payload = { "model": MODEL_NAME, "messages": [{"role": "user", "content": prompt}], "temperature": 0.5, } headers = {"Authorization": f"Bearer {GATEWAY_KEY}"} try: async with session.post(GATEWAY_URL, json=payload, headers=headers, timeout=60) as resp: data = await resp.json() return resp.status, data except Exception as exc: return 500, str(exc) async def main(): prompts = [f"第 {i} 个测试问题:你是一个测试网关的助手" for i in range(5)] async with aiohttp.ClientSession() as session: tasks = [call_chat(session, prompt) for prompt in prompts] results = await asyncio.gather(*tasks) for status, data in results: print(status, data if isinstance(data, str) else data.get("choices", [])[0]["message"]["content"][:50]) if __name__ == "__main__": asyncio.run(main())

运行前需要安装依赖:

pip install aiohttp

这是一个通用模板,URL、密钥、模型名都要按实际网关替换。并发数量不要一上来就拉满,建议从 3 到 5 起步,观察网关和上游服务商的响应情况。

6.3 失败重试与降级

批量任务中常见的失败原因是上游限流。当请求量过大时,模型服务商会返回 429 或 5xx。一个简单的带退避重试模板:

import time def call_with_retry(fn, retries=3, base_delay=1): last_exc = None for attempt in range(retries): try: return fn() except Exception as exc: last_exc = exc delay = base_delay * (2 ** attempt) print(f"第 {attempt + 1} 次调用失败:{exc},{delay} 秒后重试") time.sleep(delay) raise last_exc

在业务侧加这个工具函数,比在网关层无限重试更安全。重试逻辑要设置最大次数,避免雪崩。

7. 资源占用与 Cloudflare 免费额度观察

由于是云上部署,不需要关注显存和内存,但需要关注 Cloudflare 免费额度的消耗情况。

7.1 在哪里查看用量

登录 Cloudflare Dashboard,进入 Workers & Pages,找到你的项目,点击 Analytics 或 Metrics,可以看到:

  • 请求次数
  • 错误率
  • CPU 时间消耗
  • 带宽使用
  • KV / D1 / R2 的读写量(如果项目使用)

建议部署后的前三天每天看一眼,确认自己的使用量级,避免突然跑到免费额度上限。

7.2 影响免费额度的因素

影响免费额度消耗的主要因素有三个:

第一,请求次数。每发一次 Chat Completions 调用,网关产生一次请求。日常自用完全够用,但如果把网关接入定时任务、批量脚本,请求量会快速上升。

第二,CPU 时间。Workers 免费计划对每个请求的 CPU 执行时间有限制。网关转发本身很轻量,主要消耗来自上游响应等待和请求体解析。如果上游模型响应很慢,Worker 的 CPU 时间消耗也可能增加。

第三,KV / D1 / R2 读写。如果网关开启了日志存储、缓存功能,每次写入都会消耗对应产品的免费额度。日志量大的时候,KV 写入是容易被忽略的消耗点。

7.3 本地调试与日志

本地开发时,使用 Wrangler 启动本地服务:

wrangler dev

默认监听http://127.0.0.1:8787。本地调试可以直接在浏览器或 curl 里访问,不用每次部署到云端验证。

查看云端实时日志可以用:

wrangler tail

wrangler tail会输出请求日志、错误堆栈和自定义日志,排查线上问题非常有用。如果遇到部署后服务异常,先跑这条命令看实时日志,再决定查环境变量还是路由配置。

8. 常见问题与排查方法

网关部署到 Cloudflare 后,大部分问题集中在部署、鉴权、超时和配额这几个方面。下面是常见排查表:

问题现象可能原因排查方式解决方案
wrangler deploy提示未登录本地没有完成 Cloudflare 认证运行wrangler login用浏览器完成授权后重新部署
部署成功但访问域名总是 404Worker 入口路径或路由配置不对查看wrangler.toml中的mainroutes配置确认入口文件路径正确,访问路径带上/v1/...
调用接口返回 401网关密钥未配置或密钥名不一致检查 Secret 变量是否设置,再检查请求头 Bearer 值重新wrangler secret put对应密钥,确认请求头正确
上游返回 400传输的模型名不存在或请求体格式不对查看网关日志中转发到上游的请求参数改成实际存在的模型名,检查 messages 格式
上游返回 429模型服务商限流查看网关日志和上游服务商控制台降低并发,增加退避重试,必要时升级上游套餐
网关返回 504上游响应过慢,Worker 执行超时wrangler tail查看超时日志在网关层设置上游超时时间,换更快模型
浏览器调用时报 CORS 错误Worker 没有返回跨域响应头检查 Worker 响应是否有Access-Control-Allow-Origin在响应头中加入跨域配置,限制为允许的来源
日志里没有请求记录没有开启日志功能,或没有使用 tail确认部署环境是否配置日志存储使用wrangler tail查看实时日志
每天到某个时间点后请求失败免费额度用尽进入 Dashboard Analytics 查看配额消耗减少调用量、加缓存,或考虑升级付费计划
网关部署后无法访问 workers.dev 域名域名状态异常或 Worker 还没生效等待几秒,检查 Dashboard 项目状态重新部署,必要时换一个项目名

9. 最佳实践与使用建议

9.1 密钥管理是第一位

就算只是自用,也强烈建议在网关上配置管理员密钥。部署到公网后,*.workers.dev域名可能被扫描器访问。如果没有鉴权,对方可以直接通过你的网关调用上游模型,造成费用损失。

正确的做法是:

  • 网关密钥用 Secret 配置,不写进代码仓库。
  • 生产环境不用.dev.vars,只用wrangler secret put
  • 子 Key 只分配必要权限,不用全部用管理员 Key。
  • 发现异常流量时,及时吊销对应 Key。

9.2 日志要脱敏

AI 网关的日志价值很大,但风险也不小。日志如果包含请求体,意味着用户输入和模型输出都会被记录。建议只在调试阶段开启完整请求日志,正常运行时关闭或脱敏。永远不要在上游请求头里打印服务商密钥。

9.3 批量任务控制并发

从自用转而接入批量脚本时,是最容易把配额刷爆的时刻。批量任务建议:

  • 控制并发数,从 1 到 3 开始逐步增加。
  • 增加失败重试和最大等待时间。
  • 记录每次请求的响应状态和 token 消耗。
  • 设置每日请求预算,达到阈值后自动暂停任务。

9.4 合理利用缓存

如果网关支持缓存,相同的请求可以回缓存,不用每次打到上游。对于固定的提示词、常用场景说明,缓存能显著减少请求量和响应时间。缓存策略需要谨慎:结果不稳定的生成任务不建议开缓存,否则用户会拿到重复结果。

9.5 定期观察用量后再决定是否升级

免费额度是这套方案的核心吸引力,但它只适合中低流量场景。部署后建议每周看一次 Analytics,如果请求量长期接近上限,再考虑升级到付费计划。不要一开始就上付费计划,先跑一两周看看实际消耗。

9.6 内容合规与授权

如果网关被用于内容生成,生成结果需要人工复核后再对外发布。涉及人脸、声音、版权素材或敏感数据的场景,要确保有合法授权,并遵守相关法律法规。AI 聚合网关只是技术中间层,使用责任仍然在使用者自身。

10. 总结与下一步

这个项目最值得尝试的地方,是把 AI 聚合网关注册到 Cloudflare 免费额度上,几乎零运维成本地解决多模型管理问题。部署完成后,最先验证三件事:网关鉴权是否生效、模型路由是否正确、超时重试是否有效。最容易踩的坑就是没配密钥就把服务暴露到公网,导致上游额度被扫描流量刷掉。

下一步可以根据实际使用情况继续扩展:接入 KV 缓存降低请求量,配置自定义域名让调用地址更稳定,或者用定时任务跑日志统计,观察每个上游服务商的真实调用成本。如果只是日常自用和团队内部调试,这套 Cloudflare 部署方案已经足够稳定,关键是先把密钥和限流这两道安全防线补上。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询