用 graphify 分析 OpenCodeReview

meta 示範:用「另一個知識圖譜工具」掃描 OCR 自己的源碼
語料:cmd/ + internal/ + bin/ + scripts/(293 檔)· 對齊 commit 9148bfd · graphify 0.9.40
產出出處:本案例的互動圖與報告由 graphify 產生。graphify 是另一個開源知識圖譜工具(Leiden 社群偵測、EXTRACTED/INFERRED 信任標籤、互動 HTML 輸出);本站用它來分析 OpenCodeReview 自己,呈現「知識圖譜工具 × code review 工具」的對照。產出資料在 worked/ocr-source/

為什麼做這個案例

OpenCodeReview(OCR)本身就是一個 AI 驅動的 code review CLI。用 graphify 再掃一次 OCR 的源碼,有幾個教學價值:

語料

上游 main @ 9148bfd(2026-08-13)的第一方程式碼:

部分內容檔案數
cmd/opencodereview/CLI 命令層(main / review / scan / delegate / config / provider TUI)~60
internal/核心套件(agent / diff / llm / llmloop / tool / rules / session / mcp / viewer / telemetry)~215
bin/ + scripts/NPM wrapper(ocr.js)與安裝/發布腳本~16
合計純 code 語料(--code-only,零 LLM 成本)293

刻意排除 internal/llm/bpe_data/*.tiktokenpages/(官方網站 React 專案)與 docs 內容——圖要呈現「OCR 的 Go 核心工程」。

本站跑的數字

指標本站實測
語料檔案數293
節點4,128
12,278
社群168(156 顯示,12 個過薄省略)
抽取72% EXTRACTED · 28% INFERRED · 0% AMBIGUOUS(INFERRED 3,414 邊,平均信心 0.8)
Import CyclesNone detected
LLM / API 成本0(純 AST,本機執行)
工具版本graphify 0.9.40

God Nodes(核心抽象)

graphify 報告指出連接最多邊的「樞紐節點」——正是 OCR 架構中最關鍵的函式:

函式邊數位置
contains()335測試 helper(大量測試共用的斷言工具)
newProviderTUI()176cmd/opencodereview/provider_tui.go——provider 設定 TUI 的建構入口
writeFile()175測試寫檔 helper
context131Go context 型別節點
main()87cmd/opencodereview/main.go——單一二進位入口

God nodes 以測試 helper 與 TUI 為大宗(因為測試碼呼叫密集);想找「商業邏輯樞紐」要看 Community 對應的 module 層。

社群對應模組

168 個社群,最大的幾個直接對應 OCR 的模組:

社群(graphify 編號)節點對應 OCR 模組
Community 197provider 設定 TUI 測試(provider_tui_*_test.go
Community 294provider TUI 模型/檢視(key 處理、tab 導覽)
Community 383diff hunk 解析(Hunk / ParseHunks 及其測試)
Community 487LLM 端點解析(ResolveEndpoint 家族與測試)
Community 574記憶壓縮與訊息計數(buildMessageXML / CountMessagesTokens
Community 776規則解析鏈(LoadDefault / NewResolver / readRuleFileSafe
Community 1045diff Provider(Mode / InputResolution / firstLine

完整 168 社群清單見 GRAPH_REPORT.md。社群名保留 "Community N" 佔位(graphify 無 LLM backend 標籤模式),可對應到語料路徑判讀模組。

互動圖

OCR 源碼知識圖譜(社群聚合檢視) 英文界面 ↗中文界面 ↗

4,128 節點未超過 graphify 的節點級檢視上限,但為方便一眼看模組結構,這裡以社群聚合檢視呈現。

如何重現

# 0. 安裝 graphify(PyPI 套件名 graphifyy,雙 y)
uv tool install graphifyy

# 1. 準備語料(只保留第一方程式碼)
git clone https://github.com/alibaba/open-code-review.git ocr
git -C ocr checkout 9148bfdded6578c597adf893bbc0c698ea5423b9
mkdir corpus && cp -R ocr/cmd corpus/ && cp -R ocr/internal corpus/
cp -R ocr/bin corpus/ && cp -R ocr/scripts corpus/

# 2. 跑完整 pipeline(code-only,零 API key)
graphify corpus --code-only

# 3. 產出在 corpus/graphify-out/
#    graph.html  互動圖
#    graph.json  全量圖資料(4,128 nodes / 12,278 edges)
#    GRAPH_REPORT.md  審計報告

# 4. 中文化 UI(選擇性)
cp graphify-out/graph.html graphify-out/graph-zh.html
# 替換 lang="en" → lang="zh-Hant" 及 UI 字串(Search / Node Info / Communities…)

已知限制

看完這個案例你應該能說出:OCR 的模組邊界在哪(command 層 / internal 核心)、為什麼 provider TUI 與測試 helper 是最多邊的樞紐、以及 graphify 與 OCR 兩種工具的根本差異(純結構圖 vs 確定性管線 × LLM 評審)。