这次我们来看一个很省钱的玩法在 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 wrangler3.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 部署流程。操作步骤把模板仓库 Fork 到自己的 GitHub 账号。登录 Cloudflare Dashboard。进入 Workers Pages 页面。选择 Create Application。选择 Pages并连接你的 GitHub 账号。选择 Fork 出来的仓库。按项目 README 填写构建命令和输出目录例如npm install npm run build点击部署完成后会得到一个项目名.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.toml或wrangler.jsonc部署前先检查里面的main、route、vars配置是否与你想要的行为一致。4.3 配置环境变量与上游厂商密钥部署完成后最重要的一步是配置模型服务商密钥。大多数聚合网关项目会通过环境变量获取上游密钥配置方式有两种。本地开发时可以在项目根目录创建.dev.vars文件Wrangler 默认会加载它# .dev.vars 示例具体变量名按项目 README 调整 OPENAI_API_KEYsk-你的OpenAI密钥 ANTHROPIC_API_KEYsk-ant-你的Anthropic密钥 GEMINI_API_KEY你的Gemini密钥 GATEWAY_ADMIN_KEY你的网关管理员密钥 DEFAULT_PROVIDERopenai DEFAULT_MODEL你的默认模型名注意.dev.vars不应该提交到 Git 仓库。建议把它加入.gitignore避免密钥泄露到公开仓库。云端部署时用 Wrangler 命令行写入 Secretwrangler 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_urlhttps://你的项目.workers.dev/v1 ) resp client.chat.completions.create( model你配置的默认模型名, messages[{role: user, content: 你好请简单介绍一下你自己}], temperature0.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: fBearer {GATEWAY_KEY}} try: async with session.post(GATEWAY_URL, jsonpayload, headersheaders, timeout60) 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, retries3, base_delay1): 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 tailwrangler tail会输出请求日志、错误堆栈和自定义日志排查线上问题非常有用。如果遇到部署后服务异常先跑这条命令看实时日志再决定查环境变量还是路由配置。8. 常见问题与排查方法网关部署到 Cloudflare 后大部分问题集中在部署、鉴权、超时和配额这几个方面。下面是常见排查表问题现象可能原因排查方式解决方案wrangler deploy提示未登录本地没有完成 Cloudflare 认证运行wrangler login用浏览器完成授权后重新部署部署成功但访问域名总是 404Worker 入口路径或路由配置不对查看wrangler.toml中的main和routes配置确认入口文件路径正确访问路径带上/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 部署方案已经足够稳定关键是先把密钥和限流这两道安全防线补上。