如何使用 Cloudflare 从零开始构建 0 成本的 Agentic RAG AI 助手
如果你还在为托管向量数据库每月支付 20 美元,并在冷启动的无服务器函数上托管你的 AI 聊天机器人,那你就做错了。
当我决定在我的作品集中添加一个 AI 助手时,我有两个严格的要求:它必须是零延迟的,并且运行它的成本必须恰好为 0 美元。
通过将整个 AI 架构转移到边缘计算,我实现了这两个目标。在本教程中,我将向您展示如何使用 Cloudflare 开发者平台从零开始构建一个有状态的 Agentic RAG(检索增强生成)系统。
0 美元技术栈架构
为了在保持企业级性能的同时将成本保持在零,我们完全依赖 Cloudflare 的免费层:
- Cloudflare Workers:边缘计算运行时。(每天免费 100,000 次请求)。
- Cloudflare Vectorize:用于语义搜索的向量数据库。(每月免费查询 3000 万个维度)。
- Cloudflare D1:用于聊天记录的无服务器 SQLite 数据库。(每天免费读取 500 万行)。
- Cloudflare AI Gateway:用于缓存 LLM 请求并防止速率限制。
我们构建的不是一个仅仅将文档塞进提示词中的被动 RAG 系统,而是一个智能体 (Agentic) 系统。这意味着 AI 运行在一个 "ReAct"(推理和行动)循环中,配备了自定义工具,它可以根据用户输入动态调用这些工具。
第 1 步:初始化边缘 Worker
首先,我们需要启动一个 Cloudflare Worker。这将作为我们操作的大脑。
npm create cloudflare@latest agentic-assistant
cd agentic-assistant
打开您的 wrangler.toml 文件。这是奇迹发生的地方。我们需要将 D1 数据库和 Vectorize 索引直接绑定到 Worker 环境,以便它们以近乎零延迟执行。
name = "agentic-assistant"
main = "src/index.ts"
compatibility_date = "2026-05-01"
[[d1_databases]]
binding = "DB"
database_name = "chat_history"
database_id = "your-d1-id"
[[vectorize]]
binding = "KNOWLEDGE_BASE"
index_name = "rag-index"
第 2 步:摄取知识库
在我们的 Agent 能够回答问题之前,它需要数据。我创建了一个简单的 rag-data.ts 文件,其中包含我的职业背景、服务和定价。
要将这些数据嵌入到 Cloudflare Vectorize 中,我们使用 Cloudflare 原生的 Workers AI 文本嵌入模型。这比调用 OpenAI 嵌入 API 便宜得多(也快得多)。
import { Ai } from '@cloudflare/ai';
export default {
async fetch(request, env) {
const ai = new Ai(env.AI);
// 1. 在边缘生成向量嵌入
const { data } = await ai.run('@cf/baai/bge-small-en-v1.5', {
text: "Elvis Li 是一名专注于 AI 的独立全栈开发者。"
});
// 2. 直接插入到 Vectorize
await env.KNOWLEDGE_BASE.upsert([{
id: "bio-1",
values: data[0],
metadata: { category: "background" }
}]);
return new Response("Knowledge Base updated!");
}
}
第 3 步:构建调用工具的 ReAct 循环
这就是系统成为 Agentic 的原因。标准 RAG 只会盲目搜索向量数据库。我们的系统要求 LLM 决定 它是否需要搜索。
我通过 Cloudflare AI Gateway 使用 Gemini 1.5 Pro。我们为 Gemini 提供可用工具的 JSON Schema。
const tools = [
{
name: "query_knowledge_base",
description: "使用此工具搜索关于 Elvis 的事实的向量数据库。",
parameters: {
type: "object",
properties: {
query: { type: "string" }
},
required: ["query"]
}
}
];
当用户询问 “你构建什么样的 AI 系统?” 时,Worker 会拦截请求并触发 Agent 循环:
- 请求 (The Request):Worker 将用户的消息和工具列表发送给 Gemini。
- 思考 (The Thought):Gemini 意识到它不知道答案,但它知道
query_knowledge_base工具知道。它返回一个tool_call响应。 - 行动 (The Action - RAG):Worker 拦截工具调用,获取 Gemini 生成的搜索查询,通过 Workers AI 将其嵌入,并查询 Cloudflare Vectorize。
- 解析 (The Resolution):Worker 将向量搜索结果反馈给 Gemini,Gemini 随后综合出一个自然的、类人的响应。
所有这些都发生在物理位置靠近用户的单个边缘节点内,从而实现令人难以置信的快速响应时间。
第 4 步:使用 Cloudflare D1 持久化状态
如果 AI 患有健忘症,那么它是没用的。为了使聊天机器人具有对话能力,我们必须保留消息历史记录。
我们使用 Cloudflare D1,而不是设置外部 PostgreSQL 实例。它是构建在 Durable Objects 上的 SQLite,这意味着它与我们的 Worker 一起在边缘运行。
// 在边缘本地保存对话
await env.DB.prepare(`
INSERT INTO messages (session_id, role, content)
VALUES (?, ?, ?)
`).bind(sessionId, 'user', userQuery).run();
在每个传入请求中,Worker 只需使用 SELECT * FROM messages WHERE session_id = ? 在访问 LLM 之前重建聊天历史记录。由于 D1 是无服务器的分布式数据库,此查询几乎没有增加任何开销。
结果:企业级,零成本
通过利用 Cloudflare Workers、Vectorize 和 D1,您无需使用昂贵的托管向量数据库、冷启动的 Lambda 以及专用的数据库服务器。
结果是一个完全自主的、有状态的 Agentic RAG 系统,其运营成本为 0 美元,响应速度比几乎任何商业替代品都要快。如果您正在构建个人作品集、初创公司登录页面或内部工具,这是 2026 年的终极架构。

