2026-10-17 · 四方實測 · 同一份 232 檔
先看你的 codebase 怎麼寫,再挑程式碼圖譜
同一份 ai_family_backend(commit a6fb1d3e,backend/src/services 加上 tsconfig),四個工具吃同一份碼,用同一份 grep 真值、同一題流程解說。最大的發現不在哪個工具比較強,而在於每個確定性工具都有自己解析不了的寫法。這個 codebase 剛好大量使用其中一種,兩個工具因此幾乎看不到跨 service 的呼叫。
⚠️ 2026-10-17 再驗證修正(細節見 10-18 的跨 repo 報告)獨立 subagent 改用 TypeScript type checker 當真值重新驗證後:
- 「邊的精確度都是 30/30」被推翻。原判定只檢查名稱有沒有出現在那一行,抓不到同名錯連。嚴格判定後:codegraph 1.4.1 整體 76%、跨檔 60%(1.6.2:90%/76%),GitNexus 99%,graphify 87%。
- 「codegraph 抓不到 export const x = new X()」只限 1.4.1,1.6.2 已修好。
- default singleton 召回率的結論成立:另抽 50 個,結果 49/0/0/37。
原文保留,下面被推翻的格子都已就地標註。
最重要的發現 · 呼叫寫法決定一切
services 裡 232 個檔有 183 個用 export default new XService(),別處再 import xService 呼叫方法。我從原始碼隨機抽 30 個這類跨檔呼叫點(共 265 個不重複點,seed 7),逐一檢查每個工具有沒有建出那條邊。
UNDERSTAND-ANYTHING
24/30
只到 class 層級(LLM 讀碼建邊)
GITNEXUS
0/30
跨檔 calls 邊全庫只有 151 條
GRAPHIFY
0/30
跨檔 calls 邊全庫只有 87 條
對照:codegraph 的跨檔 calls 邊有 854 條。
這不是排名,是「你的寫法撞不撞到它的盲點」換成大量使用 export const x = new X() 的 codebase,codegraph 和 GitNexus 的結果可能整個對調。選工具前,先用自己 codebase 最常見的 2–3 種呼叫寫法做一個 3 檔的最小重現,每個工具跑一次只要幾秒。
總表
不加總分。UA 的數字沿用同日的雙方報告(範圍相同)。
各自的觀察
CODEGRAPH
- 在這個 codebase 上的 caller 召回率最高。答流程題最省,6 次指令就夠,只讀 1 個檔。
- 盲點:export const x = new X() 這種具名實例(1.4.1;1.6.2 已修)。同名方法會退化成名稱比對,跨檔精確度只有 60%(1.6.2 是 76%),常見名稱的 caller 要用 grep 篩。
- 8 月報告說它「漏巢狀 caller」,這次重現不出來。
GITNEXUS
- impact 會依深度分組,並標出受影響的執行流。查不到 caller 時回 risk: UNKNOWN,還附註「沒有邊不代表沒人用,請用文字搜尋確認」,說的是實話。
- caller 名稱最精確,會寫到巢狀的 onMessage@179。
- 這次踩到的限制:
- 全文搜尋要連網下載擴充,沒裝起來就停用。
- 562 個入口候選裡有 362 個沒有追成執行流(它自己警告的)。
- rename 在 1.6.12 的 CLI 裡沒有,只有 MCP 有。
- README 上的 --skip-embeddings 這版不存在。
- 答題 agent 有 3 次 cypher 語法不支援。
- 非商用授權。
GRAPHIFY
- 每條邊都標可信度:4,412 條 EXTRACTED、28 條 INFERRED,抽查的 INFERRED 都正確。
- path 遇到呼叫邊斷掉時,會改走 import 邊連到檔案層級。
- 盲點:兩種 singleton 都解析不了;barrel index.ts 建不出符號;.proto 直接跳過。
- 這次只測純程式碼模式,它真正的強項(文件也進圖)在這裡用不到。
UNDERSTAND-ANYTHING
- 唯一由 LLM 讀碼建邊的工具,所以它不受寫法盲點影響(24/30),但只到 class 層級,重跑也會飄。
- 有分層、導覽和每檔摘要,適合給人看全貌。
- 成本高了好幾個數量級。
給新人看懂 · 同一題四份答案
題目:「解說一通語音通話從接通到結束、講話怎麼變成語音回覆、額度在哪裡檢查和扣」。每份答案抽 10 條事實用 grep 驗證,四份都是 10/10。
- 答案品質差不多,差別在要繞多少路。工具查不到的關係,答題 agent 就回頭讀原始碼補,所以準確度被讀碼補平了,代價轉成 token 和工具呼叫次數。
- GitNexus 最貴(11.2 萬、17 次)。額度檢查、計時、token 驗證這些全走 default singleton,它一條都查不到,只能讀 13 段原始碼補。
- graphify 的第一次 query 就找到所有入口,但「額度在哪裡檢查」也只能靠 import 邊加讀碼。
- UA 靠導覽選了較新的 WebRTC 路徑,涵蓋面最廣;codegraph 在單一路徑上答得最深,讀碼最少。
怎麼選
第 0 步 · 每次都要做
用自己 codebase 最常見的呼叫寫法做 3 檔最小重現,看每個工具能不能建出邊。只花幾秒,卻決定了下面的選擇還成不成立。
AGENT 做影響分析
寫法沒撞到盲點的那個確定性工具。這個 codebase 是 codegraph。
要執行流、Cypher、改名預覽
GitNexus,前提是你的寫法它解析得了,而且授權允許。
文件、需求也要進圖
graphify,可信度標記好用。純程式碼時,跨檔呼叫的召回率要先驗過。
給人看全貌
Understand-Anything,前提是建圖成本分攤得掉。不要拿它問方法層級的 caller。
條件與限制
- 單一 codebase、單一範圍(232 個 TS 檔,大量使用 default singleton)。結論高度依賴這個 codebase 的寫法,換一個 codebase 排序可能完全不同。最小重現只測了 3 種寫法。
- N=1:流程題每個工具只答一次。重現性只做了一次重建(確定性工具)或一批重跑(UA)。
- graphify 只測 --code-only,它的語意抽取(文件、PDF、圖片,需要 LLM)沒測。
- GitNexus 用 --index-only 跑(不裝 skills、hooks、AGENTS.md)。沒有 embedding,全文搜尋也沒裝起來,查詢能力可能被低估。MCP 工具(例如 rename)沒測。授權是 PolyForm Noncommercial,用在公司程式碼上是否構成商業使用由使用者自行判斷。
- codegraph 是 CLI 1.4.1(已有 1.6.2);Understand-Anything 的管線是手動照 SKILL.md 編排的,細節見同日的雙方報告。
- 評分由本次實驗執行者自評;事實抽查每份只有 10 條,不是全文查證。