Topics

使用 Cloudflare AI Search 為多語言網站實現站內搜尋

  • column

我們在採用 Astro SSG + 無頭 CMS 架構的自家網站上進行了實作。
導入步驟本身相當簡單,但由於我們的網站採用多語言構成,因此遇到了一些陷阱。

什麼是 Cloudflare AI Search

舊名為 AutoRAG,已於 2025 年 9 月更名。搜尋出現的文章多為舊名稱和舊 API 的內容,敬請留意。

它會執行這一系列的流程。

爬取網頁 → 轉換為 Markdown → 分割內容塊 → 嵌入 → 建構向量及關鍵字索引

API 有兩個系統。返回搜尋結果清單的 search,以及使用 RAG 產生回答的 chat/completions。這次我們只使用前者。

設定的重點

請按如下方式建立執行個體。

  • 資料來源選擇 WebCrawl
  • 將爬蟲目標設為公開URL
  • 將解析類型設為網站地圖
  • 在內容選擇器中指定main元素
  • 解析模式:靜態網站
  • 在特定網站地圖中指定sitemap.xml
  • 將嵌入模型設為@cf/baai/bge-m3(針對日文網站)

其餘部分基本上保持預設設定即可。

驗證與環境變數

從帳戶建立API代碼。
需要注意的是,不僅需要「AI Search:讀取」,還需要「編輯」和「執行」權限。
建立的代碼透過環境變數AI_SEARCH_TOKEN來讀取。

組成:1個API路由 + 1個元件

搜尋會透過 Astro 的 API 路由(作為 Pages Functions 運作)呼叫 REST API。因為無法將 API 令牌公開給瀏覽器,所以必須在伺服器端進行代理。另外,Pages Functions 沒有 AI Search 的繫結,因此我們使用原始的 fetch 而非 SDK。

// Astro の API ルート(Pages Functions として動く)
const res = await fetch(
  `https://api.cloudflare.com/client/v4/accounts/${id}/ai-search/instances/${name}/search`,
  {
    method: 'POST',
    headers: { Authorization: `Bearer ${token}` },
    body: JSON.stringify({
      query,
      ai_search_options: {
        retrieval: {
          retrieval_type: 'hybrid',
          max_num_results: 50
        },
      },
    }),
  }
);

實現的只有 API 路由和搜尋 UI 元件這 2 個檔案。作為靜態網站產生(SSG)的後補方案,整體相當輕量。

在多語言網站上,將搜尋範圍限制在顯示語言內

對於普通的網站內搜尋來說這樣就足夠了,但在多語言的情況下,因為讀取的是包含所有語言的 sitemap.xml,搜尋結果會混在一起。

解決方案是定義自訂中繼資料 locale,並在搜尋時使用 filters 進行篩選。透過這個方法,搜尋結果就只會輸出正在查看的語言。
※ 請注意,無法從 HTML 的 lang 屬性或 og:locale 來判定。

<meta name="locale" content="ja_JP">

將 SEO 用網站地圖和搜尋用網站地圖分開

AI Search(Website 資料來源)會透過網站地圖進行爬行。

不過我們公開用的網站地圖基於 SEO 考量,有意排除了某些語言。結果是該語言的搜尋結果始終為 0 件,造成了問題。

因為我們使用 @astrojs/sitemap 來產生網站地圖,所以採取了另外輸出包含全部語言的網站地圖供搜尋使用的方式。

搜尋結果是如何排序的?

與「AI 搜尋」這個詞彙帶來的想像有相當大的不同。

AI Search 會將日文內容分割成約 300~450 字元的區塊。
相關的區塊最多會挑選 50 個,包含這些區塊的頁面會出現在搜尋結果中。
被判斷為相關度較高的區塊所在的頁面會排在上位。由於可能從一個頁面中選出多個區塊,所以搜尋結果數會少於 50 件。

頁面層級的彙整是在前端進行的。而且在這一連串的處理中,生成式 AI 完全沒有被運作過。

總結

導入時的前提是網域的區域位於 Cloudflare 上,且由 Pages/Workers 進行運維,不過實裝相當簡單,若想以簡易的方式實現網站內搜尋的話,應該會相當實用。

反過來說,若是想在不涉及基礎設施的情況下後置搜尋功能、想要顯示全部結果、或需要搜尋日誌分析、建議功能、同義詞字典等營運者向的管理機能,傳統型 ASP 會更強大。

儘管如此,導入 ASP 顯得太過沉重,但又需要搜尋功能。對於這種規模的網站,應該是個相當有吸引力的選項。

本文作者

從 DTP 跨足 Web 世界,轉眼間便掌握了標記語言、frontend 開發、專案指導,以及 accessibility 等各項技能——是名真正的「技術高人」。自 Liberogic 創立初期便展現多才多藝的能力,如今儼然成為公司內的活字典。最近正沉迷於利用 AI 提示詞探索「accessibility 對應能否更多依靠 AI?」的效率化研究。技術與思維都在不斷進化中。

Futa(二)

IAAP 認證網頁無障礙專家(WAS)/ 標記語言工程師 / Frontend 工程師 / 網頁總監

查看此員工的文章

信心十足的團隊體制與迅速的應對能力是我們的優勢

Liberogic 擁有經驗豐富的人員積極推進專案,因而獲得客戶的高度評價。
我們恰當地安排專案經理和總監,致力於順利推進整個專案。 我們避免不必要的全面投入而導致成本增加,而是採用適材適所配置資源的方式,因此在業務把握到估價制作與提交的速度上也備受好評。

請注意,我們不積極進行 SES 形式的駐場業務。

Slack、Teams、Redmine、Backlog、Asana、Jira、Notion、Google Workspace、Zoom、Webex 等幾乎所有主要的專案管理工具和聊天工具都可供您使用。

請諮詢我們解決您的網站問題。

案例分析