理解不熟悉的程式碼庫是軟體開發中最困難的挑戰之一。FalkorDB 推出的 Code-Graph 以一種新穎的方式解決這個問題:將原始碼倉庫轉換為完全可查詢的知識圖譜,您可以用自然語言進行查詢。
與線性閱讀檔案或依賴將程式碼視為純文字的搜尋工具不同,Code-Graph 在**抽象語法樹(AST)**層級分析您的程式碼庫,提取每個重要的實體——類別、函式、方法、模組、引數、變數——並將其關係映射到儲存在 FalkorDB 中的屬性圖中。結果是您整個程式碼庫的結構化、可導航表示,支援像「顯示所有依賴 DatabaseConnection 類別的類別」或「在 auth 模組中尋找未使用的工具函式」這樣的自然語言查詢。
graph TD
A[GitHub 倉庫 URL] --> B[AST 解析器]
B --> C[實體提取]
B --> D[關係映射]
C --> E[FalkorDB 屬性圖]
D --> E
F[自然語言查詢] --> G[LLM Cypher 翻譯]
G --> E
E --> H[查詢結果]
H --> I[LLM 答案摘要]
I --> J[開發者]什麼是 Code-Graph?
Code-Graph 是一款開源開發者工具,將原始碼倉庫轉換為可查詢的知識圖譜。它由 FalkorDB 團隊創建,旨在展示圖形資料庫在程式碼分析場景中的威力,如今已發展為一個獨立的工具,擁有活躍的開發與不斷增長的功能集。
該工具分兩個階段運作。在分析階段,它下載倉庫,使用語言特定的 AST 解析器解析每個原始檔,並在 FalkorDB 中建立一個圖形,其中:
- 節點代表程式碼實體(類別、函式、模組、介面、變數)
- 邊代表關係(CALLS、INHERITS_FROM、CONTAINS、HAS_ARGUMENT、DEPENDS_ON、IMPLEMENTS)
在查詢階段,使用者可以用純英文提問。LLM(可在 GPT-4o 與 Llama 3-70B 等模型之間配置)將問題翻譯為 OpenCypher 查詢,對 FalkorDB 圖形執行,並將結果摘要為自然語言答案。
支援哪些程式語言?
Code-Graph 目前支援三種程式語言,未來計劃支援更多:
| 語言 | 狀態 | 使用的 AST 解析器 |
|---|---|---|
| Python | 已支援 | 內建 Python AST 模組 |
| Java | 已支援 | JavaParser |
| C# | 已支援 | Roslyn(Microsoft.CodeAnalysis) |
| C/C++ | 計劃中 | 待定 |
| JavaScript/TypeScript | 計劃中 | 待定 |
| Go | 計劃中 | 待定 |
每種語言的解析器提取語言特定的實體與關係。例如,Java 解析會捕捉介面、抽象類別、註解與泛型型別參數,而 Python 解析會捕捉鴨子型別模式、裝飾器與模組層級函式。
Code-Graph 的詳細運作方式?
分析管線包含數個階段:
| 階段 | 輸入 | 輸出 | 描述 |
|---|---|---|---|
| 倉庫複製 | GitHub URL | 本地 git 複製 | 下載目標倉庫 |
| AST 解析 | 原始檔 | AST 節點 | 語言特定解析器將程式碼分解為結構元素 |
| 實體提取 | AST 節點 | 圖形節點 | 類別、函式、模組、引數成為 FalkorDB 節點 |
| 關係映射 | AST 結構 | 圖形邊 | CALLS、INHERITS_FROM、CONTAINS、DEPENDS_ON 成為邊 |
| 圖形儲存 | 節點+邊 | FalkorDB 屬性圖 | 所有資料持久化在 FalkorDB 中,帶有屬性 |
| 查詢翻譯 | 自然語言 | OpenCypher 查詢 | LLM 將英文問題轉換為圖形查詢 |
| 結果呈現 | 查詢結果 | 自然語言答案 | LLM 摘要回傳的圖形資料 |
實體提取特別徹底。對於每個類別,Code-Graph 記錄其方法、欄位、基底類別、實作的介面、裝飾器(Python)或註解(Java)以及檔案位置。對於每個函式,它記錄參數、回傳型別、呼叫的函式與存取修飾詞。
LLM 整合如何運作?
LLM 整合是 Code-Graph 可用性的關鍵。開發者不需要學習 Cypher 語法,該工具接受自然語言查詢並使用 LLM 進行翻譯:
範例工作流程:
- 開發者提問:「資料存取層中哪些類別使用了連線池?」
- LLM 生成:
MATCH (c:Class)-[:CONTAINS]->(m:Method)-[:CALLS]->(f:Function) WHERE f.name CONTAINS 'getConnection' RETURN c.name, m.name - FalkorDB 執行查詢,回傳匹配的類別與方法
- LLM 以純英文摘要結果
這種方法使程式碼庫探索變得容易,適合初級開發者、新入職的工程師以及任何需要理解程式碼庫而無需記憶其檔案結構的人。它還支援更高階的用例,如影響分析(「如果我修改 DatabaseConnection 類別,會影響哪些其他 15 個類別?」)和死碼檢測(「列出程式碼庫中從未被呼叫的所有公開方法」)。
開始使用 Code-Graph
git clone https://github.com/FalkorDB/code-graph.git
cd code-graph
npm install
docker run -p 6379:6379 -it --rm falkordb/falkordb
export OPENAI_API_KEY=YOUR_OPENAI_API_KEY
npm run dev
在瀏覽器中開啟 http://localhost:3000/,輸入任何公開 GitHub 倉庫 URL,Code-Graph 就會分析它並呈現一個互動式查詢介面。即時示範可在 code-graph.falkordb.com 取得。
FAQ
什麼是 Code-Graph? Code-Graph 是 FalkorDB 推出的開源工具,可分析原始碼倉庫並建立可查詢的知識圖譜。它使用靜態 AST 分析提取程式碼實體及其關係,儲存在 FalkorDB 中,並透過 LLM 啟用自然語言查詢。
支援哪些程式語言? Code-Graph 目前支援 Python、Java 與 C#。C、JavaScript 與 Go 的支援計劃在未來版本中推出。
Code-Graph 如何運作? 它使用 AST(抽象語法樹)解析器解析原始檔,提取類別、函式、模組與變數等實體。這些成為 FalkorDB 圖形中的節點,而邊則代表 CALLS、INHERITS_FROM、CONTAINS 與 DEPENDS_ON 等關係。
LLM 整合如何運作? Code-Graph 使用 GraphRAG 管線,將自然語言問題(例如「哪些類別實作了策略模式?」)翻譯為針對程式碼圖形的 Cypher 查詢。查詢結果再由 LLM 摘要為人類可讀的答案。
如何開始使用 Code-Graph? 從 github.com/FalkorDB/code-graph 複製倉庫,執行 npm install,使用 docker 啟動 FalkorDB,設定 OPENAI_API_KEY,然後執行 npm run dev。開啟 http://localhost:3000/ 並輸入 GitHub URL 即可分析任何公開倉庫。
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!