在Cloudflare上运行内容代理的最低成本方案
您可以在Cloudflare Workers + Claude API上运行完整的内容生成和翻译管道,使用Sonnet 3.5每篇约$0.50,使用Haiku约$0.12。Cloudflare免费套餐每天处理10万次请求——只有在规模需要时才付费。限制是长时间LLM调用的冷启动延迟,这由Queues解决。
每周三。28,400+ 读者。纯干货。
✓ Check your inbox — click the confirmation link to complete sign-up.
✓ You're subscribed!
✓ You're already on the list.
目录
2026年5月更新。
TL;DR: 您可以在Cloudflare Workers + Claude API上运行完整的内容生成和翻译管道,使用Sonnet 3.5每篇约$0.50,使用Haiku约$0.12。Cloudflare免费套餐每天处理10万次请求——只有在规模需要时才付费。限制是长时间LLM调用的冷启动延迟,这由Queues解决。
[运营者视角] 我在alejandrorioja.com上运行的正是这个管道:一个TypeScript Worker写一篇文章,分发12个翻译任务,并将所有内容存储在KV中——所有这些都通过单个HTTP调用触发。以下是确切的成本和配置方式。
为什么选择Cloudflare而非AWS或Vercel
AWS Lambda按GB秒计算费用。Vercel按执行次数收费,并在hobby套餐上有严格的速率限制。两者都在扩展时增加了冷启动的不可预测性。
Cloudflare Workers在V8隔离器上运行,而非容器。冷启动时间在毫秒以下。免费套餐确实实用:每天10万次请求,每次请求10ms CPU时间(实际挂钟时间更长)。付费计划每月$5可处理1000万次请求。
对于AI内容管道,Workers的计算成本几乎为零。真正的成本是Claude API。这是唯一需要优化的变量。
架构(文字图示)
HTTP触发器(cron或webhook)
│
▼
Worker: 编排器
│
├─ 写入任务元数据 → KV(状态:"pending")
│
└─ 将1个EN生成任务加入队列
│
▼
队列: content-jobs
│
┌──────┴──────┐
▼ ▼
Worker: 写作器 Worker: 翻译器(×12语言)
│ │
▼ ▼
Claude API Claude API
│ │
└──────┬─────────────┘
▼
KV: posts/{slug}/{locale}
│
▼
Webhook → GitHub → 部署编排器Worker是入口点。它向KV写入初始状态记录,然后将一个任务推送到Cloudflare队列。队列扇出启动写作器Worker(EN),一旦EN正文准备好,就并行启动12个翻译器Worker。所有内容以{slug}/{locale}为键存入KV。最终的webhook触发GitHub Actions部署。
Cloudflare成本表
| 资源 | 免费套餐 | 付费($5/月) | 我的实际使用量 |
|---|---|---|---|
| Workers请求数 | 10万/天 | 1000万/月 | ~500/天 |
| Workers CPU时间 | 10ms/请求 | 30s/请求 | ~8ms/请求 |
| KV读取次数 | 10万/天 | 1000万/月 | ~2K/天 |
| KV写入次数 | 1K/天 | 100万/月 | ~300/天 |
| 队列消息数 | — | 100万/月(含) | ~300/月 |
| KV存储空间 | 1 GB | 1 GB(含) | ~200 MB |
对于每月发布10篇文章的网站,Cloudflare账单在免费套餐上是**$0**。Workers免费。该使用量下KV读写免费。我使用的唯一付费功能是Queues——需要$5/月的Workers付费计划,但该计划包含100万条队列消息。
我的Cloudflare账单:每月固定$5,文章量在~3000篇/月以内不变。
Claude API成本表
这才是真正花钱的地方。以下是每篇文章的详细分解。
EN生成(一篇文章,约1500字):
| 模型 | 输入Token | 输出Token | 成本 |
|---|---|---|---|
| Claude Haiku 3.5 | ~2,000 | ~2,500 | $0.005 |
| Claude Sonnet 3.5 | ~2,000 | ~2,500 | $0.042 |
12篇翻译(每篇约1500字):
| 模型 | 输入Token(×12) | 输出Token(×12) | 成本 |
|---|---|---|---|
| Claude Haiku 3.5 | ~24,000 | ~30,000 | $0.054 |
| Claude Sonnet 3.5 | ~24,000 | ~30,000 | $0.500 |
每篇文章总计(EN + 12篇翻译):
| 模型 | 总成本 |
|---|---|
| Claude Haiku 3.5 | ~$0.059 |
| Claude Sonnet 3.5 | ~$0.542 |
我用Sonnet生成EN(质量对规范文章至关重要),用Haiku做翻译(源文本已经写好,模型只需忠实翻译)。这种混合方法在实践中每篇文章约**$0.10**。
TypeScript Worker:编排器
// src/workers/orchestrator.ts
import { Queue } from "@cloudflare/workers-types";
interface Env {
CONTENT_QUEUE: Queue;
POSTS_KV: KVNamespace;
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
const { slug, topic } = await request.json<{ slug: string; topic: string }>();
// 写入初始状态
await env.POSTS_KV.put(
`status:${slug}`,
JSON.stringify({ status: "pending", createdAt: Date.now() })
);
// 将EN生成任务加入队列
await env.CONTENT_QUEUE.send({
type: "generate",
slug,
topic,
locale: "en",
});
return Response.json({ queued: true, slug });
},
};TypeScript Worker:写作器 + 翻译器
// src/workers/content-processor.ts
interface Env {
CONTENT_QUEUE: Queue;
POSTS_KV: KVNamespace;
ANTHROPIC_API_KEY: string;
}
const LOCALES = ["ar","de","es","fr","hi","it","ja","ko","nl","pt","ru","zh"];
export default {
async queue(batch: MessageBatch<ContentJob>, env: Env): Promise<void> {
for (const msg of batch.messages) {
const job = msg.body;
if (job.type === "generate") {
const post = await generatePost(job.topic, env.ANTHROPIC_API_KEY);
await env.POSTS_KV.put(`post:${job.slug}:en`, post);
// 分发翻译任务
for (const locale of LOCALES) {
await env.CONTENT_QUEUE.send({
type: "translate",
slug: job.slug,
locale,
sourceText: post,
});
}
}
if (job.type === "translate") {
const translated = await translatePost(
job.sourceText,
job.locale,
env.ANTHROPIC_API_KEY,
// 使用Haiku翻译以降低成本
"claude-haiku-3-5-20241022"
);
await env.POSTS_KV.put(`post:${job.slug}:${job.locale}`, translated);
}
msg.ack();
}
},
};
async function generatePost(topic: string, apiKey: string): Promise<string> {
const res = await fetch("https://api.anthropic.com/v1/messages", {
method: "POST",
headers: {
"x-api-key": apiKey,
"anthropic-version": "2023-06-01",
"content-type": "application/json",
},
body: JSON.stringify({
model: "claude-sonnet-3-5-20241022",
max_tokens: 4096,
messages: [{ role: "user", content: `Write a detailed blog post about: ${topic}` }],
}),
});
const data = await res.json<{ content: Array<{ text: string }> }>();
return data.content[0].text;
}
async function translatePost(
text: string,
locale: string,
apiKey: string,
model: string
): Promise<string> {
const res = await fetch("https://api.anthropic.com/v1/messages", {
method: "POST",
headers: {
"x-api-key": apiKey,
"anthropic-version": "2023-06-01",
"content-type": "application/json",
},
body: JSON.stringify({
model,
max_tokens: 4096,
messages: [
{
role: "user",
content: `Translate the following blog post to ${locale}. Preserve all markdown. Keep code blocks in English.\n\n${text}`,
},
],
}),
});
const data = await res.json<{ content: Array<{ text: string }> }>();
return data.content[0].text;
}替代方案比较
| 平台 | 基础成本 | 每次请求成本 | 冷启动 | TypeScript开发体验 |
|---|---|---|---|---|
| Cloudflare Workers | $0–$5/月 | 近乎零 | 毫秒以下 | 极佳 |
| AWS Lambda | $0(有限) | $0.20/100万请求 | 100ms–1s | 良好 |
| Vercel Functions | $0(有限) | 按使用量 | 200ms–2s | 良好 |
| 自托管VPS | $5–$20/月 | $0 | 无(始终运行) | 任意 |
| Fly.io Machines | $0(有限) | 按GB秒 | ~500ms | 良好 |
自托管是Cloudflare唯一落败的情况。$6/月的Hetzner VPS全天候运行Node,无冷启动,无每次请求费用。但你需要自己管理部署、正常运行时间和扩展。在我的使用量下,Workers免费处理了这一切。
AWS Lambda的对比在纸面上看起来有竞争力,但Lambda的15分钟最大执行时间是长LLM链的真实限制。Workers在付费计划上有30秒的CPU限制——这听起来更差,但没问题,因为你使用Queues进行异步工作,而不是阻塞单个Lambda。
KV用于状态管理
KV是Cloudflare的全球分布式键值存储。读取在任何地方都很快(边缘缓存)。写入在60秒内全球传播。
对于内容管道,我使用三种键模式:
// 任务状态
await kv.put(`status:${slug}`, JSON.stringify({ status, updatedAt: Date.now() }));
// 文章内容
await kv.put(`post:${slug}:${locale}`, markdownContent);
// 用于列表的索引
const index = await kv.get<string[]>("index:posts", "json") ?? [];
await kv.put("index:posts", JSON.stringify([...index, slug]));我的规模下KV成本:$0。免费套餐每天提供1K次写入和10万次读取。我每月写入约300条KV记录(25篇文章 × 13种语言 = 325)。远未达到限制。
如果你每月发布100+篇文章,覆盖12种语言,你每月的写入量约为3.9万次——仍低于$5付费计划中包含的每月100万次。
运营者的最终结论
我的完整内容管道——生成、翻译、存储、部署——基础设施每月花费$5.10($5 Cloudflare Workers付费 + 每篇文章$0.10 Claude API,按每月10篇计算)。就这些。无需管理服务器,无需容器编排,不会因Lambda冷启动达到预配置并发阈值而产生意外账单。
混合模型策略(EN用Sonnet,翻译用Haiku)将Claude成本降低80%,同时翻译质量没有明显下降。根据你的使用量计算一下,你会发现Cloudflare + Claude Haiku确实是以创始人规模运行此类管道的最低成本方式。
每周三。28,400+ 读者。纯干货。
✓ Check your inbox — click the confirmation link to complete sign-up.
✓ You're subscribed!
✓ You're already on the list.
将AI实战手册发送到您的邮箱
每周三。28,400+ 读者。纯干货。
Check your inbox.
We sent you a confirmation email — click the link inside to complete your subscription. Check spam if you don't see it within a minute.
You're subscribed.
Welcome — the next edition lands in your inbox soon.
You're already on the list — look for it every Wednesday.