写这篇东西是因为最近在几个开发者群里看到同一个问题反复出现:调用OpenAI API经常超时,特别是用国内服务器部署的时候。有人买了各种代理服务,有人自建了Nginx反向代理,但其实Cloudflare Workers就能解决,而且几乎零成本。
## 为什么需要AI API代理
先说说痛点。假设你用某个云厂商的国内服务器跑AI应用,直接请求 `api.openai.com`,延迟高不说,还经常连接不稳定。这个问题不是简单的”换个服务器”能解决的——就算你用海外服务器,很多小厂的网络路由也不够优化。
Cloudflare Workers 在这件事上有天然优势:
– 全球 330+ 城市节点,自带 CDN 加速
– Free 计划每天 10 万次请求,对个人项目绰绰有余
– Workers 本身是个边缘计算平台,不只是做反向代理
根据 Cloudflare 官方定价文档(2026年7月更新),Paid 计划最低 $5/月,包含远超个人项目所需的配额。但 Free 计划每天 10 万次请求对多数独立开发者来说已经够用了。
## 完整代码模板
这个模板做了三件事:
1. 转发 API 请求到 OpenAI/Anthropic/任意 AI 服务
2. 支持自定义域名和路径
3. 集成 AI Gateway 做缓存和监控
“`javascript
// wrangler.toml
name = “ai-api-proxy”
main = “src/index.js”
compatibility_date = “2026-07-01”
[env.production]
vars = { AI_GATEWAY_ENABLED = “true” }
“`
“`javascript
// src/index.js
const API_TARGETS = {
openai: {
base: ‘https://api.openai.com’,
routes: [‘/v1/chat/completions’, ‘/v1/embeddings’, ‘/v1/models’]
},
anthropic: {
base: ‘https://api.anthropic.com’,
routes: [‘/v1/messages’]
}
}
export default {
async fetch(request, env) {
const url = new URL(request.url)
const path = url.pathname
// 自动路由到对应的 API 提供商
for (const [name, config] of Object.entries(API_TARGETS)) {
if (config.routes.some(route => path.startsWith(route))) {
const targetUrl = config.base + path + url.search
const headers = new Headers(request.headers)
// 移除 Cloudflare 特有的 header
headers.delete(‘cf-connecting-ip’)
headers.delete(‘x-forwarded-for’)
let response = await fetch(targetUrl, {
method: request.method,
headers: headers,
body: request.body
})
// 可选:集成 AI Gateway
if (env.AI_GATEWAY_ENABLED === ‘true’) {
response = new Response(response.body, response)
response.headers.set(‘x-ai-proxy’, name)
response.headers.set(‘x-cache-status’, response.headers.get(‘cf-cache-status’) || ‘MISS’)
}
return response
}
}
return new Response(‘Not Found – 支持的路径: /v1/chat/completions, /v1/embeddings, /v1/messages’, { status: 404 })
}
}
“`
部署命令只有一行:
“`bash
npm create cloudflare@latest ai-api-proxy
cd ai-api-proxy
# 把上面的 index.js 替换进去
npx wrangler deploy
“`
## 接入 AI Gateway
Cloudflare AI Gateway 可以给你的代理加上缓存、限流和监控。配置方式:
在 Cloudflare Dashboard 创建一个 AI Gateway,拿到 gateway_id,然后在 Workers 环境变量里配一下:
“`bash
npx wrangler secret put AI_GATEWAY_ID
npx wrangler secret put AI_GATEWAY_TOKEN
“`
然后在代码里加一行转发逻辑:
“`javascript
const gatewayUrl = `https://gateway.ai.cloudflare.com/v1/${AI_GATEWAY_ID}/${AI_GATEWAY_TOKEN}/openai`
// 把 API 请求转发到 gateway 地址即可
“`
根据 Cloudflare 官方文档,AI Gateway 支持 OpenAI、Anthropic、Google 等多个模型提供商,一行代码即可接入。缓存功能可以复用相似的请求结果,对重复查询场景能显著降低成本。
## 使用方式
部署完成后,把客户端的 base_url 改成你的 Worker 地址:
“`python
# OpenAI Python SDK 接入示例
from openai import OpenAI
client = OpenAI(
api_key=”你的 OpenAI Key”,
base_url=”https://你的worker域名.workers.dev”
)
# 直接用,跟官方 SDK 完全兼容
response = client.chat.completions.create(
model=”gpt-4o”,
messages=[{“role”: “user”, “content”: “Hello”}]
)
“`
支持所有 OpenAI SDK 兼容的客户端,包括 Node.js、Python、curl 等。
## 几个实际用的建议
**关于自定义域名**。默认的 `*.workers.dev` 域名在某些网络环境可能被限速,建议绑个自己的域名。在 Workers 后台的 Triggers 标签页配一下就行,前提是你的域名 DNS 在 Cloudflare 托管。
**关于成本**。Free 计划每天 10 万请求、1000 次 KV 操作。个人项目一个月几万请求很正常,完全在免费额度内。超过的话升级到 Paid 计划 $5/月,包含 1000 万次请求。
**关于安全**。不建议在 Worker 里硬编码 API Key。用 `wrangler secret` 把密钥存成环境变量,或者配合 Cloudflare Access 做身份认证。
## 踩坑记录
几个我遇到过的问题:
1. **CORS 错误**:如果是从前端调用,记得加 CORS header。上面代码里没加,需要的话自己补上 `Access-Control-Allow-Origin: *`。
2. **请求体大小限制**:Free 计划请求体最大 100MB,传大文件(比如图片分析)要注意。
3. **CPU 时间限制**:Free 计划每次调用 10ms CPU 时间,纯转发足够,但如果要做复杂处理可能超时。
## 可以怎么扩展
这个模板是最小可用的版本,你可以按需加功能:
– 多 API Key 轮转(多个 key 自动切换,避免限速)
– 请求日志(写到 Workers KV 或 R2)
– 用量统计(配合 AI Gateway 的 analytics 功能)
– 模型路由(根据请求内容自动选择 GPT-4o 还是 Claude)
整套代码都在上面了,复制粘贴就能用。不需要自己搭服务器,不需要买代理,一个 Worker 搞定。
—
*参考:Cloudflare Workers Pricing(2026年7月更新)、Cloudflare AI Gateway 官方文档*
