模型 / 数据集
vitali87/code-graph-rag avatar
vitali87/code-graph-rag

code-graph-rag:用知识图谱给 monorepo 装上一套可查询的大脑

该项目围绕「The ultimate RAG for your monorepo. Query, understand, and edit multi-language codebases with the power of AI and knowledge graphs.」构建,适用于实际场景的开源实践,提供可复用的工具链与集成方式。

5,134 个 Star675 个 ForkPythonMIT

秒懂

它是什么?
code-graph-rag 用 Tree-sitter 解析多语言代码库,把结构存入 Memgraph 图数据库,再通过自然语言生成 Cypher 查询。它面向需要跨语言理解和修改大型 monorepo 的工程师,但安装门槛和版本节奏需要提前看清。
适合谁用?
适合维护大型多语言 monorepo、且愿意接受 Docker 依赖和 Memgraph 运维成本的团队。它把静态结构变成可查询的图,比纯向量检索更精确。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 1 天前。
用什么语言写的?
主要是 Python(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决的是 monorepo 里找不到代码在哪的问题

大型 monorepo 里,函数定义、调用关系、模块依赖分散在几十种语言的文件中。IDE 的全局搜索只能按字符串匹配,跨语言的调用链往往断在语言边界上。code-graph-rag 把这个问题转成图查询:解析器提取函数、类、方法、模块以及它们之间的关系,存入 Memgraph,之后用自然语言问它。它的目标用户是那些代码库大到靠人肉翻阅已经失效的团队。README 里明确写出它可以按名称或意图检索真实源码,这比向量检索更接近工程师的实际需求。

Tree-sitter 解析加 Memgraph 存储,两层结构各司其职

系统分两部分。第一部分是 Tree-sitter 解析器,读取每个源文件,把函数、类、方法、模块及其关系抽取出来,放进 Memgraph,使用统一的跨语言 schema。第二部分是 RAG 系统,一个交互式 CLI,把自然语言转成 Cypher 查询,检索匹配代码,驱动 AI 编辑和优化。数据流是:源码进 Tree-sitter,生成 AST,再进 Memgraph 知识图谱。查询时,用户输入走 AI 模型生成 Cypher,执行后返回图结果。这个设计的关键在于,检索依据的是结构关系而不是文本相似度,所以能捕捉到字符串匹配找不到的间接调用。

安装和启动:一条命令拉起 Memgraph 加 Qdrant 栈

安装走 PyPI,推荐用 uv tool install "code-graph-rag[treesitter-full,semantic]",treesitter-full 带全部语言,semantic 带向量搜索。需要 Python 3.12 以上、Docker、cmake 和 ripgrep。启动栈用 cgr daemon up,不需要 compose 文件。然后 cgr start --repo-path /path/to/repo --update-graph 解析仓库,之后不加 --update-graph 即可查询。重复执行第一条命令可以索引多个仓库,图是共享的,同步一个项目不影响其他项目。注意 --clean 参数会删掉共享图里的所有项目,不是只删当前这一个,执行前会要求确认。

版本节奏是刻意的,但容易踩坑

这个项目的版本线有三条,且故意不同步。git tags 每个 merge 打一个;GitHub Releases 和 PyPI 每 50 个版本打一个,安全修复除外。所以 main 上的最新 tag 通常领先最新 release 几十个 patch 版本。uv tool install 和 pipx install 装的是 PyPI 最新版,也就是最新 release,不是最新 tag。想要跑比 release 更新的代码,得从 git 装:uv tool install "code-graph-rag[treesitter-full,semantic] @ git+https://github.com/vitali87/code-graph-rag@main"。这个设计本身没问题,但如果你依赖某个刚合入的修复,直接 pip 装会拿到旧代码。

语言支持分两档,别被全支持三个字骗了

README 说 Python、TypeScript、TSX、JavaScript、Rust、Go、Java、C、C++、C#、PHP、Lua、Dart 完全支持。Scala 在开发中。Ruby、Kotlin、Swift、Elixir、Haskell、Solidity、Bash、Nix 只有结构支持,即模块、函数、类(如果语言有)和导入,通过可插拔的 ast-grep 层实现。这意味着后一档语言能建图,但精细的 AST 编辑和模式重写可能不可用。如果你的 monorepo 主力语言在第二档,需要先查语言支持矩阵确认具体能力,而不是假设全功能。

编辑和优化依赖 AST 修补,不是文本替换

除了查询,它还支持通过 agent 做 AST 级外科手术式修补,改动前有 diff 预览。死代码检测通过从入口点遍历调用和引用边来实现。还可以用 ast-grep 按 AST 模式搜索和重写。运行时行为可以叠加:用 cgr trace 追踪一次测试运行,或者拉生产环境的 eBPF profile,把实际发生的调用合并进图,这样能暴露静态分析看不到的分派。这是它区别于纯静态分析工具的地方,但 README 没有给出 cgr trace 的具体用法示例,实际效果需要自己跑一遍验证。

限制和替代方案:图查询的代价与向量检索的取舍

最大的限制是环境依赖。Memgraph 需要 Docker,pymgclient 需要 cmake 编译,Python 必须 3.12 以上。piwheels 在 Debian Bookworm 上构建失败,因为系统 Python 是 3.11,得手动指定 3.12。这意味着在受限的 CI 环境或老系统上,光装依赖就可能卡住。另一个限制是 AI 生成 Cypher 的可靠性,README 没有给出准确率数据,这属于需要实测的部分。替代方案是纯向量检索的 RAG,比如把代码切块后 embedding 进 Qdrant,按相似度召回。区别在于向量检索不懂结构关系,查"这个函数被谁调用"这类问题会失效,而 code-graph-rag 的图结构天然支持这种查询。代价是多了一层图数据库要运维。

维护成本和许可证:MIT 之下仍有运维负担

项目以 MIT 许可证发布,可以自由使用和修改。但维护成本不低:Memgraph 和 Qdrant 是外部服务,需要 Docker 环境持续运行,索引更新需要手动触发 cgr start --update-graph。版本节奏快,每 merge 一个 tag,release 每 50 版一次,升级时要注意 PyPI 版本可能落后于 main。代码库本身是纯 Python wheel,跨平台安装没问题,但依赖的平台 wheel 和构建工具(如 cmake)可能成为瓶颈。从仓库布局看,docs/architecture/ 下有架构概览和 schema 文档,说明项目注重可维护性,但实际升级体验需要自己装一次才知道。

编辑结论

适合维护大型多语言 monorepo、且愿意接受 Docker 依赖和 Memgraph 运维成本的团队。它把静态结构变成可查询的图,比纯向量检索更精确。不适合只查单个小项目的人,也不适合无法运行 Docker 或 Python 3.12 以下的环境。采用前先验证三件事:确认你的语言在支持矩阵中的完整程度,检查版本节奏是否影响你需要的功能,以及跑通 cgr daemon up 和一次完整索引。它的价值在于图结构本身,而不是 AI 生成 Cypher 的稳定性,后者需要你亲自用真实代码库测试。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记