如何使用 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 年的終極架構。

