RepoDaily · 2026-08-11 · Security tool

Code-Graph-RAG:用知识图谱读懂整个多语言单体仓库

#8 Security tool Python +682 vitali87/code-graph-rag 打开仓库

通过 Tree-sitter 解析 Python、TypeScript、Rust、Go、C++、Java 等语言,构建 Memgraph 知识图谱,再借助 MCP 让 AI 用自然语言查询、编辑和审计代码。

项目类型Security tool
最适合需要理解大型多语言单体仓库的开发者——死代码检测、依赖关系映射、语义搜索,以及通过 Claude Code 等 MCP 客户端进行自然语言代码查询。
风险等级中等——项目处于 Beta 阶段(v0.0.603),需要 Python 3.12+、运行中的 Memgraph 实例和 LLM API 访问。
评估时间1–2 小时完成 pip 安装、启动 daemon 并索引一个代表性项目;语义搜索和代码优化功能的深度评估需要额外安装 torch/transformers。

核心问题: 基于图谱的代码理解在你的具体单体仓库复杂度下,是否比文件级 RAG 提供了显著更好的答案?

91/100

RepoDaily 采用评分

RepoDaily 将该项目的采用分评为 91/100(强):分数来自文章来源、安装路径、生产风险、差异化、许可证清晰度以及 AI/Agent 适配度。

基于 RepoDaily 来源和采用说明的方向性评分,不是基准测试。风险: 中
100证据质量

包含 5 个来源、覆盖 4 类来源;如有 RepoDaily 独有模块,会进一步提高证据分。

100可安装/可试用性

检测到 5 个工作流步骤、5 个下一步动作,以及 5 个命令/安装信号。

65维护可信度

趋势热度为 +682 stars;如内容中有 release、issue 或维护信号,会提高维护可信度。

93生产准备度

采纳风险标记为 medium,并包含 5 条安全说明与 4 条跳过条件。

100差异化

3 个机会视角、4 个替代方案,以及 4 个类型化模块支撑差异化判断。

82许可证清晰度

文章中包含许可证来源或许可证表述。

90Agent / AI 适配度

文章正文和元数据中检测到 7 个 AI/Agent 相关信号。

项目概览

Code-Graph-RAG 是一个开源的检索增强生成系统,它将代码库建模为可查询的知识图谱,而非一堆文本文件。它使用 Tree-sitter 为 Python、TypeScript、JavaScript、Rust、Java、C++、Go、Lua 以及新增的 Ruby 生成语言无关的 AST,然后将得到的实体——模块、函数、类及其关系——存储在 Memgraph 中。LLM 根据自然语言问题生成 Cypher 查询,检索实际源代码片段,甚至可以应用基于 AST 的编辑并预览可视化差异。

与传统的文件分块 RAG 相比,该项目直接建模代码间的结构关系。死代码检测能识别从任何入口点不可达的函数;依赖分析读取 pyproject.toml 映射导入关系;语义搜索使用 UniXcoder 嵌入按意图而非关键词查找函数。这些能力使其更接近静态分析平台而非文档聊天机器人。

版本 0.0.603 以 MIT 许可证在 PyPI 上分发,要求 Python 3.12 或更高版本。它内置 MCP 服务器用于与 Claude Code 集成,CLI 入口为 `cgr` 和 `code-graph-rag`,采用基于 daemon 的架构,通过文件监视器实时更新图谱。维护者还通过 code-graph-rag.com 提供托管云和本地企业部署。

解决什么问题

  • 传统文件分块 RAG 丢失结构上下文——当代码被分割为任意文本窗口时,调用图、继承链和跨文件依赖都变得不可见。
  • 静态分析工具通常是语言特定的;一个包含 Python 服务、TypeScript 前端和 Rust 二进制文件的单体仓库需要为每种语言准备单独的工具。
  • 死代码在大型仓库中无声积累,增加维护负担和攻击面,且缺乏清晰的可见性。
  • 自然语言代码查询通常返回近似匹配,而非关于哪个函数调用了什么、类在哪里定义、哪些路径可达等精确的结构答案。
  • 基于关键词的语义搜索会遗漏使用不同词汇实现相同意图的函数,使跨团队代码复用变得困难。

工作原理

  1. 从 PyPI 安装:`pip install code-graph-rag`。CLI 注册两个入口点(`cgr` 和 `code-graph-rag`),都指向 `codebase_rag.cli:app`。
  2. 启动 Memgraph 后端:`cgr daemon up`。这将启动存储代码库结构的图数据库。
  3. 索引仓库:`cgr start --repo-path ./my-project --update-graph`。Tree-sitter 解析器为每种支持的语言生成 AST,生成的模块、函数、类和关系写入 Memgraph。
  4. 通过自然语言查询或编辑。LLM(Google Gemini、OpenAI 或 Ollama)针对图谱生成 Cypher 查询,检索匹配的源代码片段,并可应用基于 AST 的编辑并预览可视化差异。
  5. 对于 MCP 集成,将 Claude Code(或其他 MCP 客户端)连接到运行中的服务器,即可在编辑器内进行代码库问答、优化建议和 shell 命令执行。

产品演示与界面预览

Code-Graph-RAG Demo
Code-Graph-RAG Demo — Official README visual asset that helps readers understand the project interface, architecture, workflow, or output. docs/index.md image
demo
demo — Official README visual asset that helps readers understand the project interface, architecture, workflow, or output. README.md image

架构解析:从源代码到可查询图谱

Code-Graph-RAG 的流水线分为三个层次。解析层使用 Tree-sitter(锁定在 0.25.2)为每种支持的语言生成 AST。项目维护了 tree-sitter-c 和 tree-sitter-cpp 的分叉版本,因为上游 tree-sitter-c 在 `#define` 值嵌入块注释时会丢弃声明(记录为 issue #555)。分叉版本携带 `repeat(preproc_arg)` 修复,并在 pyproject.toml 中锁定到特定提交。

存储层是 Memgraph,通过 pymgclient 1.5.1+ 访问。图谱模式跨语言统一:Python 函数和 Rust 函数都成为具有一致关系类型的 Function 节点。这一设计选择意味着跨语言查询——例如'哪些入口点最终调用了这个共享工具'——无需按语言适配即可工作。

智能层通过 pydantic-ai 2.0.0+ 处理 Cypher 生成,支持 Google Gemini、OpenAI 和 Ollama 作为后端模型。分词使用 tiktoken 0.12.0+。语义搜索是可选层,由 UniXcoder 嵌入驱动,通过 `[semantic]` 额外依赖提供 qdrant-client、torch 和 transformers。`watchdog` 库提供实时文件监视,在活跃开发期间保持图谱更新。

命令界面与包配置

  • `cgr daemon up`——通过内置的 docker-compose.yaml 启动 Memgraph 后端。
  • `cgr start --repo-path ./my-project --update-graph`——索引仓库并填充或刷新知识图谱。
  • pyproject.toml 中注册了两个 CLI 别名:`code-graph-rag` 和 `cgr`,均调用 `codebase_rag.cli:app`。
  • 可选额外依赖:`pip install code-graph-rag[treesitter-full]` 获取所有语言语法;`[semantic]` 获取 torch + transformers + qdrant;`[milvus]` 获取 pymilvus 和 milvus-lite;`[ast-grep]` 获取可插拔的基于 YAML 的语言层。
  • 贡献者必须使用 pre-commit 钩子:`make dev` 运行 `pre-commit install` 和 `pre-commit autoupdate`。提交必须通过检查;明确禁止使用 `--no-verify`。

集成界面:MCP、Claude Code 与 LLM 后端

MCP 服务器集成是 AI 辅助代码工作的主要交付机制。Claude Code 连接到运行中的 Code-Graph-RAG 服务器后,即获得回答代码库结构问题、检索源代码片段、执行 shell 命令和提出基于 AST 的编辑建议的能力。MCP 依赖锁定在 1.28.1+ 版本。

Cypher 生成开箱即用支持三个 LLM 提供商:Google Gemini、OpenAI 和 Ollama。Ollama 路径对注重安全的组织意义重大,因为它允许完全本地推理,无需将源代码发送到外部 API。pydantic-ai 框架(2.0.0+)充当这些提供商与图谱查询逻辑之间的抽象层。

维护与安全状况

  • 版本 0.0.603 在 pyproject.toml 分类器中标记为 'Development Status :: 4 - Beta',表明 API 和功能集尚未稳定。
  • CI 通过 GitHub Actions(ci.yml 工作流)运行,配备 Codecov 覆盖率跟踪和 SonarCloud 质量门检查。
  • 项目中存在 OpenSSF Scorecard 和 OpenSSF Best Practices 徽章,表明参与了供应链安全计划(bestpractices.dev 项目 ID 13757)。
  • 已关联 SkillsLLM Security Check 徽章,指向 skillsllm.com/security-check 的仓库安全检查页面。
  • README 中有注释指出 GitHub 账户曾被暂停,导致 shields.io 徽章在该期间返回 'repo not found'。这对下游依赖者构成可恢复性和连续性风险。
  • 分叉的 tree-sitter-c 和 tree-sitter-cpp 语法锁定到特定提交;pyproject.toml 注明一旦上游发布 issue #555 的修复即应移除这些覆盖。

谁适合关注

适合关注

  • 你的单体仓库跨越三种或更多编程语言,传统搜索工具返回的结果不够深入。
  • 你使用 Claude Code 或其他 MCP 兼容代理,希望它能理解代码库的结构而非扁平文本。
  • 死代码检测和依赖分析是仓库维护周期中的持续关注点。
  • 由于数据驻留要求,你的团队需要本地或本地 LLM 推理(通过 Ollama)进行代码分析。

可以先跳过

  • 你的代码库是单一语言且不超过 5 万行——语言特定的 linter 和 IDE 搜索会更快更成熟。
  • 你的环境无法运行 Memgraph 或 Docker,因为基于 daemon 的架构依赖于此。
  • 你的团队无法访问任何受支持的 LLM 提供商(Gemini、OpenAI 或 Ollama),这是 Cypher 生成的必要条件。
  • 你需要生产级稳定性——Beta 分类和 0.0.x 版本号表明预期会出现破坏性变更。

风险与注意事项

项目功能完备但仍处于 0.0.x Beta 版本,依赖分叉的语法包,且需要 Memgraph 和 LLM 提供商才能产生价值。

  • 版本 0.0.603 标记为 Beta,API 和图谱模式可能在不经过弃用周期的情况下变更。
  • 分叉的 tree-sitter-c 和 tree-sitter-cpp 锁定到特定提交,在上游 issue #555 解决前形成对维护者 GitHub 分叉的维护依赖。
  • README 记录了过去的 GitHub 账户暂停事件,曾导致徽章渲染和潜在的包可用性问题,引发连续性担忧。
  • 核心功能需要运行中的 Memgraph 实例和对 LLM 提供商的网络访问,增加了超出典型 pip 安装的运维复杂度。
  • 语义搜索功能需要可选的 `[semantic]` 额外依赖,会拉取 torch 和 transformers——这可能与现有环境冲突。
  • 项目使用 defusedxml 0.7.1+ 进行 XML 解析,可缓解常见的 XML 外部实体(XXE)攻击。
  • Shell 命令执行是文档化的功能('用于运行测试和 CLI 工具的 Shell 命令执行'),这意味着 MCP 服务器可以执行任意命令——访问控制和沙箱化由运营者负责。
  • Ollama 支持实现了完全本地推理,消除了将源代码传输到外部 LLM API 的需要。
  • 参与 OpenSSF Scorecard 和 OpenSSF Best Practices(项目 13757)表明对供应链安全实践的关注。
  • 所有贡献者必须使用 pre-commit 钩子,且贡献政策明确禁止行内注释,降低了代码中误导性或过时文档的风险。

替代方案比较

方案适用场景代价
Sourcegraph Cody
你需要成熟的、企业级的代码搜索和 AI 助手,具有更广泛的语言覆盖和托管基础设施。免费增值模式,含付费层级;云托管或自托管企业版。
aider
你主要需要在终端工作流中进行 AI 辅助代码编辑,而非结构化代码库查询。免费开源;需要自己的 LLM API 密钥。
Continue
你想要 IDE 集成(VS Code、JetBrains)的 AI 编程助手,具备代码库上下文感知能力。免费开源,含付费企业功能。
Tree-sitter 符号索引器(如 ast-grep)
你需要结构化代码搜索和 lint 规则,但不需要知识图谱或 LLM 查询层。免费开源。

这个趋势说明了什么

多语言单体仓库上手

继承了包含 Python 服务、TypeScript 前端和 Rust 或 C++ 核心模块的单体仓库的团队,可以利用统一图谱模式提出跨语言问题,例如'Python 层中哪些函数最终调用了 C++ 共享库'——文件级 RAG 无法回答此类查询。

索引一个代表性子目录,运行跨语言调用路径查询,并将结果与手动 grep 或 IDE 搜索对同一问题的结果进行比较。

重大重构前的死代码审计

死代码检测功能识别从任何入口点不可达的函数,在重构或安全审查前直接减少维护负担和潜在攻击面。

在经历了多次功能添加和移除的仓库上运行 `cgr start`,然后手动验证被标记函数的样本是否确实未被使用。

使用 Ollama 的纯本地代码分析

有严格数据驻留要求的组织可以使用 Ollama 后端进行 Cypher 生成,将所有源代码和查询保持在本地基础设施上,无需外部 API 调用。

将 Ollama 配置为 LLM 提供商,索引一个有一定规模的项目,并确认在查询和编辑操作期间没有出站网络流量。

下一步建议

安装、索引并运行一个结构化查询

评估基于图谱的 RAG 是否优于你当前代码搜索的最快方法是安装软件包、索引一个真实项目,然后提出一个跨文件的结构化问题。

  1. 在 Python 3.12+ 虚拟环境中运行 `pip install code-graph-rag`。
  2. 使用 `cgr daemon up` 启动后端,验证 Memgraph 正在运行。
  3. 索引一个代表性仓库:`cgr start --repo-path ./your-project --update-graph`。
  4. 通过 CLI 或 MCP 连接的 Claude Code 会话提出一个结构化问题,例如'展示所有调用 deprecated_module.handle_request 的函数'。
  5. 将结果的准确性和完整性与你对同一查询的现有搜索方法进行比较。

RepoDaily 判断

Code-Graph-RAG 通过将结构关系建模为图谱而非为嵌入搜索分块文件,提供了一种真正不同的代码库智能方法。其多语言 Tree-sitter 解析、与 Claude Code 的 MCP 集成,以及死代码检测和语义搜索等功能,填补了多语言单体仓库团队的真实空白。Beta 版本、分叉的语法依赖和 Memgraph 运维要求意味着它目前最适合在开发环境中评估,生产使用取决于持续的稳定性和上游 Tree-sitter 问题的解决。

信息来源