Graphify 做的事可以一句話講完:把你整個專案變成一張圖,然後用「問問題」的方式去讀它。下面從「輸入」到「輸出」拆解這張圖長什麼樣。
不只是程式碼。Graphify 接受程式碼、文件、PDF、圖片、影音,全部進同一張圖:
來源:ARCHITECTURE.md。每個階段是一個獨立模組、一個函數,透過純 dict / NetworkX 圖溝通:
graphify-out/,沒有共享狀態、沒有副作用圖的格式是 NetworkX 的 node-link 結構(graph.json):
每一條邊都帶一個標籤,告訴你「這條關係是讀到的還是推出來的」——這是 graphify 最強調的透明性設計:
| 標籤 | 意義 | 範例 |
|---|---|---|
EXTRACTED | 在原始碼中直接找到(confidence 固定 1.0) | 一個 import 語句、一個直接呼叫 |
INFERRED | 合理的推論,帶 confidence_score(0.0–1.0) | 呼叫圖第二遍、跨檔同名解析 |
AMBIGUOUS | 不確定,會在報告中標記人工檢視 | 同名符號無法消歧 |
| 分數 | 意義 |
|---|---|
0.95 | 近乎確定(明確的跨檔引用、單一可行目標) |
0.85 | 強證據(命名 + 上下文吻合) |
0.75 | 合理(有脈絡但不明確) |
0.65 | 弱(僅命名相似) |
0.55 | 臆測 |
Leiden 是把「彼此之間連線很密的節點」歸成同一群的圖分群方法。Graphify 不需要 embedding 或向量資料庫——Claude 抽出的語意相似邊(semantically_similar_to)本身就已經是圖的一部分,圖的結構就是相似度訊號。
圖建好之後,取代「讀原始檔」的就是這三件事:
實際輸出的長相(README 的範例):
$ graphify explain "APIRouter"
Node: APIRouter
Source: routing.py L2210
Community: 2
Degree: 47
Connections (47):
--> RequestValidationError [uses] [INFERRED]
--> Dependant [uses] [INFERRED]
--> .get() [method] [EXTRACTED]
<-- __init__.py [imports] [EXTRACTED]
$ graphify path "FastAPI" "ModelField"
Shortest path (3 hops):
FastAPI --uses--> DefaultPlaceholder <--references-- get_request_handler() --references--> ModelField
所有產出都放在 graphify-out/,可 commit 進 git 讓整個團隊共享——每個人都直接讀圖,不用重新建。