理解不熟悉的代码库是软件开发中最困难的挑战之一。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助你行銷加分!