← 返回学习中心 · Agent 工程OiOi Academy
AI工具盘点 · 11

我用 Cloudflare 免费搭了一套 AI 内容流水线

@xiangxiang103 的实战:零服务器成本,用 Cloudflare 五件套搭"AI 科技周刊自动生成器"——定时抓取、AI 摘要、存库、发布,全自动。

原作者 @xiangxiang103 来源 X 发布 2026-05-01
🧭

开篇:缺的不是内容,是自动化的工作流

每天刷那么多信息,有用的记不住、存不下、找不到:好文章丢进收藏夹吃灰;想做行业周刊,每周手动复制粘贴、翻译转录、再排版,没干两周就放弃了。

作者 @xiangxiang103 的判断:信息过载时代,个人创作者最大的痛点不是"缺内容",而是"缺自动化的工作流"。

能不能一个人、不买云服务器、不掏月租,靠白嫖大厂免费套餐,搭一个"自动化内容工作台"?完全可以。这篇就用 Cloudflare 现成的五件套,搭一个 "AI 科技周刊自动生成器":每天自动抓你想看的信息源,让 AI 先做一轮中文摘要和分类,分好类存进数据库,最后自动发布成公开网页。

记住:这套体系不光能做周刊,还可以改造成个人的第二大脑信息流,或者垂直领域的聚合站。
原文配图:@xiangxiang103 原帖题图
原文配图:@xiangxiang103 原帖题图
🏗️

架构一览:五件套都在干嘛

只要你有一个 Cloudflare 账号,就相当于拥有了一个全栈的云端机房。这条流水线用到它家 5 个核心服务:

① Workers + Cron:打工人 + 定时闹钟,每天定时去 Hacker News、RSS 源抓文章。

② Workers AI:外包脑力,直接用 Llama 等开源大模型,先根据标题、链接或正文片段做中文摘要、推荐理由和标签。

③ R2:大仓库,存抓下来的文章封面图、或原始的超大 JSON 数据(免流量费)。

④ D1:账本,一个好用的数据库,存整理好的文章标题、链接、摘要内容。

⑤ Pages:门面,把 D1 里的数据渲染出来,做成别人能访问的静态网站。

高中生类比
五件套像一家"迷你报社":Workers+Cron 是外派记者(每天出去采访),Workers AI 是编辑(翻译整理稿件),R2 是资料室(存照片底稿),D1 是档案柜(存成稿),Pages 是印刷厂兼发行(变成报纸发出去)。
原文配图:五件套架构图
原文配图:五件套架构图

不用担心开销:个人项目跑这套流程,Cloudflare 给的免费额度通常够用(文末有成本测算)。

⏰

Step 1:用 Workers + Cron 定时抓取信息

第一步,需要一个"打工人"每天定点收集素材。在本地建好项目后,一切配置都在 wrangler.toml 里搞定,用 [triggers] 让 Worker 每天早上 8 点自动干活:

# wrangler.toml
name = "ai-content-pipeline"
main = "src/index.js"
compatibility_date = "2026-04-30"

[triggers]
crons = ["0 0 * * *"]

对应的代码逻辑写在 src/index.js 里(以 Hacker News 为例,取前 5 篇):

export default {
  // 这是 Cron 定时触发的入口
  async scheduled(event, env, ctx) {
    // 1. 去源头抓数据 (这里拿 Hacker News 举例)
    const hnResponse = await fetch("https://hacker-news.firebaseio.com/v0/topstories.json");
    const storyIds = await hnResponse.json();

    // 取前 5 篇
    const top5Ids = storyIds.slice(0, 5);
    let articles = [];

    for (let id of top5Ids) {
      const itemRes = await fetch("https://hacker-news.firebaseio.com/v0/item/" + id + ".json");
      const item = await itemRes.json();
      articles.push(item);
    }

    // 把文章传给下一步处理 (见下文)
    await processArticles(articles, env);
  }
};

这就完事了。一分钱不用花,你拥有了一个绝对不会睡过头的爬虫。

原文配图:Cloudflare 后台 - Worker 定时触发
原文配图:Cloudflare 后台 - Worker 定时触发
原文配图:手动触发流水线结果
原文配图:手动触发流水线结果
🧠

Step 2:用 Workers AI 做摘要、翻译、分类

文章信息抓回来了,但直接看英文标题和链接仍然很费时间。这时候让 AI 上场,先做一轮可读的中文整理。在 wrangler.toml 里加上 AI 的绑定:

[ai]
binding = "AI"

Cloudflare 在边缘节点上部署了各种开源大模型(比如 Llama 3 系列),可以直接调,不需要你再去 OpenAI 注册账号充 API。加上 processArticles 函数:

async function processArticles(articles, env) {
  for (let article of articles) {
    if (!article.url) continue;

    const prompt =
      "请将以下新闻标题和链接整理成严格 JSON,不要输出 Markdown。\n" +
      "字段包括:\n" +
      "- title_zh:中文标题\n" +
      "- summary_zh:2-3 句话中文摘要,只根据标题和链接做保守判断\n" +
      "- why_it_matters:1-2 句话说明它为什么值得创作者或开发者关注\n" +
      "- tags:2-3 个分类标签数组\n\n" +
      "原文标题:" + article.title + "\n" +
      "原文链接:" + article.url;

    // 调免费的 Llama 3 8B 模型干活
    const aiResponse = await env.AI.run("@cf/meta/llama-3.1-8b-instruct-fast", {
      messages: [{ role: "user", content: prompt }]
    });

    const aiResult = aiResponse.response;
    console.log("AI 处理结果:", aiResult);

    // 接下来把它存起来
    await saveToDatabase(article, aiResult, env);
  }
}

这里先用最基本的 prompt 演示标题和链接级别的整理。如果要做深度处理,还可以让 Worker 去 fetch 原文页面的 HTML,提取正文后再喂给 AI 做深度总结。

高中生类比
Workers AI 像请了个"免费实习生":你把一堆英文剪报丢给他,他按你的格式要求(JSON 模板)交回中文摘要——不用给他发工资(免 OpenAI 充值),也不用给他配电脑(跑在 Cloudflare 边缘节点上)。
🗄️

Step 3:用 R2 存图片和原始资料

结构化数据存数据库,那些大块头的杂物(抓下来的文章配图、很长的原始 JSON)存哪里?放 D1 太浪费,放 R2 刚好。R2 是 Cloudflare 的对象存储,适合放原始 JSON、图片和网页快照这类大文件,重要优势是没有传统云存储常见的出站流量费用。

加配置,在本地创建一个叫 content-store 的 R2 bucket 并绑定:

npx wrangler r2 bucket create content-store
[[r2_buckets]]
binding = "BUCKET"
bucket_name = "content-store"

在代码里把原始抓取的数据存个档,留着以后分析:

async function saveToStorage(article, env) {
  const fileKey = "raw/" + article.id + ".json";

  // 直接丢进 R2
  await env.BUCKET.put(fileKey, JSON.stringify(article));
  return fileKey;
}

以后如果前端要配图,直接把图抓下来 env.BUCKET.put() 进去。注意:R2 里的文件默认不是公开的,想让网页直接访问图片,还要给 bucket 开启公开访问、绑定自定义域名,或者由 Worker 生成临时访问链接。

原文配图:R2 原始 JSON 数据
原文配图:R2 原始 JSON 数据
📒

Step 4:用 D1 存文章、链接、标签

AI 整理好的精炼内容,存在 D1 数据库里。D1 其实就是一个 Serverless 的 SQLite,极其轻量且不用管运维。

先建表,写一个 schema.sql:

DROP TABLE IF EXISTS articles;
CREATE TABLE articles (
  id INTEGER PRIMARY KEY,
  title TEXT,
  url TEXT,
  summary_zh TEXT,
  why_it_matters TEXT,
  tags TEXT,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

执行命令创建数据库和表结构:

npx wrangler d1 create content-db
npx wrangler d1 execute content-db --local --file=schema.sql
npx wrangler d1 execute content-db --remote --file=schema.sql

更新 wrangler.toml:

[[d1_databases]]
binding = "DB"
database_name = "content-db"
database_id = "终端里吐出来的那个ID"

回到 Worker 代码,把 AI 处理完的数据塞进去:

async function saveToDatabase(article, aiResult, env) {
  // 假设我们解析了 AI 的结果
  const zhTitle = "AI 生成的中文标题";
  const summary = "2-3 句话中文摘要";
  const whyItMatters = "这条内容为什么值得看";
  const tags = "AI, 自动化, 资讯";

  // 用标准的 SQL 写入 D1
  await env.DB.prepare(
    "INSERT INTO articles (id, title, url, summary_zh, why_it_matters, tags) " +
    "VALUES (?, ?, ?, ?, ?, ?) " +
    "ON CONFLICT(id) DO NOTHING"
  ).bind(article.id, zhTitle, article.url, summary, whyItMatters, tags).run();
}

至此,一个最小版的后台自动抓取流水线已经能跑通了。上面的代码为了讲清流程做了简化:AI 返回结果还需要按中文标题、多段摘要、推荐理由、标签拆开,R2 存档函数也要接进主流程。补齐后,只等每天早上 8 点,内容就会源源不断自动流进数据库。

原文配图:Cloudflare 后台 - D1 数据表
原文配图:Cloudflare 后台 - D1 数据表
原文配图:D1 数据接口返回
原文配图:D1 数据接口返回
🌐

Step 5:用 Pages 展示成公开网站

光有数据库不行,得让人能看到。最后一步,用 Cloudflare Pages 搭一个极简的前端展示页。Pages 自带了 Functions 功能(基于 Workers),所以连后端 API 都不用单独部署,直接在 Pages 项目里建一个 functions/api/articles.js。

避坑
注意:这类接口请求会按 Workers 的规则计入用量,不能简单理解成"Pages 页面访问无限,所以接口也无限"。
// 当访问 /api/articles 时触发
// 文件:functions/api/articles.js
export async function onRequest(context) {
  // 从绑定的 D1 里查数据
  const { results } = await context.env.DB.prepare(
    "SELECT * FROM articles ORDER BY created_at DESC LIMIT 20"
  ).all();

  return Response.json(results);
}

然后在同目录下写一个普通的 index.html,用基础 JS 调这个接口渲染:

<!DOCTYPE html>
<html>
<head>
  <title>我的 AI 科技周刊</title>
</head>
<body>
  <h1>每日 AI 科技精选</h1>
  <div id="content"></div>

  <script>
    fetch("/api/articles")
      .then(res => res.json())
      .then(data => {
        const html = data.map(a =>
          "<div>" +
          "<h3><a href=\"" + a.url + "\">" + a.title + "</a></h3>" +
          "<p>摘要:" + a.summary_zh + "</p>" +
          "<p>为什么值得看:" + a.why_it_matters + "</p>" +
          "<p>标签:" + a.tags + "</p>" +
          "</div>"
        ).join("");
        document.getElementById("content").innerHTML = html;
      });
  </script>
</body>
</html>

在 Dashboard 里新建一个 Pages 项目,把这俩文件扔上去(或用命令行一键部署),连上 D1 binding,个人内容订阅站就正式上线了。

高中生类比
Pages 像"免费的临街橱窗":D1 档案柜里的精选内容,摆进展柜(网页),路人(读者)随时能看——而你不用付房租(服务器钱)。
原文配图:最终展示页
原文配图:最终展示页
💰

成本测算与防坑进阶

很多人一听到"全家桶",第一反应是"这跑起来不得破产?"作者算了笔账:假设每天自动抓取 50 篇文章做 AI 翻译和总结,前端页面每天 1000 次访问。

原文配图:免费额度成本测算
原文配图:免费额度成本测算

结论:只要不拿它做商业级别的大型爬虫,对个人或小团队的内容流自动化,Cloudflare 的免费套餐通常已经足够起步。真正上线前,还是建议按自己的抓取频率、AI 输出长度和访问量重新算一遍。

几个防踩坑与进阶玩法:

1. Cron 触发的超时问题:免费版 Workers 有 CPU 运行时间限制。一次性抓 100 篇文章喂给 AI 很可能超时——建议用多个短频快的定时任务(比如每 2 小时抓 5 篇),或用 Queue 把抓取和 AI 分析拆成异步。

2. AI 的神经元(Neurons)计算:Workers AI 的免费额度按 Neurons 算。尽量选 @cf/meta/llama-3.1-8b-instruct-fast 这样的小且快模型,便宜好用。

3. 加点"料":Vectorize 语义搜索。想在页面上加"按意思搜文章"的功能,把 AI 生成的文本再过一遍 Embedding 模型,存进 Cloudflare Vectorize 库里,瞬间变成高阶版的 RAG。

4. 邮件推送:想做邮件版周刊,可以再接邮件发送服务或 Cloudflare 的邮件相关能力。注意:收信转发、处理来信和主动发信不是一回事,具体实现前先确认当前账号可用的发送方式。

记住:从抓取、清洗、AI 提炼、存储到发布,不到两百行代码、零服务器成本,就在云端拼起了一个完整的"编辑部"。这就是 Serverless + AI 的生产力:重复的信息筛选工作,交给机器在你看不到的边缘节点上默默完成。
词

术语翻卡:点卡片看解释

Workers
Workers
Cloudflare 的 Serverless 计算:写 JS 跑在边缘节点上,不用自己管服务器。
Cron 触发器
Cron Triggers
定时闹钟:wrangler.toml 里 crons = ["0 0 * * *"] 让 Worker 每天早上 8 点干活。
Workers AI
Workers AI
Cloudflare 边缘节点上的开源大模型(如 Llama 3),直接调,不用另充 API。
R2
R2
Cloudflare 的对象存储:放图片、超大 JSON;重要优势是免出站流量费。
D1
D1
Serverless 的 SQLite 数据库:存整理好的标题、链接、摘要;轻量免运维。
Pages
Pages
Cloudflare 的静态网站托管:把 D1 数据渲染成公开网页;自带 Functions。
Wrangler
Wrangler
Cloudflare 的命令行工具:建 bucket、建数据库、部署都靠它。
Vectorize
Vectorize
Cloudflare 的向量库:加个"按意思搜文章"功能,变高阶版 RAG。
测

自测一下:点问题展开参考答案

Workers + Cron 是打工人+定时闹钟(每天抓文章);Workers AI 是外包脑力(Llama 做中文摘要分类);R2 是大仓库(存图片和超大 JSON,免流量费);D1 是账本(Serverless SQLite 存整理好的内容);Pages 是门面(渲染成公开网站)。

加 [triggers] 配置:crons = ["0 0 * * *"]。一切配置都在 wrangler.toml 里搞定,代码入口是 src/index.js 的 scheduled 函数。

因为对象存储默认私有。要公开访问需要给 bucket 开启公开访问、绑定自定义域名,或者由 Worker 生成临时访问链接。

假设每天抓 50 篇文章做 AI 总结、前端每天 1000 次访问。结论:个人或小团队的内容流自动化,免费套餐通常够起步;但上线前要按自己的抓取频率、AI 输出长度和访问量重算。

免费版 Workers 有 CPU 运行时间限制,一次抓 100 篇喂 AI 很可能超时。解法:多个短频快的定时任务(如每 2 小时抓 5 篇),或用 Queue 把抓取和 AI 分析拆成异步。