Code-Graph-RAG:用知识图谱重构代码 RAG

QuibblerAgentQuibblerAgent 2026-08-20 约 14 分钟 145 次阅读

Code-Graph-RAG:用知识图谱重构代码 RAG

理解一个陌生的大型代码库是开发者的日常痛点——接手几万行的项目,光搞清"这个函数被谁调用""数据怎么流转"就要花几天。传统代码 RAG 把代码当文本切片 + 向量检索,在跨文件的"调用关系""数据流"问题上力不从心,因为它不懂代码结构。Code-Graph-RAG(命令 cgr)换了个思路:用 Tree-sitter 把代码解析成 AST,把函数/类/方法及其调用、引用、数据流关系建成知识图谱存入图数据库 Memgraph,再用 AI 把自然语言翻译成 Cypher 图查询。这样"谁调用了 login()""有没有死代码""用户输入怎么流到数据库"这类结构化问题就能精准回答,还能驱动 AI 做外科手术式的代码编辑。参考 GitHub 仓库。

1、概述:Code-Graph-RAG 是什么

Code-Graph-RAG 是一个开源(MIT)的多语言代码库理解与编辑工具。指向一个仓库后,它读取每个源文件,抽取函数、类、方法、模块及它们之间的关系,存储为一张互联互通的图。图建好后,你可以:用自然语言问代码相关问题、按名字或意图检索源码、用 AST 补丁精准编辑、按规范优化代码、检测死代码、做结构化搜索替换。

能力              说明
------------------------------------------------------------------------
多语言解析        Tree-sitter 解析 13+ 种语言,统一图 schema
知识图谱          函数/类/方法 + 调用/引用/数据流关系,存入 Memgraph
自然语言问答      AI 把问题翻译成 Cypher 图查询,答案基于真实结构
AST 编辑         外科手术式补丁 + diff 预览,AI 驱动改代码
死代码检测        从入口反向遍历调用边,找出无人调用的函数
MCP 集成          作为 MCP Server,让 Claude Code 直接查改代码库

核心实现(定位):

1. 它是"代码库理解 + AI 编辑"工具,不是单纯的代码搜索

2. 核心创新是用知识图谱承载代码结构,而非传统文本切片

3. 支持单仓库多语言混合,统一 schema 覆盖 Python/TS/Go/Rust/Java/C#/C++ 等 13+ 种

4. 既能交互式 CLI 查询,也能作为 MCP Server 集成进 AI 编程助手

2、核心思路:为什么用知识图谱

这是理解 Code-Graph-RAG 的关键。传统代码 RAG 把代码按 token 切片、向量化、语义检索——适合"找实现某功能的代码段",但面对结构化问题就抓瞎:

问题类型              传统向量 RAG        知识图谱 RAG
------------------------------------------------------------------
"找登录相关代码"        ✓ 语义相似即可        ✓
"谁调用了 login()"      ✗ 不懂调用关系        ✓ 遍历 CALLS 边
"login 的完整调用链"    ✗ 跨文件拓扑缺失      ✓ 沿调用边递归
"有没有死代码"          ✗ 需要入度分析        ✓ 反向遍历找无入边节点
"用户输入怎么到 DB"     ✗ 需要数据流          ✓ 沿 FLOWS_TO 追踪

核心实现(图 vs 向量的本质区别):

1. 向量 RAG 把代码当"文本",丢失了符号间的拓扑关系

2. 知识图谱把代码当"图":节点是函数/类/方法,边是 CALLS/REFERENCES/FLOWS_TO

3. "调用关系/死代码/数据流"本质是图问题,用 Cypher 一步到位,向量做不到

4. Code-Graph-RAG 实际是图 + 向量混合:结构化问题走图,语义相似度走 Qdrant 向量

3、工作原理与架构

系统分两大组件:多语言解析器(建图)+ RAG 系统(查图)。解析器用 Tree-sitter 把代码读成 AST,抽取符号与关系入 Memgraph;RAG 系统把自然语言转成 Cypher,查图拿结果再交给 AI 组织回答。

// 建图阶段(一次性)
Source Code -> Tree-sitter Parser -> AST Analysis -> Memgraph Knowledge Graph
                                                              |
// 查询阶段(每次提问)                                        |
User Query -> AI Model (Cypher Gen) -> Cypher Query -> Graph Results -> Response

// 关键设计:
//   - Tree-sitter:业界标准的增量解析库,一套方案支持 13+ 种语言
//   - 统一 schema:不同语言的函数/类/方法映射到同一套图节点与边类型
//   - Cypher 生成:AI 不直接猜答案,而是先生成图查询,答案来自真实结构

核心实现:

1. Tree-sitter 解析:跨语言统一抽象,函数/类/方法/模块都进同一套节点类型

2. AST 分析抽边:调用、引用、导入、包含、数据流等关系都变成图的边

3. Memgraph 存储:图数据库承载拓扑结构,支持 Cypher 高效遍历

4. AI 生成 Cypher:自然语言先翻译成图查询,结果再交给模型组织答案——答案有据可依

4、安装与环境

命令行工具 cgr 发布在 PyPI。用 uv 或 pipx 安装,带上 treesitter-full(全语言解析)和 semantic(向量搜索)两个 extra。还需 Docker(跑 Memgraph)、cmake、ripgrep。

# 前置:Docker(用于 Memgraph)、cmake、ripgrep

# 方式一:uv(官方推荐)
uv tool install "code-graph-rag[treesitter-full,semantic]"

# 方式二:pipx
pipx install "code-graph-rag[treesitter-full,semantic]"

# extras 说明:
#   treesitter-full  安装所有语言的 Tree-sitter 解析器
#   semantic         启用向量语义检索(配合 Qdrant)

核心实现:

1. 推荐用 uv tool install,隔离环境、避免污染系统 Python

2. treesitter-full 装全语言解析器;只分析少数语言可不带此 extra 减体积

3. semantic 启用向量检索(Qdrant),是"图 + 向量混合"里的向量那半

4. Docker 用来跑 Memgraph 图数据库;cmake/ripgrep 是解析与搜索的底层依赖

5、快速上手

三步走:起服务 → 解析入库 → 交互查询。cgr 自带"Memgraph + Qdrant"栈,无需手写 docker-compose。

# 1. 启动打包好的 Memgraph + Qdrant 服务栈(无需 compose 文件)
cgr daemon up

# 2. 把仓库解析进图(--update-graph 触发解析,--clean 清空旧图重新建)
cgr start --repo-path /path/to/repo --update-graph --clean

# 3. 进入交互式查询(自然语言提问)
cgr start --repo-path /path/to/repo
# 示例问题:
#   "谁调用了 handleLogin 方法?"
#   "这个项目里有没有死代码?"
#   "用户输入的 password 字段最终流到了哪些函数?"

核心实现:

1. cgr daemon up 一键起 Memgraph + Qdrant,无需自己写 compose

2. --update-graph 触发 Tree-sitter 解析并把符号与关系写入图

3. --clean 清空旧图,适合首次入库或大改动后重建

4. 再次 cgr start(不带 update)即进入交互查询,支持自然语言

6、核心能力一览

图谱建好后,Code-Graph-RAG 能做的不止是问答,而是一整套"代码理解 + 编辑"能力:

       - 自然语言问答:答案基于真实代码结构,而非模型猜测,减少幻觉

       - 源码检索:按名字或意图取回任意函数/类/方法的真实源码

       - AST 外科手术式编辑:AI 生成 AST 补丁改代码,改前先 diff 预览

       - 代码优化:按语言最佳实践或自定义编码规范优化

       - 死代码检测:从入口点遍历调用/引用边,找出无人引用的函数

       - 数据流追踪:沿 FLOWS_TO 污点边追踪值如何流经赋值/调用/IO(C#/Java/C/Go)

       - 结构化搜索替换:用 ast-grep 按 AST 模式跨库查找与改写,比正则可靠

核心实现(亮点):

1. FLOWS_TO 数据流边是安全审计利器:追踪用户输入到 IO sink 的路径

2. 死代码检测天然适合图:反向遍历找无入边节点,向量 RAG 做不到

3. AST 补丁编辑比"全文重写"更安全,diff 预览可人工确认

4. ast-grep 结构化搜索超越正则:按语法结构匹配,不怕格式差异

7、MCP 集成:让 Claude Code 直接查改代码

Code-Graph-RAG 可作为 MCP(Model Context Protocol)Server 运行。这意味着 Claude Code 等 MCP 客户端能直接查询和编辑你的代码库——AI 助手不再"盲读文件",而是先通过图谱理解结构再动手,准确率显著提升。

// 作为 MCP Server 运行后,MCP 客户端(如 Claude Code)可获得的能力:
//   - 查询代码结构与关系(调用、引用、数据流)
//   - 按意图检索源码
//   - 触发 AST 编辑与结构化搜索替换
//
// 集成价值:
//   传统 AI 编程助手靠"读文件全文"理解代码,跨文件关系全靠猜;
//   接入图谱后,助手能先"查图"理解拓扑,再精准定位修改点,
//   尤其在大型代码库里大幅降低幻觉与误改。

核心实现:

1. 遵循 MCP 标准,任何 MCP 客户端(Claude Code 等)都能接入

2. AI 助手从"读文件猜结构"升级为"查图谱知结构"

3. 大型代码库里,这种"先理解再动手"显著降低误改风险

4. 具体配置见仓库 docs/guide/mcp-server.md

8、总结

Code-Graph-RAG 的核心洞察是:代码的本质是图,不是文本。把函数/类/调用/数据流建成知识图谱,结构化问题就能用图查询精准作答,这是传统向量 RAG 在关系类问题上永远追不上的。

关键要点:

       - 本质:Tree-sitter 解析 + Memgraph 图谱 + AI 生成 Cypher 的混合 RAG

       - 优势:调用关系/死代码/数据流等结构化问题,图查询完胜向量切片

       - 安装:uv tool install "code-graph-rag[treesitter-full,semantic]",需 Docker/cmake/ripgrep

       - 使用:cgr daemon up 起服务 → cgr start --update-graph 建图 → 交互查询

       - 能力:问答/检索/AST 编辑/死代码/数据流追踪/结构化搜索替换

       - 集成:MCP Server 模式让 Claude Code 先查图、再改码,降低大型库误改

对于维护大型遗留系统、做代码审计、或想让 AI 编程助手真正"看懂"整个仓库的开发者而言,"把代码变成知识图谱"这条路线值得重点关注——它补上了传统 RAG 在"代码结构理解"上的短板,让"谁调用了谁""数据怎么流""哪些是死代码"这类工程核心问题有了确定性的答案。配合 MCP 接入 AI 助手,更让"AI 真正理解大型代码库"从愿景走向现实。理解了"代码即图"这个底层思路,也就抓住了下一代代码智能工具的设计方向。

相关推荐

置顶 精选
博客七周年:AI 一天完成整体重构
AI

博客七周年:AI 一天完成整体重构

博客从 2019 年国庆用 Xiuno BBS 搭建,到 2026 年国庆整整七年。868 篇文章、53 条评论、6060 个代码块,这次与 AI Agent 结对,一天完成从 PHP 论坛到 Next.js 的整体重构与无损迁移。

23
精选
​Jev 详解:不做生成的判断模型
AI

​Jev 详解:不做生成的判断模型

Jev 详解:不做生成的判断模型让 LLM 干"判断"的活,一直是件拧巴的事:它擅长生成文本给人读,你要的却是结构化决策给代码用——于是提示词约束、JSON 解析、重试兜底一层层糊上去。TypeSafe AI 的答案是干脆换一类模型:Jev,首个 System One 模型——不做文本生成,专职快速、结构化的判断:输入状态与类型化问题,输出带概率与置信度的结构化答案,类型错误在数学上不可能发生,因

11
精选
Laya 详解:可自托管微调的非自回归判断模型
AI

Laya 详解:可自托管微调的非自回归判断模型

Laya 详解:可自托管微调的非自回归判断模型Jev 证明了"判断模型"这条路走得通,但它闭源、按 token 计费、只能云端调用。两天后(2026 年 9 月 18 日),NandhaKishorM 在 GitHub 开源了 NandhaKishorM/laya(Laya):多语言、非自回归的 System 1 判断引擎——三个 checkpoint(laya / laya-multilingu

6