024 · 自建本地索引砍九成 AI 成本
分享兩位工程師如何自建本地程式碼索引,把送給 AI 工具的 context 砍到剩不到一成,還能維持九成搜尋準確度。
原標題:We Cut 94% of AI Coding Tokens With a Local Code Index - Rajkumar Sakthivel, Tesco
重點摘要
- 帳單暴增揪出真兇Raj 和夥伴 Foss 每天用多個 AI 編碼工具寫程式,某個月帳單無故暴增,兩人一路追查,發現多花的錢大多不是模型在「思考」,而是每次查詢都把一堆用不到的程式碼硬塞進 context。
- 輸出省不了多少他們一開始想省成本,先試著改 prompt、調模型參數,都沒有用,因為 context 在模型讀 prompt 之前就已經送出去了;後來改叫模型輸出更短的答案,輸出雖然砍了 75%,但輸出本來就只占成本一成左右,省下來的錢有限。
- 問題其實在輸入端90% 的 AI 成本來自輸入的檔案、搜尋結果與 context,砍輸出 75% 只省下 8%,砍輸入 94% 卻能省下 61%;同一套邏輯,改對地方效果差很多。
- 本地索引分五步驟運作他們做了一層本地搜尋,夾在程式碼庫跟 AI 之間:先把程式碼拆成有意義的函式與類別片段,同時跑語意與關鍵字兩種搜尋互補彼此弱點,再把結果壓縮到只剩重點、串起彼此的呼叫關係,最後用評分機制擋掉不相關的結果,全程都在自己的機器上跑。
- 簡單評分打敗複雜模型他們原本想找 AI 來幫忙判斷搜尋結果好不好,但速度太慢;後來改用一套簡單的加權評分公式,跑起來只要 0.4 毫秒,效果反而更好,結論是多數時候簡單公式就贏過複雜模型。
- 真實數字與限制都攤開講在實測專案上,token 用量從 83k 砍到 4.9k,加上壓縮後剩 523,準確率仍有九成;但他們也坦言,94% 是最極端情況下的數字,遇到職責混雜的大型程式庫,效果會明顯變差。
時間軸
時碼點下去會跳到影片的那一段。
| 時碼 | 段落 | 重點 |
|---|---|---|
| 00:00 | 帳單忽然暴增 | Raj 和夥伴 Foss 每天用多個 AI 編碼工具寫程式,某個月帳單無故暴增,兩人開始追查原因。 |
| 00:39 | 找到真正的成本元凶 | 錢大多不是花在 AI 思考,而是每次查詢都把用不到的程式碼硬塞進 context。 |
| 01:20 | 測出典型查詢的浪費 | 一次典型查詢送出 45,000 tokens 的 context,其中一大部分根本沒用到,卻照樣付費。 |
| 01:41 | 兩次修正都沒抓對 | 改 prompt 要求「只給相關程式碼」沒用,context 在模型讀 prompt 前就已經送出去;調模型參數也只影響輸出,跟輸入成本無關。 |
| 02:25 | 壓縮輸出效果有限 | 叫模型寫更短的答案,輸出砍了 75%,但輸出本來就只占成本一成左右,省下來的錢有限。 |
| 02:47 | 關鍵其實在輸入 | 90% 的 AI 成本來自輸入,砍輸出 75% 只省 8%,砍輸入 94% 卻能省 61%,同一套邏輯,改對地方差很多。 |
| 03:29 | 索引流程的五個步驟 | 先把程式碼拆成有意義的函式與類別片段,作為後續搜尋與壓縮的基礎,而不是隨機切塊。 |
| 04:39 | 兩種搜尋為何互補 | 語意搜尋抓得到相關概念卻常抓錯確切名稱,關鍵字搜尋抓得到精確名稱卻漏掉語意相近的內容,兩者合併正好互補。 |
| 05:33 | 評分機制擋掉爛結果 | 搜尋常混入不相關的結果,若照單全收會讓模型講出「自信卻錯」的答案;最後靠一套簡單加權公式評分,只要 0.4 毫秒。 |
| 06:33 | 實測數據亮眼 | 同一個開源專案,不用工具要送 83k tokens,用了工具剩 4.9k,加上壓縮再降到 523,還能找到九成正確的程式碼。 |
| 07:26 | 坦承限制與例外 | 94% 是最極端情境下的數字,真實工具本來就比較聰明;遇到職責混雜的大型程式庫,命中率會掉到接近零。 |
| 08:24 | 每個工具各自為政 | 每個編碼工具原本都是從零開始,等於要對每個工具重新解釋一次同一個 codebase,於是他們做了一個共用索引。 |
| 09:03 | 真實專案的省錢成果 | 在一個實際專案上測了 247 次查詢,省下 12.4 million tokens,另外還有將近 186 沒有花掉(講者只報了數字,沒有說單位),其中 84% 的節省來自搜尋層本身。 |
| 10:06 | 修輸入而非換模型 | 換一個更好的模型幫助有限,真正有效的是少送東西進去;模型選擇的重要性,其實沒有想像中那麼大。 |
值得記的話
名詞與人物
| Rajkumar Sakthivel(Raj) | 這場的講者,在 Tesco 工作,因為親身遇到 AI 編碼帳單暴增,動手和夥伴一起做了這套本地索引工具。 |
|---|---|
| Foss | 講者提到的合作夥伴,兩人一起打造這套本地程式碼索引工具。 |
| Claude Code | 講者提到自己每天在用的 AI 編碼工具之一。 |
| Meaning-based search(語意搜尋) | 用語意相似度找程式碼的搜尋方式,擅長抓到相關概念,但容易漏掉或抓錯確切名稱。 |
| Word-based search(關鍵字搜尋) | 用精確字詞比對找程式碼的搜尋方式,擅長抓到精確名稱,但容易漏掉語意相近的內容。 |
| cce | 講者秀在螢幕上的指令,一行就能試用這套本地索引工具,他說是免費開源的。 |
延伸
- 講者提到在一個有 396 個檔案、職責混雜的大型程式庫上測試,命中率掉到接近零,但沒有細講後續打算怎麼處理這種情況。
- 講者提到會追蹤程式碼之間「哪個函式呼叫哪個」的關聯,讓找到一段程式碼就能連帶找到相關的部分,但沒有細講這個關聯實際上怎麼建出來。
- 講者提到目前用一個小型、快速的模型做搜尋,換成更大的模型應該能找到更多結果,但他們選擇犧牲一點準確度來換取速度。