從 AutoRAG 到 AI Search:為什麼改名

每個 agent 都需要搜尋能力。寫程式的 agent 需要搜尋數百萬個程式碼檔案;客戶支援 agent 需要搜尋工單記錄和產品文件;法律 agent 需要搜尋案例和合約。搜尋不是 agent 的「可選功能」,它是基礎原語。

但自己建 RAG pipeline 的成本很高:需要一個向量索引、一個索引更新 pipeline、某種機制保持索引和來源資料同步、另一個關鍵字搜尋索引、以及把兩者結果合併的融合邏輯。如果每個 agent 或每個客戶都需要自己的搜尋上下文,這一切還要乘以 agent 數量。

AI Search(原 AutoRAG)就是要解決這個問題——讓搜尋成為 Workers binding,就像 KV 或 R2 一樣隨手可用。這次 Agents Week 的升級把它從「可設定的向量搜尋服務」變成了真正的 agent 搜尋原語:

Hybrid 搜尋(向量 + BM25 並行,結果融合) 單純向量搜尋找不到精確 error code;單純關鍵字搜尋找不到語意相關的文件。Hybrid 兩者並行,Reciprocal Rank Fusion 合併排名。
內建儲存 + 向量索引(不需要外部 R2 或 Vectorize) create() 一個 instance,它自帶儲存和索引。上傳檔案,立刻可搜尋。
ai_search_namespaces binding — 執行時動態建立/刪除實例 每個 agent、每個客戶、每個 tenant 都可以有自己的搜尋索引,不需要 redeployment。
跨實例搜尋 — 一次 call 查詢多個 instance shared knowledge base + per-customer history,一個 search call 統一排名,agent 拿到一個結果列表。
Metadata boosting — 按時間或自定義欄位提升排名 最新的文件優先;或依自定義欄位(優先級、部門、語言)調整排名。
Cloudflare 的自食其力

Cloudflare 的部落格搜尋已換成 AI Search。下次在 blog.cloudflare.com 搜尋時,你實際上是在使用這個系統。試試右上角的放大鏡——搜尋「agents week」或「Browser Run」,看看 Hybrid Search 和 AI 摘要的效果。

Hybrid Search:意圖理解 + 精確詞彙,同時兼顧

向量搜尋的根本限制在這個情境最清楚:ERR_CONNECTION_REFUSED timeout。向量模型理解「連線失敗」的語意,可以找到所有關於「connection error troubleshooting」的文件——但它可能永遠不會把含有這個精確 error string 的文件排第一,因為向量距離反映的是語意相似度,不是字面吻合度。

BM25 填補了這個缺口,但它有自己的盲點:找得到含 ERR_CONNECTION_REFUSED 的文件,但找不到描述同一個問題、卻用了不同措辭的文件(比如「socket connection was reset」)。

向量搜尋

理解意圖。「connection failure troubleshooting」找到所有語意相關的文件——包括那些用不同詞描述同一問題的頁面。但可能漏掉只含特定 error code 字串、卻語意不近的文件。

BM25 關鍵字搜尋

精確詞彙。找到含 ERR_CONNECTION_REFUSED 的文件,無論它們描述的是哪種問題。但找不到描述相同問題、卻完全沒用到這個詞的文件。

AI Search 的 Hybrid 模式同時跑兩個索引,用 Reciprocal Rank Fusion(RRF)或 max score 把結果合併。有四個關鍵設定選項:

1
Tokenizer porter:適合自然語言,stemming 會把「running」、「runs」都對應到「run」,提升召回率。trigram:適合程式碼,把字串切成三字元組,讓「conf」可以匹配「configuration」——在搜尋 log 和 error message 時更有用。
2
Keyword match mode AND:所有查詢詞彙都要出現在文件中,準確率高但召回率低。OR:只要有一個詞出現就算,召回率高但可能有更多雜訊。一般文件搜尋用 OR,法律或技術精確查詢用 AND。
3
Fusion method RRF(Reciprocal Rank Fusion):按各自排名的倒數加總,不直接比較向量分數和 BM25 分數(它們的尺度不同)。是最常用的選擇。max:取向量分數和 BM25 分數的最大值,適合你確定其中一個方法明顯較優的情況。
4
Reranking(選擇性) Cross-encoder 重新評分:把問題和候選文件一起輸入模型,評估它們的相關性——比向量相似度更準確,但計算成本也更高。適合結果排名非常重要的場景(客服、法律、醫療)。預設 model 是 @cf/baai/bge-reranker-base
建立 Hybrid 實例(TypeScript)
const instance = await env.AI_SEARCH.create({
  id: "my-instance",
  index_method: { keyword: true, vector: true },
  indexing_options: { keyword_tokenizer: "porter" },
  retrieval_options: { keyword_match_mode: "or" },
  fusion_method: "rrf",
  reranking: true,
  reranking_model: "@cf/baai/bge-reranker-base"
});

內建儲存:不再需要自建 R2 和 Vectorize

舊版 AutoRAG 的設定流程相當繁瑣,即使 Cloudflare 幫你抽象了很多底層細節,你還是需要:建立 R2 bucket → 把 bucket 連結到 AutoRAG → AutoRAG 生成 service API token → Vectorize 索引在你的帳號下被 provision → 把文件上傳到 R2 → 等待同步 job 執行 → 索引完成後才可搜尋。每個步驟都是摩擦力。

新版 AI Search 的流程是:create() → instance 自帶儲存 + 向量索引 → uploadAndPoll() → 立刻可搜尋。

上傳文件並立刻搜尋
// 取得(或建立)instance
const instance = env.AI_SEARCH.get("my-instance");

// 上傳文件,等待索引完成
const item = await instance.items.uploadAndPoll("faq.md", content, {
  metadata: { category: "onboarding" }
});
console.log(item.status); // "completed"

// 立刻可以搜尋
const results = await instance.search({
  messages: [{ role: "user", content: "onboarding guide" }],
});

uploadAndPoll() 會等到文件索引完成才 resolve,所以你不需要另外輪詢狀態——上傳完成即可搜尋。

值得注意的是,內建儲存和外部 R2 並不互斥。一個 instance 可以同時連接一個外部 R2 bucket(或一個網站 URL 作為爬取來源)以及使用內建儲存。適合的場景是:R2 放全局知識庫(由另一個 pipeline 維護),內建儲存放 agent 或 customer 特定的資料(由 agent 自己寫入)。

網站作為資料來源

AI Search 支援把一個網站 URL 作為資料來源——它會用 Browser Run 爬取頁面並自動索引。這個爬取功能內建在 AI Search 中,不另外計費 Browser Run 費用。

Namespace Binding:執行時動態建立實例

ai_search_namespaces binding 取代了舊版的 env.AI.autorag()。最重要的差異是:你可以在 Worker 執行時動態建立和刪除 instance,不需要修改 wrangler 配置或重新 deploy。

這意味著:每個新客戶註冊,你的 Worker 可以立刻為他們建立一個專屬的搜尋索引;客戶刪除帳號,索引連同所有資料一起刪除。整個生命週期由程式邏輯控制,不需要 ops 介入。

wrangler.jsonc + 執行時操作
// wrangler.jsonc
{
  "ai_search_namespaces": [
    { "binding": "AI_SEARCH", "namespace": "example" }
  ]
}

// 執行時建立(每個客戶一個 instance)
const instance = await env.AI_SEARCH.create({ id: "customer-abc123" });

// 執行時刪除(連同所有索引資料)
await env.AI_SEARCH.delete("old-instance");

Metadata boosting 讓你可以控制搜尋結果的排名邏輯,不只依賴相關性分數。最常見的用途是讓最新文件優先,或按自定義欄位(優先級、語言、部門)調整:

Metadata boosting — 最新文件優先
const results = await instance.search({
  query: "deployment guide",
  ai_search_options: {
    boost_by: [{ field: "timestamp", direction: "desc" }]
  }
});

這對於文件持續更新的場景特別重要:如果你的 agent 需要回答「最新的部署流程是什麼」,你不希望它找到三年前的舊版文件,即使那份文件的語意相關性更高。

完整範例:客戶支援 Agent

把以上功能組合起來,看一個實際的應用場景:一個客戶支援 agent,需要同時搜尋產品知識庫(全局共享)和每個客戶的歷史解決記錄(per-customer)。

資料架構如下:

Step 1
product-knowledge R2 bucket 作為來源,所有 agent 共享。由獨立的文件更新 pipeline 維護——產品文件、FAQ、已知問題清單。Agent 只讀,不寫入。
Step 2
customer-{id} 每個客戶一個 instance,使用內建儲存。當客戶第一次聯繫時動態建立(env.SUPPORT_KB.create())。隨著每次問題解決,累積該客戶的專屬知識。
Step 3
跨實例搜尋 查詢時同時搜尋 product-knowledgecustomer-{id},一個 call,AI Search 負責跨實例排名融合,agent 拿到統一的結果列表。
Step 4
解決後 → 寫入客戶索引,立刻可搜尋 問題解決後,agent 呼叫 save_resolution 工具,把解決方案 uploadAndPoll() 進 customer instance。下次這個客戶有類似問題,agent 立刻能找到過去的解決記錄。知識庫隨每次互動自動成長

Namespace 結構:

namespace: "support" ├── product-knowledge (R2 source, shared) ├── customer-abc123 (built-in storage, per-customer) ├── customer-def456 (built-in storage, per-customer) └── customer-ghi789 (built-in storage, per-customer)

跨實例搜尋的呼叫方式:

一次 search call,查詢多個 instance
const results = await env.SUPPORT_KB.search({
  query: "billing error",
  ai_search_options: {
    instance_ids: ["product-knowledge", "customer-abc123"]
  }
});
一個 search call,多個知識庫

agent 不需要知道 shared docs 和 customer history 分別住在哪裡,也不需要分兩次查詢再自己合併結果。namespace-level search 在 AI Search 層完成跨實例排名融合,agent 得到一個統一的結果列表——就像它們本來就在同一個索引裡一樣。

定價與限制

AI Search 目前在 Open Beta 階段,完全免費。Beta 結束後會進入一般定價,但 Cloudflare 還沒有公布具體價格。以下是各方案的實例和使用限制:

免費
Open Beta 階段
所有功能可用
5,000
付費方案
每帳號最多實例數
100 萬
付費方案
每實例最多檔案數
限制 Workers Free Workers Paid
AI Search 實例數 100 5,000
每實例檔案數 100,000 1M(hybrid: 500K)
最大檔案大小 4MB 4MB
每月查詢次數 20,000 無限
每日爬取頁數 500 無限

Hybrid Search 的每實例檔案上限是純向量搜尋的一半(50 萬 vs 100 萬),因為同時維護兩個索引需要更多儲存空間。網站作為資料來源的爬取功能使用 Browser Run 內建,不另外計費 Browser Run 的用量。

舊版 AutoRAG 建立的 instance 繼續正常運作,不受此次升級影響。如果要使用新功能(Hybrid Search、namespace binding),需要建立新的 instance。

OAO Studio 觀點

AI Search 最重要的升級不是 Hybrid Search 本身,而是 namespace binding 讓每個 agent/customer 都能有自己的搜尋索引,且不需要 redeployment。這把「RAG 是需要專門規劃和設定的基礎設施」的認知,轉變為「search 是 Workers binding,像 KV 一樣隨手可用」。對開發者來說,這降低的不只是工作量,而是整個心智負擔——你不再需要在寫 agent 邏輯的同時,還在腦子裡維護一套 vector infrastructure 的設計圖。

立即開始:

建立你的第一個 AI Search instance
npx wrangler ai-search create my-search
← 返回 AI 知識庫