• 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 吐槽,投稿,删稿,交个朋友
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧

Cloudflare Workers + AI 可复用 Starter Kit:从零部署一个带数据库的 AI API 网关

可复用技术资产 admin 10小时前 8次浏览 已收录 扫描二维码

每次有人问我”怎么快速部署一个 AI 功能”,我的第一反应都是:**别急着买服务器**。

如果你只是在做 MVP 或者个人工具,Cloudflare Workers 几乎是最优解。免费额度够用,冷启动几乎为零,全球 300+ 节点自动分发。关键是你不需要管服务器、不需要配 Nginx、不用担心 DDoS。

我整理了一个可直接复用的 Starter Kit,包含了搭建 AI API 网关最常用的几个组件:请求路由、多模型代理、速率限制、用量追踪。全部跑在 Cloudflare Workers + D1 + KV 上。

## 这套模板解决了什么

你手头可能有个想法:做一个 AI 翻译工具、一个内容改写助手、或者一个 AI 客服前端。这些产品 80% 的架构需求是一样的:

– 用户发请求过来
– 转发到某个 AI 模型(OpenAI / Claude / DeepSeek 等)
– 记录调用次数
– 限制滥用
– 返回结果

这套模板让你不用每次都从零写这些基础设施代码。

## 项目结构

“`
ai-api-gateway/
├── wrangler.toml # Worker 配置
├── src/
│ ├── index.ts # 入口路由
│ ├── proxy.ts # AI API 代理
│ ├── rate-limit.ts # 速率限制
│ ├── usage.ts # 用量记录 (D1)
│ ├── cache.ts # 响应缓存 (KV)
│ └── types.ts # 类型定义
├── migrations/
│ └── 001_create_usage.sql
├── package.json
└── tsconfig.json
“`

## wrangler.toml

“`toml
name = “ai-api-gateway”
main = “src/index.ts”
compatibility_date = “2026-07-01”

[[d1_databases]]
binding = “DB”
database_name = “ai-usage-db”
database_id = “your-db-id”

[[kv_namespaces]]
binding = “CACHE”
id = “your-kv-id”

[ai]
binding = “AI”
“`

创建 D1 数据库和 KV Namespace 后,把对应的 ID 填进去。

## 核心代码

### 1. 入口路由 (src/index.ts)

“`typescript
export default {
async fetch(request: Request, env: Env): Promise {
const url = new URL(request.url)
const path = url.pathname

if (path === ‘/v1/chat/completions’) {
return handleChatCompletion(request, env)
}

if (path === ‘/api/usage’) {
return handleUsageQuery(request, env)
}

return new Response(‘Not Found’, { status: 404 })
}
}
“`

路由按路径分发。你可以按需加更多路由,比如 `/v1/embeddings`、`/v1/images/generations`。

### 2. AI API 代理 (src/proxy.ts)

“`typescript
const PROVIDERS = {
openai: {
baseUrl: ‘https://api.openai.com/v1’,
envKey: ‘OPENAI_API_KEY’
},
deepseek: {
baseUrl: ‘https://api.deepseek.com/v1’,
envKey: ‘DEEPSEEK_API_KEY’
},
claude: {
baseUrl: ‘https://api.anthropic.com/v1’,
envKey: ‘ANTHROPIC_API_KEY’
}
}

export async function proxyToProvider(
provider: string,
body: any,
env: Env
): Promise {
const config = PROVIDERS[provider as keyof typeof PROVIDERS]
if (!config) {
return new Response(`Unsupported provider: ${provider}`, { status: 400 })
}

const apiKey = env[config.envKey]
if (!apiKey) {
return new Response(`${provider} API key not configured`, { status: 500 })
}

const response = await fetch(`${config.baseUrl}/chat/completions`, {
method: ‘POST’,
headers: {
‘Content-Type’: ‘application/json’,
‘Authorization’: `Bearer ${apiKey}`
},
body: JSON.stringify(body)
})

return response
}
“`

这个设计让你可以配置多个 AI 供应商,客户端传 `provider` 参数就能切换模型。做 A/B 测试或者成本优化时特别好用。

### 3. 速率限制 (src/rate-limit.ts)

“`typescript
export async function checkRateLimit(
userId: string,
env: Env
): Promise<{ allowed: boolean; remaining: number }> {
const key = `ratelimit:${userId}`
const windowMs = 60_000 // 1 分钟窗口
const maxRequests = 60

const current = await env.CACHE.get(key)
if (current) {
const count = parseInt(current)
if (count >= maxRequests) {
return { allowed: false, remaining: 0 }
}
await env.CACHE.put(key, String(count + 1), {
expirationTtl: Math.ceil(windowMs / 1000)
})
return { allowed: true, remaining: maxRequests – count – 1 }
}

await env.CACHE.put(key, ‘1’, {
expirationTtl: Math.ceil(windowMs / 1000)
})
return { allowed: true, remaining: maxRequests – 1 }
}
“`

KV 的 TTL 特性天然适合做速率限制窗口,不需要额外引入 Redis。每用户每分钟 60 次的限制对大部分 MVP 够用了,数字你可以自己调。

### 4. 用量追踪 D1 Schema (migrations/001_create_usage.sql)

“`sql
CREATE TABLE usage_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id TEXT NOT NULL,
provider TEXT NOT NULL,
model TEXT NOT NULL,
prompt_tokens INTEGER NOT NULL,
completion_tokens INTEGER NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE INDEX idx_user_id ON usage_logs(user_id);
CREATE INDEX idx_created_at ON usage_logs(created_at);
“`

记录每次请求的 token 消耗,方便后续给用户出账单或者看成本趋势。

## 部署步骤

“`bash
# 1. 安装依赖
npm install

# 2. 创建 D1 数据库
npx wrangler d1 create ai-usage-db

# 3. 创建 KV Namespace
npx wrangler kv:namespace create “CACHE”

# 4. 运行数据库迁移
npx wrangler d1 migrations apply ai-usage-db

# 5. 设置 API Keys
npx wrangler secret put OPENAI_API_KEY
npx wrangler secret put DEEPSEEK_API_KEY

# 6. 部署
npx wrangler deploy
“`

以上 6 步跑完,你就有了一个带速率限制和用量追踪的 AI API 网关。

## 成本分析

Cloudflare Workers 免费计划每天 10 万次请求,对 MVP 阶段完全够用。D1 数据库免费额度 5GB 存储、每月 500 万次读取。KV 免费 100 万次读/天。

超出后 Workers $0.30/百万次请求,D1 读取 $0.80/百万次。相比自己租一台云服务器(最便宜 $5/月起步),这套架构在初期几乎零成本。

根据 Cloudflare 2026 年 4 月发布的开发者报告,Workers 平台日均处理超过 100 亿次请求,生产稳定性已经过大规模验证。

**完整的 Starter Kit 代码在 GitHub 上可以找到参考实现,你也可以按上面的代码片段拼出自己的版本。核心思路就四个字:路由 + 代理 + 限制 + 记录。先把这四层搭好,再加业务逻辑就快了。**

你有什么项目想用 Workers 做?可以直接用这个模板跑起来,10 分钟就能有一个可测试的原型。

喜欢 (0)
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。