75ms 找到三輪 grep 才看到的程式碼:實測 XERJ,給 AI Agent 的本地搜尋引擎

作者: Calpa Liu
字數:1230
出版:2026 年 10 月 29 日
分類:AI開源專案Rust開發工具
我的 repo 裡有一段自己寫卻找不到的修復。三輪 grep 才命中,而一個 27MB 的 Rust 執行檔用 75ms 就定位了它。這篇文章是 XERJ 的第一手實測:安裝、索引 637 個檔案、跨語言檢索、符號定位,以及它真正的限制。

前言:一段我寫的程式碼,我找不到它

前陣子我修了一個 GA4 埋點的 bug:分享按鈕的事件在 dataLayer 裡靜默擱淺,修法是把 dataLayer.push 換成 gtag() 直呼。程式碼是我改的,commit 是我推的。

三天後我想回頭看那段修復,腦中只剩「好像在某個元件裡」。grep 了字串、翻了元件目錄、換了關鍵字再來一輪——三輪之後才命中。

同一週,我在 GitHub 上撞見一個 17,326 星的專案:XERJ。宣稱是一個 27MB 的 Rust 執行檔,索引你的 code、docs、logs,講 Elasticsearch 協議,專為 AI agent 設計。

半信半疑地下載來測。第一個查詢,75ms,直接命中那段修復所在的檔案。

XERJ 是什麼

一句話:本地版的 Elasticsearch,縮到一個執行檔,然後把客群換成 AI agent。

它的幾個關鍵決定:

  • 單一 Rust 執行檔,27MB,零依賴,checksum 驗證後即用
  • 講 Elasticsearch wire protocol——回報自己是 ES 8.13,標準 ES 工具鏈可以直接接
  • autoindex 模式:指一個資料夾,它自己掃描、自己判斷檔案類型(code/prose/JSONL/PDF)、自己分段索引,零配置
  • 為 agent 設計:官方文件直接寫著怎麼讓 Claude/Cursor 這類工具查詢它,甚至內建 MCP server 模式

17,326 顆星,release 節奏是「每天有新版、每天有 agent 實測回報」,這不是玩具專案。

實測:索引我的部落格 repo

安裝是工程師最愛的那種:下載、驗 sha256、丟進 PATH,結束。

# 節點先起來(ES 相容服務,預設 localhost:9200)
xerj --insecure --data-dir ./.xerj-data &

# 旗艦模式:指著資料夾,零配置
cd ~/Github/calpa-2023-website
xerj autoindex .

結果一行 summary:

xerj-done ok=true wall=32.0s files=637 records=3854
datasets=7 code_files_indexed=132 code_files_junked=0

637 個檔案、3,854 筆記錄,32 秒。全程 CPU 只吃 2.7 秒,其他在 I/O。

三發實測:我知道答案的問題

測搜尋品質最誠實的方法,是拿「我知道答案在哪」的問題去問。三發:

第一發:找那段 share_click 修復。

xerj search --prefix ax "share_click dataLayer stuck fix"
→ src/components/EveryPageComponent.astro (score 11.03)

檔案正確。分數是三發中最低的,因為我的關鍵字混了意圖描述而非實際代碼用詞。

第二發:找 sitemap 的工具頁列舉邏輯。

xerj search --prefix ax "sitemap tools import.meta.glob"
→ src/pages/sitemap.xml.ts:39 (score 20.40)

正確檔案、正確函式。

第三發:日文內容檢索。我的工具頁最近加了日文說明區,試試日文查詢能不能命中日文內容:

xerj search --prefix ax "ja-guide 日本語ガイド 画像メーカー"
→ src/pages/tools/image/aoyamagosho.astro (score 44.96)

直接命中日文指南區塊本身,而且是三發中分數最高的。跨語言檢索對內容型 repo 是真的有用——這對經營多語言內容的人來說,比 code search 更值錢。

符號定位:強項與盲區

xerj def 是符號定義查找(類似 IDE 的 go-to-definition):

xerj def --prefix ax "setAoyamaLang"
→ src/utils/aoyamaI18n.ts:75 [function]
  export function setAoyamaLang(lang: AoyamaLang): void

精準命中,連型別簽名都帶出來,還附上同檔案的相關型別。

但盲區也在此:我把同一個符號換到 .astro 檔案的內嵌 <script> 裡測,def 回報「no definition」。Astro/Vue/Svelte 這類框架混合檔的內嵌 script,符號沒進 def 索引——fallback 是 ranked search,找得到但不是定義級精度。前端框架用戶要有這個預期。

限制清單(誠實版)

  • 節點要常駐:autoindex 需要一個跑在 9200 端口的 XERJ 節點,背景服務自己管
  • 一個資料夾一個 prefix:第二個 repo 索引時要換 --prefix mb 之類,跨 repo 查詢要指定 prefix
  • def 的框架盲區:如上,.astro 內嵌 script 符號不在定義索引
  • rc 階段:版本還在 1.0.0-rc.97,release 筆記裡還有 wire-compat 的修補,拿去接正式 ES 叢集前要測

給 AI Agent 的記憶體

真正讓我留下這個工具的原因,不是它取代 grep——grep 很好,永遠會在。

是它的定位:agent 的本地記憶體。文件裡直接寫了 “Agent memory”、“Semantic search & RAG” 的 playbook,MCP server 模式讓 Claude 這類工具可以直接查詢索引。

想像一下這個工作流:你的每個 repo 都 autoindex 進 XERJ,AI agent 開始任何任務前先查詢「這件事之前做過嗎、當時怎麼做的」。不是向量資料庫那種要先 embedding 的重工程,是一個執行檔加一條 HTTP 查詢。

我的三輪 grep,就是沒有這層記憶體的樣子。

結語

XERJ 不完美:rc 版本、def 有框架盲區、節點要自己管。但「75ms、單檔、ES 相容、為 agent 設計」這四個詞放在一起,在 2026 年的工具市場上是站得住的。

它已經成為我工作流的常駐服務。兩個 repo 索引好了,查詢一行:

xerj search --prefix ax "你的問題"

至於那段我找不到的 share_click 修復——現在它離我只有 75ms。

AI開源專案Rust開發工具
關於 Calpa

Calpa 擅長使用 TypeScript、React.js 和 Vue.js 建立 Responsive Website。

他積極參與開源社區,曾在 2019 年的香港開源大會上擔任講者,提供工作經驗和見解。此外,他也在GitHub 上公開分享個人博客程式碼,已獲得超過 300 顆星星和 60 個分支的支持。

他熱愛學習新技術,並樂意分享經驗。他相信,唯有不斷學習才能跟上快速演變的技術環境。

熱門文章

最新文章

部落格內容洞察儀表板
以視覺化儀表板方式追蹤文章成效、分享熱度與分類分布,協助創作者掌握內容表現。
你擁有的 .eth 是誰?一鍵查出 ENS 背後地址
只要輸入一個 ENS 名稱,我們就能幫你查出它指向哪個以太坊地址,還能看到頭像。如果你常常看到 .eth 名稱卻不知道誰在背後,這個小工具幫得上忙。
水果切割圖生成器
圖片管理中心
管理圖片資源
Vibe Coding Idea Lab:AI 共創 × 靈感實作 × MVP 引爆場
精選來自超過 700 位學員、Discord 社群與線上共創活動的 idea。我們用 AI 快速落實創意,用 prompt 引爆行動,用共創測試價值。現有 ${ideas.length} 個 idea,歡迎隨緣分享。
原作(青山剛昌)產生器
一鍵創建原作(青山剛昌)的封面圖
Blurhash
一鍵創建 Blurhash
活動圖生成器
一鍵創建活動的封面圖
Facebook Quote
Facebook Quote
封面圖生成器
自動創建適合各種平台的文章封面圖
Wagmi Card
一鍵創建 Wagmi 的封面圖
IP 查詢
快速查詢和定位 IP 地址的地理位置和相關信息
LLM
使用 LLM 模型進行聊天
Music Macro Language (MML) Studio
用程式語法編寫旋律,用音符構築想像
蒙特卡羅估算 π
使用蒙特卡羅方法演示 π 值的估算過程
日本色彩
探索和使用傳統日本色彩
PixAI Prompt 組合器|快速打造可用於 AI 繪圖的語言拼圖
使用 PixAI 卻不會寫 prompt?這個工具幫你一鍵組裝角色、表情、風格語彙,輸出高品質繪圖提示語句(Prompt),可直接貼入 PixAI 使用。適合插畫師、創作者、AI 新手與 VTuber 角色開發者。
Python 運行器
無需後端、無需登入,只需打開瀏覽器即可運行 Python 代碼(由 Pyodide 提供支持)
文字分類器
使用 MediaPipe TextClassifier 分類文字
紫微斗數排盤系統|結合 AI 的命盤性格與事業財務分析生成器
紫微斗數排盤工具,輸入生日與時辰,自動生成完整命盤分析提示(Prompt)。結合最專業紫微理論與 AI 助力,助你深入解析性格、事業、財務與人際課題。免費使用,適合命理師及紫微愛好者。