AI Engineer Europe 2026 · 演講 · 2026-06-03 · 16 分
替 Claude Code 加語意搜尋的實測
Benchmarking semantic code retrieval on Claude Code · Kuba Rogut,Turbopuffer
Kuba 為 Claude Code 做了語意搜尋的 CLI,用 ContextBench 量讀檔的精準率與召回率,結果精準率明顯上升,召回率則互有勝負。
概要
- Claude Code 預設靠 grepKuba 提到 Boris 說過,早期版本用過本地向量資料庫做語意搜尋,後來發現 agentic search(用 grep 翻檔案系統)效果更好也更簡單。Cursor 則仍把程式碼索引進 Turbopuffer。
- embedding 是快取下來的運算grep 式搜尋每個 session、每個 agent 都得重做一次,Kuba 舉的例子是 6,000 個 token;語意搜尋是先花一次切塊、embed、建索引的成本,之後查詢就能直接拿到需要的程式碼片段。
- TurboGrep 是 Turbopuffer 做的 CLI用一個解析程式碼的函式庫走過程式庫、切塊,以 Voyage 的 code 模型 embed 後上傳到 Turbopuffer,讓 Claude Code 透過 tpuf search 工具來查。
- 精準率從 65% 升到 87%測試用 ContextBench,baseline 的 Claude Code 精準率是 65%,換算下來每三次讀檔就有一次白讀;加上視窗化讀取與語意搜尋後,是每八次一次。
- 召回率沒有跟著變好預設的 Claude Code 檔案召回率反而最高,另外兩種條件差不多,部分任務甚至下降。拆開看,語意搜尋適合找行為相近但關鍵字不同的檔案,grep 則適合追 import、關鍵字一兩次就命中的任務。
- Kuba 的結論Claude Code 是為 grep 打造的,語意搜尋對它只是外加工具,不像 Cursor 的 Composer 模型把它當內建工具;長期贏家會是提供輕量工具、把龐大 context 縮成對的那一小塊的人。
原話
▶ 06:50“this is also due to the fact that Cloud Code by default is really exploratory. It loves to read as much as it can and tries to read everything”
這也是因為 Claude Code 預設非常愛探索,能讀多少就讀多少
▶ 07:07“Cloud Code, one in every three file reads, is actually just a completely wasted file.”
Claude Code 每三次讀檔,就有一次是完全白讀的檔案
▶ 08:44“And this kind of proves certain tasks require different types of tools.”
這也印證了不同的任務需要不同類型的工具
▶ 10:06“we kind of like add as an extra tool and it's like hey like here's this cool tool you probably should use it sometimes”
我們只是把它當成額外的工具丟進去,跟它說這個工具不錯,你有時候應該用
▶ 10:42“the people that provide these, like, easy tools to shrink down these billion context windows into the right million will win in the long term.”
提供簡單工具,把十億等級的 context 縮到對的百萬等級的人,長期會贏
延伸
- Cursor 的 A/B 測試數字(2.6%、2.2%)看起來小,Kuba 說是因為不是每個查詢都用得到語意搜尋,Cursor 的部落格也這樣說明。
- 限制每次只讀 50 行,是因為整份讀上千行的檔案時雜訊太大,三種條件比不出差異。
- Kuba 說自己一次同時跑三個 agent,grep 式搜尋每個 agent 都得重來一次,事先索引的成本長期下來就划算。
章節
點時碼直接跳到原片的那一段。
- 開場與公司簡介Kuba 介紹自己來自 Turbopuffer,一個建在物件儲存上的 serverless 全文與向量搜尋資料庫。
- Claude Code 為什麼不用語意搜尋轉述 Boris 的說法:早期版本用過本地向量資料庫,後來覺得 agentic search 更簡單、效果也更好。
- Cursor 的語意搜尋成效引用 Cursor 部落格的數字:Composer 模型的答案準確度相對提升 24%,大型程式庫的線上 A/B 測試也有小幅進步。
- embedding 是快取運算用兩種搜尋軌跡對照,說明 grep 式搜尋每次都重算,語意搜尋是把理解事先快取起來。
- TurboGrep 工具介紹 Turbopuffer 做的 CLI:切塊、用 Voyage 的 code 模型 embed、上傳 Turbopuffer,v1 已開源;並以 Django 程式庫的搜尋軌跡示範。
- ContextBench 與三種條件說明這個基準看的是過程中有沒有找到對的檔案、行與符號,並比較原版、限制 50 行讀取、再加語意搜尋三種條件。
- 精準率結果baseline 精準率 65%,加語意搜尋達到 87%,換成白讀的比例是三分之一降到八分之一。
- 召回率結果預設的 Claude Code 檔案召回率反而最高,因為它什麼都讀;行層級的召回率掉得多。另外兩種條件的召回率大致相同。
- 逐任務拆解在 50 個任務上拆開看,有的任務語意搜尋贏,有的反過來,語意搜尋擅長找關鍵字不同的相關檔案,grep 擅長追 import。
- 結論與限制精準率明顯提升;但 Claude Code 是為 grep 打造,不像 Composer 知道何時該用語意搜尋,長期贏家會是提供輕量工具的人。
- Q&A:實作細節有聽眾問做法:只用向量搜尋,用 Voyage code 3 做 embedding,再把查詢送回 Turbopuffer。
- Q&A:註解與 chunk 脈絡程式碼有好的行內說明時效果最好;Kuba 也提到 Cursor 有自己的 embedding model,但不清楚細節。
- Q&A:什麼時候該用向量資料庫本地能全下載就 grep 最省;知識庫或多模態資料沒辦法 grep,就適合向量化。
名詞
- Turbopuffer
- Kuba 任職的公司,建在物件儲存上的 serverless 全文與向量搜尋資料庫
- TurboGrep
- Kuba 為 Claude Code 做的 CLI,把程式庫切塊、embed 後上傳 Turbopuffer,再以 tpuf search 查詢
- ContextBench
- 公開論文提出的基準,看 coding agent 過程中有沒有找到對的檔案、行與符號,而不只看最後解沒解出題
- Voyage code 3
- Q&A 中說明用來 embed 程式碼的模型
- Cursor
- Turbopuffer 的早期客戶之一,會把程式庫索引進 Turbopuffer 做語意搜尋
- Composer
- Cursor 的模型,Kuba 說它把語意搜尋當內建工具,知道何時該用
- Boris
- Kuba 形容為 Claude Code 的創始人,並轉述 Boris 的推文,說早期版本曾用過本地向量資料庫
- precision / recall
- 精準率是讀過的檔案中有多少是必要的檔案;召回率是必要的檔案中找到了多少








