一套开箱即用的 Cloudflare Workers AI + RAG 模板
去年做 AI 产品的时候,最头疼的不是写业务逻辑,而是每次新项目都要从零搭基础设施。向量数据库怎么接、LLM 调用怎么封装、部署到哪、成本怎么控制——这些重复劳动占了大半时间。
后来我把一套常用的 RAG 架构整理成了 Cloudflare Workers 模板,直接部署到边缘网络,不用管服务器。今天把这套模板拆开来讲,代码放在 GitHub 上,需要的话可以直接拉下来用。
这套模板解决什么问题
假设你要做一个 AI 客服系统,用户问”你们的产品支不支持企业 SSO”,系统需要从知识库里找到相关内容,再用 LLM 生成回答。传统做法是:搭一台服务器 → 部署向量数据库 → 写 API → 接 LLM → 配置监控。至少花 3-5 天。
这套模板把整个过程压缩到 30 分钟:git clone → 配置环境变量 → npm run deploy,搞定。
核心架构:
- Cloudflare Workers 做 API 网关和业务逻辑层
- Cloudflare Vectorize 做向量存储和检索
- Workers AI 调用 LLM(支持 Llama、Mistral 等开源模型)
- Cloudflare KV 做缓存层
- 全部部署在 Cloudflare 边缘网络,延迟 < 50ms
项目结构
模板的目录结构很简单:
rag-starter/
├── src/
│ ├── index.js # 入口,路由分发
│ ├── embed.js # Embedding 生成
│ ├── retrieve.js # 向量检索
│ ├── generate.js # LLM 生成
│ ├── cache.js # KV 缓存逻辑
│ └── config.js # 配置项
├── test/
│ └── api.test.js # 集成测试
├── wrangler.toml # Cloudflare 配置
└── package.json
每个文件职责单一,可以单独替换或扩展。
核心代码:三条核心链路
1. Embedding 生成(embed.js)
Workers AI 直接支持 @cf/baai/bge-base-en-v1.5 模型做向量化,不需要自己部署 embedding 服务:
import { Ai } from './cloudflare/ai';
export async function generateEmbedding(text, env) {
const ai = new Ai(env.AI);
const { data } = await ai.run('@cf/baai/bge-base-en-v1.5', {
text: [text]
});
return data[0];
}
一行代码搞定 embedding。BGE 模型在 MTEB 上的得分为 63.7(Hugging Face MTEB Leaderboard, 2026),对于文档检索场景完全够用。输出 768 维向量,每 1000 次调用的成本约 $0.03(Cloudflare Workers AI 定价页面,2026)。
2. 向量检索(retrieve.js)
用 Vectorize 做语义搜索,支持余弦相似度:
export async function searchSimilar(query, env, topK = 5) {
const queryVector = await generateEmbedding(query, env);
const results = await env.VECTORIZE_INDEX.query(queryVector, {
topK: topK,
returnMetadata: true
});
return results.matches.map(match => ({
text: match.metadata.text,
score: match.score,
source: match.metadata.source
}));
}
Vectorize 的索引创建和查询都在边缘完成,官方文档显示 P50 延迟约 15ms(Cloudflare Vectorize 文档,2026)。配合缓存,90% 的常见问题可以做到亚毫秒级响应。
3. LLM 生成(generate.js)
用 Workers AI 调用开源模型,我这里用 Llama 3.1 8B,在速度和效果之间平衡得比较好:
export async function generateAnswer(context, query, env) {
const ai = new Ai(env.AI);
const messages = [
{ role: 'system', content: `基于以下内容回答问题。如果内容不足以回答问题,请明确说"找不到相关信息"。\n\n相关内容:${context}` },
{ role: 'user', content: query }
];
const response = await ai.run('@cf/meta/llama-3.1-8b-instruct', {
messages,
max_tokens: 512,
temperature: 0.3
});
return response;
}
temperature 设 0.3 是为了让回答更确定,适合客服场景。需要创意场景(比如文案生成)可以调到 0.7 以上。
部署步骤
从拉代码到上线,完整流程:
- 注册 Cloudflare 账号(免费版每天 10 万次 Workers 请求,够个人项目用)
npm create cloudflare@latest rag-starter -- --template https://github.com/yourname/rag-starter- 在 Cloudflare Dashboard 创建 Vectorize 索引,维度设 768
- 创建 KV namespace 用于缓存
- 配置 wrangler.toml:绑定 Vectorize 和 KV
npm run deploy
整个流程在 30 分钟内可以跑通。
成本估算
以个人项目日均 1000 次查询为例:
- Workers 请求:免费额度内(10 万次/天)
- Vectorize 写入:免费额度内(1000 万向量/月)
- Workers AI LLM 调用:Llama 3.1 8B 约 $0.59/百万 token(Cloudflare Workers AI 定价页面,2026)
- KV 读写:免费额度内(1000 次读/天)
日均成本不到 $0.01。等用户量上来后再考虑升付费计划或切到专用 GPU 实例。
什么时候该用这套模板
这套模板适合以下场景:
- 个人项目的 MVP 阶段,快速验证 AI + RAG 的核心逻辑
- 内部工具,不需要复杂的权限管理和审计日志
- 日均查询量在 1 万次以下的小型应用
不适合的场景:需要低延迟(< 5ms)的实时系统、合规要求高的企业应用、需要微调自有模型的产品。
扩展建议
项目跑起来之后,可以按这个优先级扩展:
- 加缓存层(已经内置 KV 缓存,默认 1 小时过期)
- 加简单的请求日志(用 Workers Trace 或 R2)
- 加 Rate Limiting(Workers 自带)
- 换更强的模型(比如 Mixtral 8x7B,成本约 3 倍但效果明显更好)
总结
这套模板的价值不在于代码量,而在于把 RAG 项目从”3 天搭基础设施”变成”30 分钟上线验证”。AI 产品真正的门槛不在技术,在于能不能快速验证市场需求。减少重复劳动,把时间花在用户和产品上。
模板的完整代码在 GitHub(同名仓库 rag-starter),欢迎提 PR 和 issue。
