0 元接入 Cloudflare Workers AI
给网站接上数据库之后,它终于有了「记忆」——留言不会丢,数据重启也还在。
但说真的,这个网站还是有点「笨」:能存数据、能返回数据,所有行为都是提前写死的。有人留言就存起来,有人访问就返回页面。它不会判断留言是不是垃圾广告,不会给文章自动生成摘要,更不会理解用户到底在问什么。
后端让它学会了做事,数据库让它学会了记忆,但它还不会「思考」。
所以这一次,我给网站接上了 AI。
不接 OpenAI,接 Workers AI
说到给网站加 AI,多数人第一反应是:申请个 OpenAI API Key,然后调接口。这条路我也走过,问题不在能不能用,而在两件事:
- 钱。OpenAI 按 token 计费,个人网站一旦被人恶意刷接口,一觉醒来账单可能不太好看。虽然能设额度上限,但心理压力一直在。
- 延迟。OpenAI 服务器在国外,国内访问本就不快,再经一层转发,响应时间经常让人焦虑。
所以我选了另一条路:Cloudflare Workers AI。
简单说,Cloudflare 在自己的全球网络上部署了几十个开源 AI 模型,你可以像调用一个函数一样调用它们——不用自己买 GPU,不用管模型部署,不用操心扩容。前面把 Workers 比作网站的「办事员」,Workers AI 就相当于给这个办事员配了个「智能助手」:它就在办事员隔壁办公,随叫随到,不用打长途电话去问远方的 AI 公司。
怎么接?比你想的简单
如果你已经把 Workers 和 D1 都接好了,接入 Workers AI 只需要两步。
第一步:在 wrangler.jsonc 里加一段配置
{
"ai": {
"binding": "AI", // 在 Worker 代码中通过 env.AI 访问
"remote": true // 避免控制台警告,因为访问的是远端额度
}
}然后跑一下类型生成脚本,让 TypeScript 识别新的绑定:
npm run cf-typegen就这么一行。和 D1 一样,Workers AI 也是通过 Binding 连接——不用记 API 地址,不用管密钥,Cloudflare 在部署时自动帮你接好一切。
第二步:在代码里调用
// 比如让 AI 判断一条留言是不是垃圾内容
const answer = await env.AI.run(
"@cf/meta/llama-3.2-3b-instruct",
{
messages: [
{
role: "system",
content: "你是一个内容审核助手。判断以下留言是否为垃圾广告,只回复 '是' 或 '否'",
},
{
role: "user",
content: "加我微信 xxx,日赚千元,轻松在家办公",
},
],
}
);
console.log(answer.response); // "是"看到了吗?就是 env.AI.run(模型名, 参数),和调用一个普通函数没区别。你不用知道模型跑在哪台 GPU 上,不用关心显存够不够,不用处理模型加载卸载。只管传参数、拿结果,剩下的 Cloudflare 全包了。
不止聊天,它能做的事比你想的多
Workers AI 上有 80 多个模型,覆盖文本生成、图片生成、语音识别、翻译、图片分类等。对个人网站,我挑了三个最实用的场景:
1. 自动生成文章摘要
每篇文章写完后让 AI 读一遍,自动生成 100 字摘要放在首页,读者不用点进去就知道讲什么。
const summary = await env.AI.run("@cf/meta/llama-3.2-3b-instruct", {
messages: [
{
role: "user",
content: `请为以下文章生成一段 100 字以内的摘要:\n\n${articleContent}`,
},
],
});2. 智能垃圾评论过滤
用户提交留言时,先让 AI 看一眼,判断是不是广告、辱骂或无意义内容,是的话直接拒绝,不用人工审核。用 Llama 3.2 3B,判断一条留言不到 1 秒,而且这个模型在免费额度内几乎用不完。
3. 多语言翻译
想服务不同语言的读者,Workers AI 上有专门的翻译模型,比如 Meta 的 m2m100,支持 100 种语言互译。
const translated = await env.AI.run("@cf/meta/m2m100-1.2b", {
text: "你的个人网站现在有了 AI 能力",
source_lang: "chinese",
target_lang: "english",
});
// "Your personal website now has AI capabilities"多少钱?继续 0 元
这是我最关心的部分。Workers AI 的计费方式和 D1 类似:每天有免费额度,超出才付费。
免费额度是每天 10,000 Neurons。Neuron 是 Cloudflare 自定义的计算单位,可以理解为「GPU 算力消耗量」。不同模型消耗的 Neurons 不同,常用模型大致如下:
| 模型 | 用途 | 免费额度能干什么 |
|---|---|---|
| Llama 3.2 3B | 文本生成 | 每天约 200 万输入 token + 30 万输出 token |
| Llama 3.2 1B | 轻量文本 | 每天约 400 万输入 token + 50 万输出 token |
| Whisper | 语音转文字 | 每天约 240 分钟音频 |
| BGE Small | 文本嵌入 | 每天约 500 万 token |
对个人网站绰绰有余。假设每天 100 条留言要审核,每条 50 字,用 Llama 3.2 3B 判断,一天消耗 Neurons 大概 100 左右,是免费额度的 1%。就算每天让 AI 生成 10 篇文章摘要,每篇 2000 字,一天也才几百 Neurons。换句话说,在网站真正火起来之前,AI 能力基本是免费的。
而且和 D1 一样,免费额度用完后就报错,不会自动扣费——你不会某天醒来发现账单多了几个零。
一个实际例子:智能留言板
把留言功能改一下:用户提交留言后,Workers 先让 AI 审核内容,通过后再存入 D1;如果留言提到了某篇文章的关键词,AI 还会自动推荐相关文章。
export default {
async fetch(request, env) {
if (request.method === "POST" && new URL(request.url).pathname === "/message") {
const { content, articleId } = await request.json();
// 1. AI 审核内容
const moderation = await env.AI.run(
"@cf/meta/llama-3.2-1b-instruct",
{
messages: [
{ role: "system", content: "判断以下内容是否为垃圾信息,只回复 'spam' 或 'ok'" },
{ role: "user", content },
],
}
);
if (moderation.response?.trim().toLowerCase() === "spam") {
return Response.json({ error: "内容不符合社区规范" }, { status: 400 });
}
// 2. 存入数据库
await env.DB.prepare(
"INSERT INTO messages (content, article_id, created_at) VALUES (?, ?, ?)"
).bind(content, articleId, Date.now()).run();
// 3. AI 推荐相关文章
const recommendation = await env.AI.run(
"@cf/meta/llama-3.2-3b-instruct",
{
messages: [
{ role: "system", content: "根据用户留言内容,从以下文章列表中推荐最相关的1篇" },
{ role: "user", content: `留言:${content}\n\n文章列表:${articleList}` },
],
}
);
return Response.json({
success: true,
recommendation: recommendation.response,
});
}
},
};一个留言接口,串联了 AI 审核 → 数据存储 → AI 推荐 三个步骤,全在同一个 Worker 里完成,不调用任何外部服务。这就是 Workers + D1 + Workers AI 组合的力量:网站不再是一个静态展示页,而是一个能理解内容、做出判断、给出建议的智能系统。
网站现在有了完整的「大脑」
回顾一下,个人网站经历了四次进化:
- 纯静态页面——能展示内容,仅此而已
- 加上后端能力——能处理请求、返回动态内容
- 接上数据库——有了记忆,数据不会丢
- 接入 AI——能理解内容、做出判断
现在网站有了完整的「大脑」:能接收信息(后端)、记住信息(数据库)、理解信息(AI)。而且这一切,月费依然是 0 元。
当然,0 元有 0 元的边界。Workers AI 的免费额度对个人网站足够,但如果你要做 AI 原生产品——比如一个需要大量调用大模型的聊天应用——免费额度可能就不够了。但对于「给个人网站加点智能」这个需求,它刚刚好。
