Alejandro Rioja.
AI Agents Growth

在Cloudflare上运行内容代理的最低成本方案

Alejandro Rioja
Alejandro Rioja
3 分钟阅读
TL;DR

您可以在Cloudflare Workers + Claude API上运行完整的内容生成和翻译管道,使用Sonnet 3.5每篇约$0.50,使用Haiku约$0.12。Cloudflare免费套餐每天处理10万次请求——只有在规模需要时才付费。限制是长时间LLM调用的冷启动延迟,这由Queues解决。

免费新闻通讯

每周三。28,400+ 读者。纯干货。

目录

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。这是唯一需要优化的变量。

架构(文字图示)

code
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 GB1 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:编排器

typescript
// 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:写作器 + 翻译器

typescript
// 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秒内全球传播。

对于内容管道,我使用三种键模式:

typescript
// 任务状态
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确实是以创始人规模运行此类管道的最低成本方式。

继续阅读

将AI实战手册发送到您的邮箱

每周三。28,400+ 读者。纯干货。

↵ 查看全部结果 esc esc 关闭